Skip to content

ko-yerin/blockchain-wallet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

23 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

**npm run dev:ts index.ts npm run dev:ts ./wallet/server.ts

TypeScript

๋Ÿฐํƒ€์ž„์ด ์—†๋‹ค==์‹คํ–‰ํ• ์ˆ˜์žˆ๋Š” ํ™˜๊ฒฝ, ์‹คํ–‰์‹œ์ผœ์ค„์ˆ˜์žˆ๋Š” ์‹คํ–‰๊ธฐ typescript๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋จน์„์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋Š” ์•„๋‹ˆ๋‹ค ์ž‘์„ฑํ›„ ๋ฒˆ๋“ค๋ง์„ ํ†ตํ•ด js์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์ค€ํ›„ ๋ธŒ๋ผ์šฐ์ €๋‚˜ nodejsํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ด์ค˜์•ผ๋œ๋‹ค

  • npm init -y

  • npm install -D typescript ts-node @types/node(Node.js์—์„œ typescript๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ)

  • npx tsc index.ts(ts๋ฅผ js๋กœ ๋ฒˆ๋“ค๋งํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด)

๋ฒˆ๋“ค/๋นŒ๋“œํ•˜๊ธฐ๋„ˆ๋ฌด ๊ธฐ์ฐฌ๋‹ค ..

  • npx ts-node ํŒŒ์ผ๋ช… (๋ฐฐํฌํ• ๋–„๋Š” ์‚ฌ์šฉํ•˜๋ฉด์•ˆ๋˜๊ณ  ๊ฐœ๋ฐœํ…Œ์ŠคํŠธํ• ๋•Œ๋งŒ์‚ฌ์šฉ) (Typescript๋Š” ์ฝ”๋“œ์ž‘์„ฑ์„ ๋งˆ์นœํ›„, javascript๋กœ ๋ณ€ํ™˜(์ปดํŒŒ์ผ)๋˜๋Š”๋ฐ, Node.js์—์„œ๋Š” javascript๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๋ณ€ํ™˜ => ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค. ts-node๋Š”, ์ด ๋ณ€ํ™˜ => ์‹คํ–‰ ์ž‘์—…์„ ํ•œ๋ฒˆ์— ํ•ด์ค€๋‹ค.) ํ„ฐ๋ฏธ๋„์—์„œ ๋ฐ”๋กœ์ฐ์–ด๋ณผ์ˆ˜์žˆ๋‹ค

  • tsconfig.json์ƒ์„ฑ ( ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์–ด๋–ค ๊ทœ์น™์„ ์„ค์ •ํ•  ๊ฒƒ์ธ์ง€ ์ ๋Š” ๋ฌธ์„œ )

{
    "compilerOptions": {
        "outDir": "./dist/", //๋ฐ‘์—index.js๋ฐ”๋กœ์ƒ๊ธฐ๋Š”๊ฒŒ ์‹ซ์–ด์„œ ์—ฌ๊ธฐ์— ๋”ฐ๋กœ ์ƒ์„ฑ๋˜๊ฒŒ ํ•ด์ฃผ๋Š” ์†์„ฑ( ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ฒฐ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. )
        "esModuleInterop": true, //import๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์†์„ฑ    import React from 'react'
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "strict": true, // /* ๋ชจ๋“  ์—„๊ฒฉํ•œ ํƒ€์ž…-์ฒดํ‚น ์˜ต์…˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ */
        "baseUrl": ".", //  /* non-absoluteํ•œ ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ฒ˜๋ฆฌํ•  ๊ธฐ์ค€ ๋””๋ ‰ํ† ๋ฆฌ */
        "typeRoots": ["./node_modules/@types", "./@types"], //typeRoots๋ฅผ ์ง€์ •ํ•˜๋ฉด typeRoots ์•„๋ž˜์— ์žˆ๋Š” ํŒจํ‚ค์ง€๋งŒ ํฌํ•จ
        "paths": {
            "@core/*": ["src/core/*"], //core์•ˆ์—์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ  ํ˜„์žฌ์œ„์น˜์„œ๋ถ€ํ„ฐ๊ฐ€์•„๋‹Œ  src๋””๋ ‰ํ† ๋ฆฌ์•ˆ์˜ core๋””๋ ‰ํ† ๋ฆฌ๋ถ€ํ„ฐ ์‹œ์ž‘(../../ ๋ฅผ  ์ตœ์†Œํ™”ํ• ์ˆ˜์žˆ๋‹ค)
            "*": ["@types/*"] //core๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“ ๊ฒฝ๋กœ๋ฅผ  @type์—์„œ ์‹œ์ž‘
        }
    }
}
  • npx tsc --build ๋ชจ๋“ tsํŒŒ์ผ์„ ์œ„์„ค์ •์„ ์ ์šฉํ•ด์„œ js์–ธ์–ด๋กœ ๋ฒˆ๋“ค๋งํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด

//๊ฒฝ๋กœ์“ด๊ฑฐ ๋˜๋‚˜ํ•ด๋ณด์Ÿˆ

index.ts

import { a } from '@core/utils/utils.ts'

utils.ts

export const a = 10
  • npm install -D tsconfig-paths (tsconfig.json์—์„œ paths์— ์ ์–ด๋‘”์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด)

  • npx ts-node -r tsconfig-paths/register [ํŒŒ์ผ๋ช…] (๊ฒฝ๋กœ์— ๋ณ„์นญ์ด ์‚ฌ์šฉ๋œ tsํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.)

๋งค๋ฒˆ์น˜๊ธฐ ๊ธฐ์ฐฌ์œผ๋‹ˆ package.json์— ์„ค์ •ํ•ด๋‘๊ธฐ "dev:ts":"ts-node -r tsconfig-paths/register" (npm run dev:ts)

//์ด๋ช…๋ น์–ด๋กœ @core์‚ฌ์šฉํ•œ ํŒŒ์ผ์‹คํ–‰ // npm run dev:ts ./wallet/server.ts //@core๋•Œ๋ฌธ์— // npx ts-node -r tsconfig-paths/register ./wallet/server.ts

//@core๋ณ„์นญ์„ ์•ˆ์“ฐ๋ฉด npx ts-node๋งŒ ์จ์ฃผ๋ฉด ๋œ๋‹ค

*testํŒŒ์ผ์„ ์œ„ํ•œ npx jest๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด npm install -D ts-jest๋ฅผ ๊น”์•„์คŒ

์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€์ ธ์˜ฌ๋•Œ ๊ฐœ๋นก์นจ

  • npm i --save-dev @types/express //ํฐ๊ฒƒ๋“ค์€ ์ด๊ฑฐ์„ค์น˜
  • npm i -D @types/express

//์ž‘์€๊ฒƒ๋“ค์€ ๋จธํ•ด์ค„์ง€ ์•ˆ๋– ์„œ @types๋””๋ ‰ํ† ๋ฆฌ์— hex-to-binary ์ฒ˜๋Ÿผ ๋ณ„์นญ ์„ค์ •

  • eslint ->๋ฐฐ์—ด์˜ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆด ๋•Œ ์ผ๋ฐ˜ for๋ฌธ์„ ๋Œ๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ, forEach, map ๋“ฑ Array ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์˜ ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์žก์•„์ฃผ๋Š” ๊ฒƒ์ด eslint๊ฐ€ ํ•˜๋Š” ์—ญํ• 

  • prettier

-> prettier๋Š” eslint์ฒ˜๋Ÿผ '์ฝ”๋“œ ๊ตฌํ˜„ ๋ฐฉ์‹'์ด ์•„๋‹Œ, ์ค„ ๋ฐ”๊ฟˆ, ๊ณต๋ฐฑ, ๋“ค์—ฌ ์“ฐ๊ธฐ ๋“ฑ ์—๋””ํ„ฐ์—์„œ 'ํ…์ŠคํŠธ'๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์ž‘์„ฑ๋˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

  • npm install -D eslint prettier eslint-plugin-prettier eslint-config-prettier -->D๋ฅผ ์“ฐ๋Š”์ด์œ ๋Š”? package.json์— ๊ฐœ๋ฐœ๋ชจ๋“œ(devDependencies)๋กœ ์ €์žฅํ•˜๊ธฐ์œ„ํ•ด---๋‚˜์ค‘์— ๋ฐฐํฌํ• ๋•Œ dev ๋ถ™์€๊ฑด ์„ค์น˜ ์•ˆ๋˜๋„๋ก build ํ•˜๊ณ  ๋ฐฐํฌํ• ๊ฒ๋‹ˆ๋‹ค

--->eslint-config-prettier ๋Š” prettier ์˜ ์„ค์ • ์ค‘ eslint ์˜ ์„ค์ •๊ณผ ์ถฉ๋Œ์ด ๋‚˜๋Š” ์„ค์ •๋“ค์„ ๋น„ํ™œ์„ฑํ™” ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

---> eslint-plugin-prettier๋Š” Prettier์˜ ๊ทœ์น™์„ eslint์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ด์ฃผ๋Š” plugin์ด๋‹ค.

.eslintrc ํŒŒ์ผ์ƒ์„ฑ

.prettierrc ํŒŒ์ผ์ƒ์„ฑ

.eslintrc

{
    "extends": ["plugin:prettier/reccommend"]
}

.prettierrc

{
    "printWidth": 120,
    "tabWdith": 4,
    "singleQuote": true,
    "trailingComma": "all",
    "semi": false
}

์„ค์ •๋“ค๊ฐ€๋Š”๋ฒ• Ctrl + , --->Format On Save ์ฒดํฌ ---> Default Formatter์—์„œ prettier-code formatter๋ฐ”๊นŒ์ฃผ๊ธฐ

๊ฐ์ฒด์ง€ํ–ฅ์  ์ž‘์€๊ฒƒ๋ถ€ํ„ฐ ๋งŒ๋“ค๋ฉด์„œ ํฐ๊ฑฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ๊ทผ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ํž˜๋“ค๋‹ค ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ ํ•จ

javascript ->jest typescript -> jest

  • npm install -D ts-jest @types/jest babel -core
  • npm isntall -D @babel/preset-typescript @babel/preset-env

babel.config.js (nodeํ™˜๊ฒฝ์—์„œ typescript์–ธ์–ด๋ฅผ ์ฝ์„์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์•„์ด)

module.exports = {
    presets: [
        [
            '@babel/preset-env',
            {
                targets: { node: 'current' },
            },
        ],
        '@babel/preset-typescript',
    ],
}

jest.config.ts

import type { Config } from '@jest/types'
const config: Config.InitialOptions = {
    moduleFileExtensions: ['ts', 'js'],
    testMatch: ['<rootDir>/**/*.test.(js|ts)'],
    moduleNameMapper: {
        //๋ณ„์นญ
    },
    testEnvironment: 'node',
    verbose: true,
    preset: 'ts-jest',
}

export default config

//ํ„ฐ๋ฏธ๋„์— npx jest์“ฐ๋ฉด  ์‹คํ–‰๋จ
  • ๋งˆ์ด๋‹

๋งˆ์ด๋‹์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ: ๋ธ”๋Ÿญ์ด ์ƒ์„ฑ๋˜๋Š” ํ‰๊ท ์‹œ๊ฐ„์„ ๊ตฌํ•ด์•ผ๋จ ํ‰๊ท ์ ์œผ๋กœ ๋ธ”๋Ÿญ์„ ์ƒ์„ฑํ• ๋•Œ 10๋ถ„ ์ •๋„ ๊ฑธ๋ฆฌ๊ฒŒ ํ•˜๊ณ ์‹ถ๋‹ค ํ‰๊ท ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ธ”๋Ÿญ๊ฐฏ์ˆ˜๋ฅผ 10๊ฐœ๋กœ ํ•˜๊ฒ ๋‹ค ๊ทธ๋Ÿผ ๋ธ”๋Ÿญ์„ ๋‹ด์„์ˆ˜์žˆ๋Š”๊ณต๊ฐ„ํ•„์š”

#์ž‘์—…์ˆœ์„œ ##๋ชฉ์ ์€ ๋งˆ์ด๋‹๊ตฌํ˜„ ->๋งˆ์ด๋‹์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋‚œ์ด๋„๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋‚œ์ด๋„๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ฒด์ธํ•„์š”

1.์ฒด์ธ๊ตฌํ˜„ 2.๋‚œ์ด๋„ ๊ตฌํ˜„ 3.๋งˆ์ด๋‹ ๊ตฌํ˜„

ํ•ด์‰ฌ๊ฐ’์€ 16์ง„์ˆ˜๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค(64๊ธ€์ž) 16์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด 1๊ฐœ์˜๊ธ€์ž๋ฅผ 4๊ธ€์ž๋กœ ์น˜ํ™˜ํ• ์ˆ˜์žˆ๋‹ค (64*4 ๊ธ€์ž)

16์ง„์ˆ˜๋Š” 2์ง„์ˆ˜(0,1)๋ž‘ ์นœ๊ตฌ๋‹ค

16์ง„์ˆ˜ 1๊ธ€์ž 4 bit 16์ง„์ˆ˜ 2๊ธ€์ž 8 bit

8bit=1byte

์™œ16์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋Š”๊ฐ€ ์ž‘์—…์ฆ๋ช…์ค‘ pow๋Š” hash๊ฐ’์„ ํ†ตํ•ด์„œ ์•ž์—์žˆ๋Š” ์ž๋ฆฟ์ˆ˜0์ด ๋ช‡๊ฐœ๋“ค์–ด๊ฐ”๋Š”๊ฐ€๋ฅผ ์ฐพ๋Š”๊ฑฐ

difficulty=4 ๋ผ๋ฉด hash๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ์„๋•Œ
0์ด ์•ž์— 4๊ฐœ์žˆ๋Š”๊ฑธ ์ฐพ๋Š”๊ฑฐ 0000

์ฒซ๋ฒˆ์จฐ ์ˆœ์„œ๋Š” hash์—์„œ 2์ง„์ˆ˜๋กœ ๋ฐ”๊ฟ€์ค„ ์•Œ์•„์•ผ๋จ

core

blockchain

-block
-chain

serve

-http
-websocket

//์˜ต์…˜๊ฐ’ public, private

//class๋ฌธ๋ฒ•์—์„œ๋Š” default๋กœ ์˜ต์…˜๊ฐ’์ด public์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๋‹ค

//public ์ ‘๊ทผ ์ œํ•œ์ž: class P2PServer extends Chain ์ด๋Ÿฐ์‹์œผ๋กœ extends๋กœ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์™”์„๋•Œ //Chain class์•ˆ์—์žˆ๋Š” ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๋‹ค ๊ฐ€์ ธ์˜ค๋Š”๊ฑด๋ฐ ๊ทธ๋Ÿผ ํ˜„์žฌ P2PServer์— Chain๋‚ด์šฉ์ด ๋‹ค ๋“ค์–ด์žˆ๋Š”๊ฑฐ๋ผ //Chain์•ˆ์— ์žˆ๋Š” public์ด ๋ถ™์€ ๋ชจ๋“ ๊ฒƒ์€ this.connectSocket ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ€์ ธ์™€์„œ ์“ธ์ˆ˜ ์žˆ๋‹ค //(P2PServer.connectSocket๋˜๋Š” Chain.connectSocket์œผ๋กœ๋„ ์“ธ์ˆ˜์—†๊ณ  this. ์œผ๋กœ ์จ์ค˜์•ผ ํ•œ๋‹ค ) //๊ทธ๋Ÿฐ๋ฐ private๊ฐ€ ๋ถ™์€ ๊ฒƒ๋“ค์€ ๊ฐ€์ ธ์™€์„œ ์“ธ์ˆ˜์—†๋‹ค

//private ์ ‘๊ทผ ์ œํ•œ์ž: ๋‹จ์–ด ๋œป ๊ทธ๋Œ€๋กœ ๊ฐœ์ธ์ ์ธ ๊ฒƒ์ด๋ผ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. //**************************************____************************************** //๋‹จ๋ฐฉํ–ฅ์ด๋ž€ client๋Š” ์š”์ฒญ๋งŒ ์„œ๋ฒ„๋Š” ์‘๋‹ต๋งŒ ํ• ์ˆ˜์žˆ๋‹ค //์–‘๋ฐฉํ–ฅ์ด๋ž€ client, server๋‘˜๋‹ค ์š”์ฒญ, ์‘๋‹ต์„ ํ• ์ˆ˜์žˆ๋‹ค.

//๊ทธ๋ž˜์„œ client,server๊ฐ€ ๋”ฑ ์ •ํ•ด์ ธ์žˆ์ง€์•Š๊ณ  ํ•˜๋Š”์—ญํ• ์—๋”ฐ๋ผ์„œ client๋„ ๋ ์ˆ˜์žˆ๊ณ  server๋„ ๋ ์ˆ˜์žˆ๋‹ค //p2p๋Š” ์–‘๋ฐฉํ–ฅ์ด๋‹ค //์šฐ๋ฆฌ๋Š” ๊ทธ ๋„คํŠธ์›Œํ‚น ๋ฐฉ๋ฒ•์ค‘ p2p๋„คํŠธ์›Œํ‚น์„ ๋ธ”๋ก์ฒด์ธ์— ์‚ฌ์šฉํ• ๊ฒƒ์ด๋‹ค //์™œ ์–‘๋ฐฉํ–ฅ์ธ p2p๋„คํŠธ์›Œํ‚น์„ ์ด์šฉํ•˜๋Š”๊ฐ€? //์ค‘์•™ํ™”=๋‹จ๋ฐฉํ–ฅ, ํƒˆ์ค‘์•™ํ™”= ์–‘๋ฐฉํ–ฅ //์ค‘์•™ํ™”๋Š” ์ค‘์•™์—์„œ ๊ด€๋ฆฌ(์ค‘์•™์„ ํ†ตํ•ด์„œ๋งŒ ์š”์ฒญ๊ณผ์‘๋‹ต ๊ฐ€๋Šฅ) ๊ทธ๋Ÿผ ๊ฑฐ๊ธฐ๋งŒ ํ„ธ๋ฆฌ๋ฉด ๋‹คํ„ธ๋ฆผ //ํƒˆ์ค‘์•™ํ™”๋Š” ๊ฐœ์ธ๋“ค์ด ๊ด€๋ฆฌ (ํ•˜๋Š”์—ญํ• ์— ๋”ฐ๋ผ server๋„ ๋˜๊ณ  client๋„ ๋ ์ˆ˜์žˆ์Œ) ๊ทธ๋Ÿผ ํ„ธ๋ ค๋ฉด ๊ทธ์ด์ „ํ•ด์‰ฌํ•„์š”,๊ทธ๊ฑธํ„ธ๋ ค๋ฉด ๋˜๊ทธ์ด์ „ํ•ด์‰ฌํ•„์š” ํ•ดํ‚นํž˜๋“ฌ,๋ณด์•ˆ๊ฐ•ํ™” //๊ทธ๋ฆฌ๊ณ  ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ํ•œ์‚ฌ๋žŒ๊ป˜ ํ„ธ๋ ธ๋‹ค๊ณ  ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€์•Š์Œ //๊ทธ๋ฆฌ๊ณ  ์กฐ์ž‘์„ ํ•˜๋ ค๊ณ  ํ•ด๋„ ์ „๋ถ€๊ฑฐ๋ฅผ ๋‹คํ•ด์•ผ๋จ ๊ทธ๊ฑด ๋ถˆ๊ฐ€๋Šฅ //์ปดํ“จํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ ,์„œ๋ฒ„ ๋‘˜๋‹ค๊ฐ€๋Šฅ //vs code๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ค์—ญํ• (client, server)์„ ํ• ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ฉ”๋ชจ์žฅ ๊ฐ™์€์—ญํ•  //๋ธŒ๋ผ์šฐ์ €๋Š” client //********************************_******************************** //p2p๋ž€? (peer-to-peer network) ํ˜น์€ ๋™๋“ฑ ๊ณ„์ธต๊ฐ„ ํ†ต์‹ ๋ง

//๋™๋“ฑ๊ณ„์ธต๊ฐ„ ์—ฐ๊ฒฐ๊ตฌ์กฐ, ์—ฌ๋Ÿฌ๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๋™๋“ฑํ•œ ๊ฐœ๋…์œผ๋กœ ๋ง์„ ์ด๋ฃน๋‹ˆ๋‹ค

//์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ๊ตฌ์กฐ๋Š” ๋‹ค์ˆ˜์˜ ์ปดํ“จํ„ฐ๊ฐ€ ์„œ๋ฒ„์ปดํ“จํ„ฐ์— ์š”์ฒญํ•˜๋ฉด ์š”์ฒญ์— ๋งž๋Š” ์‘๋‹ต์„ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์ด๋‹ค

//P2P๋Š” ์ปดํ“จํ„ฐ๋ผ๋ฆฌ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ตฌ์กฐ์ด๋‹ค //์š”์ฒญํ•˜๋Š” ์ปดํ“จํ„ฐ์™€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค //๋ˆ„๊ตฌ๋“  ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—ญํ• ์„ ๋‘˜๋‹คํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค //********************************_********************************

//์ฒด์ธ์€ ๊ทธ๋ƒฅ ๋ฐฐ์—ด์ž„ ์ด๋ฆ„์„ ์ฒด์ธ์ด๋ผ๊ณ  ์ •ํ•œ๊ฑฐ ๊ทธ์•ˆ์— ๋ธ”๋Ÿญ์ด ๋“ค์–ด๊ฐ€๋Š”๊ฑฐ์ž„ //๋ธ”๋Ÿญ์„ ๋„ฃ๋Š”ํ–‰์œ„๋ฅผ ์ฒด์ด๋‹์ด๋ผ๊ณ ํ•จ //๋ธ”๋Ÿญ์€ ์˜ˆ๋ฅผ๋“ค๋ฉด ํ˜„์žฌ 100๋ฒˆ๊นŒ์ง€ ๋งŒ๋“ค์–ด์ ธ์žˆ๋‹ค ๊ทธ๋Ÿผ ๊ฑฐ๊ธฐ๊นŒ์ง€์˜ ๋ธ”๋Ÿญ์„ ๊ฐ€์ ธ์˜ค๋Š”๊ฑฐ๊ณ  ๊ทธ์ดํ›„ 101๋ฒˆ์งธ๋ถ€ํ„ฐ ๋‚ด๊ฐ€๋งŒ๋“œ๋Š”๊ฑฐ์ž„ //๊ทผ๋ฐ ๋‚ด์ปด์ด ๋А๋ฆฌ๋ฉด ๊ฒŒ์†๋ชป๋งŒ๋“ค๊ณ  ๋‹จ์‚ฌ๋žŒ์ด ๋งŒ๋“ค์ˆ˜๋„์žˆ์Œ ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒํ•ด์ฃผ๋Š” gpu๋ฅผ ์ด์šฉํ•˜๊ธฐ์œ„ํ•ด์„œ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ๋ฅผ ์‚ฌ์„œ ์ปด์— ๊ฝ‚์•„์„œ ํ•˜๋Š”๊ฑฐ //๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ 5๋ฒˆ์จฐ ๋ธ”๋Ÿญ์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์ตœ์‹ ์œผ๋กœ๋งŒ๋“ค์–ด์ง„ ๋ธ”๋Ÿญ์ด 100๋ฒˆ์จฐ์ด๋‹ค ๊ทธ๋Ÿผ 100๋ฒˆ์จฐ๊นŒ์ง€ ๋ฎ์–ด์”Œ์šฐ๊ณ  ๊ทธ์ดํ›„๋ธ”๋ก์„ ๋งŒ๋“œ๋Š”๊ฑฐ //******************************___******************************

//difficulty๋ฅผ 10์œผ๋กœ ํ–ˆ๋‹ค ๊ทธ๋Ÿผ nonce๊ฐ’์„ 1๋ถ€ํ„ฐ ๋„ฃ์–ด๋ณด๋ฉด์„œ hash๊ฐ’์„ hex๋ฅผ ํ†ตํ•ด 2์ง„์ˆ˜๋กœ ๋ฐ”๊พผ๊ฐ’์—์„œ 0์ด 10๊ฐœ๊ฐ€ ๋ ๋–„ ๊นŒ์ง€ ์ฐพ๋Š”๋ฐ //10๊ฐœ์ด์ƒ์ด๋ฉด ๋˜๊ณ  ์ฆ‰ 11๊ฐœ 12๊ฐœ ์—ฌ๋„ ๋…ธ์ƒ๊ด€ 10๊ฐœ๋ณด๋‹ค ์ ์œผ๋ฉด ์•ˆ๋˜๋Š”๊ฑฐ // ์ฐพ์œผ๋ฉด ๋งˆ์ด๋‹(์ฑ„๊ตด)ํ•œ๊ฑฐ!! //******************************_****************************** //static

//static์€ ๋งค์„œ๋“œ์•ž์—๋งŒ ์“ธ์ˆ˜์žˆ๋‹ค //static์€ ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ๋‹ค์“ธ์ˆ˜์žˆ๋ƒ ์—†๋ƒ ๊ทธ์ฐจ์ด๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ์ ์˜ ์ฐจ์ด์ด๋‹ค //static์ด ๋ถ™์€ ๋งค์„œ๋“œ๋Š” ์‹œ์ ์„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์œผ๋กœ ๋ณด๊ณ  ์•ˆ๋ถ™์€ ๋งค์„œ๋“œ๋Š” ์‹œ์ ์„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„๋กœ ๋ณธ๋‹ค

//**new์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ new Block์„ ํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๊ฑด ๋งž๋Š”๋ฐ //Block class ์•ˆ์— ์ฝ”๋“œ๋ฅผ ์ฒจ๋ถ€ํ„ฐ ์ญ‰์ฝ๊ณ  constructor(){}๊ฐ€ ๋˜๋Š” ์‹œ์ ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด๋‹ค //**new์ƒ์„ฑ์ž๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ  Block๋งŒ ์จ์ฃผ๋ฉด Block class๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ฝ”๋“œ๋ฅผ ์ฒจ๋ถ€ํ„ฐ ์ฝ๋Š”๋ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ์‹œํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— //constructor(){}๋ถ€๋ถ„์€ ์‹คํ–‰ํ•˜์ง€์•Š๋Š”๋‹ค

//๊ทธ๋ž˜์„œ static์ด ๋ถ™์€ ๋งค์„œ๋“œํ˜ธ์ถœ์€ constructor(){}์—์„œ ํ•ด์ค„๊ฒŒ ์•„๋‹ˆ๋ฉด new ํด๋ž˜์Šค๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ  Block ๋งŒ ์จ์ค˜์„œ Block class๋ฅผ //๊ฐ€์ ธ์™€์„œ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ static์ด ์•ˆ๋ถ™์€ ๋งค์„œ๋“œ ํ˜ธ์ถœ์€ this๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„๋งŒ ๊ฐ€๋Šฅํ•ด์„œ ๋ฌด์กฐ๊ฑด new์ƒ์„ฑ์ž๋ฅผ ์จ์ค˜์„œ //constructor(){}๊ฐ€ ์‹คํ–‰๋˜์•ผ ํ•˜๊ณ  ๊ทธ์ดํ›„์—๋งŒ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

//static์ด ๋ถ™์€ ๋งค์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ• ๋•Œ๋Š” constructor(){}์ดํ›„์— ์จ์ค˜๋„ this(์ธ์Šคํ„ด์Šค)๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์œผ๋กœ ๋ณด๊ธฐ๋•Œ๋ฌธ์— //this.getMerkleRoot() ์ด์•„๋‹Œ Block.getMerkleRoot()๋กœ ํ˜ธ์ถœํ•œ๋‹ค(๊ทผ๋ฐ constructor(){}์ดํ›„์—์„œ ํ˜ธ์ถœํ•ด์ค˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€) //static์ด ์•ˆ๋ถ™์€ ๋งค์„œ๋“œ๋Š” this(์ธ์Šคํ„ด์Šค)๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— constructor(){}๊ฐ€ ๋๋‚˜๊ธฐ์ „์—์„œ๋Š” ํ˜ธ์ถœํ•ด์ค„์ˆ˜์—†๊ณ  //๊ทธ์ดํ›„์— ํ˜ธ์ถœ์ด๊ฐ€๋Šฅํ•˜๋‹ค ๊ทธ๋ž˜์„œ ํ˜ธ์ถœํ• ๋•Œ๋„ this.getMerkleRoot() ์œผ๋กœ ํ˜ธ์ถœํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค

//static์ด ๋ถ™๊ฑด ์•ˆ๋ถ™๊ฑด public์ด ๋ถ™์€ ๋งค์„œ๋“œ๋Š” extends ํ•œ class์•ˆ์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ๋ฐ //๊ทธ๋• ๋‘˜๋‹ค this.์œผ๋กœ ์‚ฌ์šฉํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค //๋Œ€์‹  static์ด ๋ถ™์€ ๋งค์„œ๋“œ ํ˜ธ์ถœ์€ this.์œผ๋กœ ํ•ด์ฃผ๋”๋ผ๋„ ์‹œ์ ์ด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ „์ด๋ž€๊ฑธ ๊ธฐ์–ตํ•˜์ž //********************************___******************************** //ํด๋ž˜์Šค์— ํฌํ•จ๋œ ๋งค์„œ๋“œ๋Š” ํด๋ž˜์Šค์— ํฌํ•จ๋œ๊ฑฐ๋ผ exportํ•ด์ฃผ๋Š”๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค๋ฅผ exportํ•ด์ฃผ๋Š” ๊ฑฐ๋‹ค //********************************___******************************** // ๋งˆ์ด๋‹

// ๋งˆ์ด๋‹์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ: // ๋ธ”๋Ÿญ์ด ์ƒ์„ฑ๋˜๋Š” ํ‰๊ท ์‹œ๊ฐ„์„ ๊ตฌํ•ด์•ผ๋จ // ํ‰๊ท ์ ์œผ๋กœ ๋ธ”๋Ÿญ์„ ์ƒ์„ฑํ• ๋•Œ 10๋ถ„ ์ •๋„ ๊ฑธ๋ฆฌ๊ฒŒ ํ•˜๊ณ ์‹ถ๋‹ค // ํ‰๊ท ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ธ”๋Ÿญ๊ฐฏ์ˆ˜๋ฅผ 10๊ฐœ๋กœ ํ•˜๊ฒ ๋‹ค // ๊ทธ๋Ÿผ ๋ธ”๋Ÿญ์„ ๋‹ด์„์ˆ˜์žˆ๋Š”๊ณต๊ฐ„ํ•„์š”

// #์ž‘์—…์ˆœ์„œ ##๋ชฉ์ ์€ ๋งˆ์ด๋‹๊ตฌํ˜„ // ->๋งˆ์ด๋‹์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋‚œ์ด๋„๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋‚œ์ด๋„๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ฒด์ธํ•„์š”

// 1.์ฒด์ธ๊ตฌํ˜„ 2.๋‚œ์ด๋„ ๊ตฌํ˜„ 3.๋งˆ์ด๋‹ ๊ตฌํ˜„

// ํ•ด์‰ฌ๊ฐ’์€ 16์ง„์ˆ˜(09, af)๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค(64๊ธ€์ž) // 16์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด 1๊ฐœ์˜๊ธ€์ž๋ฅผ 4๊ธ€์ž๋กœ ์น˜ํ™˜ํ• ์ˆ˜์žˆ๋‹ค (64*4 ๊ธ€์ž)

// 16์ง„์ˆ˜๋Š” 2์ง„์ˆ˜(0,1)๋ž‘ ์นœ๊ตฌ๋‹ค

// 16์ง„์ˆ˜ 1๊ธ€์ž 4 bit // 16์ง„์ˆ˜ 2๊ธ€์ž 8 bit

// 8bit=1byte=2nible

// ์™œ16์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋Š”๊ฐ€ // ์ž‘์—…์ฆ๋ช…์ค‘ pow๋Š” hash๊ฐ’์„ ํ†ตํ•ด์„œ // ์•ž์—์žˆ๋Š” ์ž๋ฆฟ์ˆ˜0์ด ๋ช‡๊ฐœ๋“ค์–ด๊ฐ”๋Š”๊ฐ€๋ฅผ ์ฐพ๋Š”๊ฑฐ

// difficulty=4 ๋ผ๋ฉด // hash๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ์„๋•Œ // 0์ด ์•ž์— 4๊ฐœ์žˆ๋Š”๊ฑธ ์ฐพ๋Š”๊ฑฐ // 0000

// ์ฒซ๋ฒˆ์จฐ ์ˆœ์„œ๋Š” hash์—์„œ 2์ง„์ˆ˜๋กœ ๋ฐ”๊ฟ€์ค„ ์•Œ์•„์•ผ๋จ //************************************_************************************ //์ž‘์—…์ฆ๋ช…

//difficulty๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๋…ผ์Šค๊ฐ’์„ ์ฐพ๋Š”๊ฒƒ //๋…ผ์Šค๊ฐ’์„ 1๋ถ€ํ„ฐ ๋„ฃ์–ด์„œ difficulty๋กœ์ •ํ•ด์ค€ 0์˜ ๊ฐฏ์ˆ˜์™€ ์ผ์น˜ํ•˜๊ฒŒ๋˜๋ฉด ๋…ผ์Šค๊ฐ’์„ ์ฐพ์€๊ฒƒ์œผ๋กœ ์ฑ„๊ตด(๋งˆ์ด๋‹)์„ฑ๊ณต=๋ธ”๋ก์ƒ์„ฑ //์ฑ„๊ตด(๋งˆ์ด๋‹)์€ ๋ธ”๋ก์ฒด์ธ๋„คํŠธ์›Œํฌ๋ฅผ ์œ ์ง€์‹œํ‚ค๊ธฐ์œ„ํ•ด์‹œํ‚ค๋Š”๋ฐ ์ค‘์š”, ์ฑ„๊ตดํ•œ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ž‘์—…์ฆ๋ช…์˜ ๋Œ€๊ฐ€๋กœ ์ผ์ •ํ•œ ๊ฐœ์ˆ˜์˜ ์•”ํ˜ธํ™”ํ๋ฅผ ์ง€๊ธ‰

//-->ex)16์ง„์ˆ˜๋กœ ๋˜์–ด์žˆ๋Š” ํ•ด์‰ฌ๊ฐ’์„ 2์ง„์ˆ˜๋กœ ๋ฐ”๊ฟจ์„๋–„ ์•ž์ž๋ฆฌ๊ฐ€ 4๊ฐœ๊ฐ€ 0 ์ด์ƒ์ธ ํ•ด์‹œ๊ฐ’์„ ๋งŒ๋“ค์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋…ผ์Šค๊ฐ’์„ ์ฐพ์•„๋ผ //์ฆ‰ ๋…ผ์Šค๊ฐ’์„ ๋ช‡์œผ๋กœ ์„ค์ •ํ•ด์•ผ ์•ž์ž๋ฆฌ 4๊ฐœ๊ฐ€ 0์ธ ๊ฐ’์„ ์ฐพ๋А๋ƒ ํ•˜๋Š”๊ฒƒ

//์ฑ„๊ตด(๋งˆ์ด๋‹)=๋ธ”๋Ÿญ์ƒ์„ฑ //difficulty ๋‚œ์ด๋„๋ฅผ ์ด์šฉํ•ด ๋ธ”๋Ÿญ์ƒ์„ฑ์„ ์‰ฝ๊ฒŒ๋ชปํ•˜๊ฒŒ ํ•˜๋Š”๊ฒŒ ์ž‘์—…์ฆ๋ช…:POW=16์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ฐ”๊นŸ์„๋•Œ ์•ž์— 0์ด ๋ช‡๊ฐœ ๋ถ™์—ˆ๋Š”๊ฐ€ ์ฐพ๋Š”๊ฑฐ //์ž‘์—…์ฆ๋ช…์˜ ๋Œ€๊ฐ€๋กœ ์ผ์ •ํ•œ ๊ฐœ์ˆ˜์˜ ์•”ํ˜ธํ™”ํ๋ฅผ ์ง€๊ธ‰๋ฐ›๋Š” ๊ฒƒ์„ ์ฑ„๊ตด(ๆŽกๆŽ˜) ๋˜๋Š” ๋งˆ์ด๋‹ //********************************___********************************

์ง€๊ฐ‘

  • ๋น„ํŠธ์ฝ”์ธ๊ณผ ๊ฐ™์€ ์•”ํ˜ธํ™”ํ๋ฅผ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์†Œํ”„ํŠธ์›จ์–ด
  • ๊ณต๊ฐœํ‚ค, ๊ฐœ์ธํ‚ค ๊ฐœ์ธํ‚ค(๊ณ„์ขŒ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ) ๊ณต๊ฐœํ‚ค(์€ํ–‰๋“ค์—์„œ ์•”๋ฌต์ ์œผ๋กœ์“ฐ๋Š” ์ฝ”๋“œ๋ถ„๋ฅ˜๋ฒˆํ˜ธ) ์ด ๊ฐœ์ธํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ํŠน์ •์•Œ๊ณ ๋ฆฌ์ฆ˜(ํƒ€์›๊ณก์„  ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฐœํ‚ค๋ผ๋Š” ๊ฑธ ๋งŒ๋“ ๋‹ค ์ƒ์„ฑ๋œ ๊ณต๊ฐœํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์‹œํ•œ๋ฒˆ ํ•ด์‰ฌํ•จ์ˆ˜(=์ž„์˜์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๊ฐ’์„ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฌธ์ž๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• )๋ฅผ ์ด์šฉํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ์ง€๊ฐ‘์ฃผ์†Œ(๋‚ด๊ฐ€๋งŒ๋“  ํŽธ๋ฆฌํ•œ ๊ณ„์ขŒ๋ฒˆํ˜ธ)๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค

๊ฐœ์ธํ‚ค -> (ํƒ€์›๊ณก์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜) -> ๊ณต๊ฐœํ‚ค ->(ํ•ด์‹œ) ->๊ณ„์ •์ฃผ์†Œ(์ง€๊ฐ‘) ->์„œ๋ช… ->๊ฒ€์ฆ

  • ๊ณตํ†ต์ : ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋ฅผ ์กฐํ•ฉํ•œ ์•„์ฃผ ๊ธด ๋‚˜์—ด
  • ์ฐจ์ด์ : ํผ๋ธ”๋ฆญ ํ‚ค๋Š” ๊ณต๊ฐœ๊ฐ€๋Šฅ, ํ”„๋ผ์ด๋น— ํ‚ค๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์ฒ˜๋Ÿผ ์ ˆ๋Œ€ ์œ ์ถœ๋˜๋ฉด ์•ˆ๋จ
  • ์„œ๋ช…
  • ๋‚˜์˜ ์ง€๊ฐ‘์ด ์œ ํšจํ•˜๋Š” ๊ฒƒ์ธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ์šฉ๋„ ์„œ๋ช…์„ ๋งŒ๋“ค๋•Œ ํ•„์š”ํ•œ๊ฐ’์œผ๋กœ๋Š” ๊ฐœ์ธํ‚ค,ํ•ด์‰ฌ๊ฐ’(transaction hash)์ด ์žˆ๋‹ค ๊ฐœ์ธํ‚ค๊ฐ’์— ํ•ด์‰ฌ๊ฐ’์„ ๋„ฃ์–ด์„œ ๋งŒ๋“ ๋‹ค

์ง€๊ฐ‘์€ ํ† ์Šค์™€๋น„์Šท ํ† ์Šค๋Š” ์–ด๋–ค์€ํ–‰์ด๋“  ์—ฐ๊ฒฐ๋˜๋ฉด ์ž”์•ก์„ ๋ณผ์ˆ˜์žˆ์—ˆ๋‹ค ์ง€๊ฐ์€ ๋‚ด๊ฐ€ ์ง€๊ฐ‘์— ๋‚˜์˜ ๊ณ„์ขŒ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ์œผ๋ฉด ์ง€๊ฐ‘์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋‚˜์˜ ์ž”์•ก์„ ๋ณด์—ฌ์ค„์ˆ˜์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฑฐ๋ž˜์— ์žˆ์–ด์„œ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋ˆ„๊ฐ€๋ˆ„๊ตฌ์—๊ฒŒ ์–ผ๋งˆ๋ฅผ ๋ณด๋ƒˆ๋А๋ƒ ๊ทธ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋ ค๋ฉด ์ธ์ฆ์ ˆ์ฐจ๋ฅผ ๊ฑธ์นจ

๋ธ”๋ก์ฒด์ธ๋„ ์ด ๋ณด๋‚ด๋Š”์ด์™€ ๋ฐ›๋Š”์ด๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ์ˆ˜์žˆ์–ด์•ผํ•˜๊ณ  ์–ผ๋งˆ๊ฐ€ ์žˆ๋Š”์ง€์™€ ์ธ์ฆ์ด๋ผ๋Š” ์ ˆ์ฐจ๊ธฐ๋Šฅ๋„ ๋“ค์–ด๊ฐ€์•ผ๋จ

์ง€๊ฐ‘์€ ๋ณด๋‚ด๋Š”์ด์™€ ๋ฐ›๋Š”์ด์˜ ๊ณ„์ขŒ๋ฒˆํ˜ธ๋งŒ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค

์ง€๊ฐ‘์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋žœ๋ค๊ฐ’์œผ๋กœ 0,1์ด ๋œจ๊ฒŒํ•˜๋Š”๊ฑธ 256๋ฒˆํ•˜๋ฉด 256์ˆซ์ž ๊ทธ๋Ÿผ 256bit๋กœ ๋Œ์—ฌ์„œ 32byte๋กœ ๋ฐ”๊นŒ์„œ ๋‚˜์˜ค๋Š” 64์ž๋ฆฌ์˜ ํ•ด์‰ฌ๊ฐ’

๋™์ „์„ 256๋ฒˆ๋˜์ง€๋Š” ๊ฐ’์„ ๊ณ„์ขŒ๋ฒˆํ˜ธ ๋น„๋ฐ€๋ฒˆํ˜ธ=๊ฐœ์ธํ‚ค ๊ฐœ์ธํ‚ค๋ฅผ ๋„ฃ๊ณ  ํ•ด์‰ฌ๋ฅผ ์จ์„œ ๋Œ๋ฆฌ๋ฉด ๊ณต๊ฐœํ‚ค๊ฐ€ ๋œ๋‹ค ๊ณต๊ฐœํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ 2๋ฒˆ์ •๋„์˜ ์•”ํ˜ธํ™”๋ฅผ ์ง„ํ–‰ ๊ทธ๊ฒŒ ๊ณต๊ฐœํ‚ค์˜ ์ฃผ์†Œ/๊ณ„์ •

์ฆ‰ ์ฒ˜์Œ์— ๊ฐœ์ธํ‚ค(=otp๊ฐ™์€๊ฑฐ, ํ˜ผ์ž๋งŒ์•Œ๊ณ ์žˆ์–ด์•ผ๋จ)๋ฅผ ๋งŒ๋“ฌ ๊ฐœ์ธํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณต๊ฐœํ‚ค(์€ํ–‰๋“ค์—์„œ ์•”๋ฌต์ ์œผ๋กœ์“ฐ๋Š” ์ฝ”๋“œ๋ถ„๋ฅ˜๋ฒˆํ˜ธ)๋ฅผ ๋งŒ๋“ฌ ๊ณต๊ฐœํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณ„์ •(๊ณ„์ขŒ๋ฒˆํ˜ธ, ์ฆ‰ ๋‹จ์‚ฌ๋žŒ๋„ ์•Œ์ˆ˜์žˆ์Œ)์„ ๋งŒ๋“ฌ

์ฆ‰ ์ง€๊ฐ‘์€ ๊ฐœ์ธํ‚ค๋ฅผ 16์ง„์ˆ˜ ์ฆ‰ 64์ž๋ฆฌ ์ˆซ์ž๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•˜๋Š” ์‹œ์Šคํ…œ+๊ณต๊ฐœํ‚ค,๊ณ„์ •๋“ฑ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ธํ‚ค์ž์ฒด๋ฅผ ๋„คํŠธ์›Œํฌ์ž์ฒด์— ์‹ค์–ด์„œ์ฃผ๋ฉด์•ˆ๋˜๊ณ  ํ•ด์‰ฌ๋กœ ๋งŒ๋“ค์–ด์„œ ์ค˜์•ผ๋จ ๋‚ด๊ฐ€ ๋‚˜์ž„์„ ์ธ์ฆํ•˜๋Š”๋ฐฉ๋ฒ•์ด ์„œ๋ช… ๊ฐœ์ธํ‚ค๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋งŒ๋“ค์ˆ˜์žˆ๋‹ค ๊ฐœ์ธํ‚ค๋กœ ๊ณต๊ฐœํ‚ค๋ฅผ ๋งŒ๋“ ๋‹ค ๊ณ„์ •์€ ๊ณต๊ฐœํ‚ค์—์„œ ์•ž์ž๋ฆฌ 12๋ฐ”์ดํŠธ๋ฅผ ๋นผ์„œ ๋งŒ๋“œ๋Š”๊ฑฐ๋‹ค

https://brunch.co.kr/@nujabes403/13- ๊ฐœ์ธํ‚ค์— ๊ด€๋ จ๋œ ๋‚ด์šฉ

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ ๊ฑฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ node๋“ค(ํ”„๋กœ์„ธ์Šค)-core, http์„œ๋ฒ„, p2p ํ•˜๋‚˜๋” ๋งŒ๋“ค๊ฒŒ ์›”๋„ท(์ง€๊ฐ‘) ๊ทผ๋ฐ ์ง€๊ฐ‘์€ ๋งŒ๋“œ๋Š”๊ฒŒ ์„ ํƒ์กฐ๊ฑด์ž„ ๊ทธ๋ž˜์„œ ๋น„ํŠธ์ฝ”์ธ์ด๋“  ์ด๋”๋ฆฌ์›€์ด๋“  ์ง€๊ฐ‘์€ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์„œ ๋งŒ๋“ค์–ด์žˆ์Œ

ํŠธ๋žœ์žญ์…˜์— ๋“ค์–ด๊ฐˆ ์†์„ฑ์œผ๋กœ๋Š” input(signature๋ฅผ ๋งŒ๋“ฌ),output(๋ˆ์˜ ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐ)

8bit=1byte=2nible

1nible=4bit 4bit=2์˜4์Šน=16๊ธ€์ž

1byte๋Š” 2๊ธ€์ž๋กœ ํ‘œํ˜„ 16์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„๋•Œ 32byte๋Š” 64๊ธ€์ž

๊ฐœ์ธํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฝ‘์•š์ง„ ๊ฒฐ๊ณผ๋ฌผ์ด ์„œ๋ช… ใ…ก ์„œ๋ช…์„ ๋ธ”๋ก์ฒด์ธ์— ๋˜์ ธ์คŒ ๋ธ”๋ก์ฒด์ธ์€ ๊ทธ์„œ๋ช…์„ ๊ฐ€์ง€๊ณ  +๊ณต๊ฐœํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ๊ฐ’์ด ํŠธ๋ฃจ์ธ์ง€ ํŽ„์Šค์ธ์ง€๋งŒ ๊ตฌ๋ณ„ํ•ด์ฃผ๋ฉด๋œ๋‹ค

///๋„ˆ๊ฐ€๋ณด๋‚ธ ํŠธ๋žœ์žญ์…˜๋งž์•„?

ํŠธ๋žœ์žญ์…˜(์†ก์‹ ์ž, ์ˆ˜์‹ ์‚ฌ, ๋ณด๋‚ผ๊ธˆ์•ก)์ ํž˜ ์ด ํŠธ๋žœ์žญ์…˜์˜ ์ง„์œ„์—ฌ๋ถ€๊ฐ€ ์ค‘์š” =์†ก์‹ ์ž์˜ ๊ฐœ์ธํ‚ค๋กœ ์„œ๋ช…์„ ๋งŒ๋“ค์–ด์•ผํ•˜๊ณ  ๊ทธ ์„œ๋ช…์ด ์†ก์‹ ์ž์˜ ๊ฒƒ์ด ๋งž๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค ๊ทธ๋ฆฌ๊ณ  ์ด ํ˜•ํƒœ์˜ ์‹ธ์ธ์„ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด ํƒ€์›๊ณก์„ ์ด๋‹ค

๋งž๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ๋ชจ๋“ ์‚ฌ๋žŒ๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ ํƒ€์›๊ณก์„ ์œ„์˜ ์–ด๋Аํ•œ์ ์„ ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•œ๋‹ค ์ด์ ์„ ํƒ€์›๊ณก์„ ์˜ ๊ธฐ์ค€์ , G๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค ๊ทธ๋ฆฌ๊ณ  G์˜ ์ขŒํ‘œ๊ฐ€ ๋ฌด์—‡์ด๋ƒ์— ๋”ฐ๋ผ ๋ณ„๋ช…์ด ์žˆ๋‹ค

ํƒ€์›๊ณก์„  ๋ฐฉ์ •์‹์€ y2=x3+ax+b ์ด๋”๋ฆฌ์›€๊ณผ ๋น„ํŠธ์ฝ”์ธ์— ์‚ฌ์šฉ๋˜๋Š” ํƒ€์›๊ณก์„ ์€ a๊ฐ€0 b๊ฐ€ 7์ด๋ฉฐ ๊ธฐ์ค€์  G๊ฐ€ "02 70~~~~98"์ธ ํƒ€์›๊ณก์„ ์„ ๋งํ•œ๋‹ค = y2=x3+7 ์–˜์˜ ๋ณ„๋ช…์€ SECP256K1์ด๋‹ค

์ด์ œ SECP256K1๋ฅผ ๊ฐ€์ง€๊ณ  ์ด ํŠธ๋žœ์žญ์…˜ ๋„ˆ๊ฐ€ ๋ณด๋‚ธ๊ฒƒ ๋งž๋‹ˆ?๋ฅผ ํ• ๊ฒƒ์ด๋‹ค ์„œ๋ช…์„ ๋ณด๋‚ด๋Š”์ชฝ๊ณผ ๋ฐ›์•„์„œ ๊ฒ€์ฆํ•˜๋Š” ์ชฝ์˜ ์Šคํ…์œผ๋กœ ๋‚˜๋ˆ ์„œ ํ•ด์•ผ๋œ๋‹ค

  • ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ์˜ ์ ˆ์ฐจ (์„œ๋ช…์„ ๋งŒ๋“ค์–ด์„œ ํŠธ๋žœ์žญ์…˜๊ณผ ํ•จ๊ผ ๋ณด๋‚ธ๋‹ค)

    1. ํŠธ๋žœ์žญ์…˜์„ ๋งŒ๋“ ๋‹ค
    2. ๊ฐœ์ธํ‚ค(๋‹จ์ˆœํ•œ ์ˆซ์ž)(1~n-1๊นŒ์ง€์˜ ์ •์ˆ˜์—์„œ ๋žœ๋คํ•˜๊ฒŒ ๋ฝ‘์Œ)๋ฅผ ํƒ€์›๊ณก์„ ์ด ์ง€์ •ํ•ด์ฃผ๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ์ •ํ•œ๋‹ค
    3. ์ฒซ๋ฒˆ์งธ์„œ๋ช…r, ๋‘๋ฒˆ์จฐ ์„œ๋ช…s์ฐพ๊ธฐ
    • ๊ฐœ์ธํ‚ค๋ฅผ ๊ณจ๋ž์„๋•Œ์ฒ˜๋Ÿผ 1~n-1๋ฒ”์œ„์˜ ์ •์ˆ˜๋ฅผ ๋žœ๋คํ•˜๊ฒŒ ๊ณ ๋ฅธ๋‹ค
    • ๊ฐœ์ธํ‚ค๋Š” ํ•œ๋ฒˆ๊ณ ๋ฅด๋ฉด ํ‰์ƒ ๊ทธํ‚ค๋งŒ ์“ฐ๋Š”๋ฐ ์ด๊ฐ’์€ ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‚ผ๋•Œ๋งˆ๋‹ค ๋žœ๋คํ•˜๊ฒŒ ์„ ์ •ํ•ด์„œ ๊ณจ๋ผ์•ผ ํ•œ๋‹ค
    • ๋‚ด๊ฐ€ ๊ณ ๋ฅด๋Š”๊ฑด ์•„๋‹ˆ๊ณ  ์ปดํ„ฐ๊ฐ€ ๋žœ๋คํ•˜๊ฒŒ ๋ฝ‘์•„์„œ ๋„ฃ์–ด์ค€๋‹ค
    1. ์ด์ œ ํŠธ๋žœ์žญ์…˜+์„œ๋ช…r๊ณผ ์„œ๋ช…s๋ฅผ ์ „์†กํ•˜๋ฉด ๋œ๋‹ค
  • ๋ฐ›๋Š”์‚ฌ๋žŒ์˜ ์ ˆ์ฐจ

  1. ์ด๊ฑฐ์ง„์งœ ๋„ˆ๊ฐ€ ๋ณด๋‚ธ๊ฑฐ ๋งž์•„๋ฅผ ํ™•์ธ

์ง€๊ฐ‘์ด ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ,๋ฐ›๋Š”์‚ฌ๋žŒ, ๊ธˆ์•ก๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋ฉด ๋ธ”๋ก์ฒด์ธ์€ ํŠธ๋žœ์žญ์…˜์„ ๋งŒ๋“œ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ๊ฑธ๋ฐ›์•„์„œ ๋ธ”๋ก์— ๋„ฃ๋Š” ์—ญํ• ์ž„ ์ฆ‰ ๋ธ”๋ก์ฒด์ธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์ง€ ์•Š๊ณ  ์ง€๊ฐ‘์ด ๋ณด๋‚ด์ฃผ๋ฉด ๊ทธ๊ฑธ ๋ณด๊ด€ํ•˜๊ณ ์žˆ๋‹ค๊ฐ€ ๋ธ”๋Ÿญ์ด ์ƒ์„ฑ๋˜๋ฉด ๊ฑฐ๊ธฐ์— ๋„ฃ์–ด์คŒ

์ง€๊ฐ‘๊ณผ ๋ธ”๋ก์ฒด์ธ์€ ํฌํŠธ๊ฐ€ ๋‹ค๋ฅด๋‹ค ๊ทธ๋ž˜์„œ ์ง€๊ฐ‘์—์„œ ๋ธ”๋ก์ฒด์ธ์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด cors์˜ค๋ฅ˜๊ฐ€ ํ„ฐ์ง„๋‹ค

  • Authorization a[Token]--->a๊ฐ€๋จผ๊ฐ€

@๊ธฐ์ค€์œผ๋กœ ์ž๋ฅด๊ณ  ์•ž์—๊ฑธ ๊ฐ€์ ธ์˜ค๋ฉด Authorization :basic web7722

web7722์ด๊ฑธ ์ธ์ฝ”๋”ฉํ•œ๊ฒŒ ๋‚˜ํƒ€๋‚˜๊ณ  ๋‹ค์‹œ์ด๋Ÿฌ์ผ€๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ํ‹ฐ์ฝ”๋”ฉํ•ด์คŒ๋œ๋‹ค

์˜ค๋Š˜ ์ด๊ฑธ์‹ค์Šตํ• ๊ฑฐ๋‹ค ๊ทผ๋ฐ ํ† ํฐ๋ฐฉ์‹์ด์•„๋‹Œ ์˜›๋‚ ๋ฐฉ์‹์ด๋ผ ๊ตฌ๊ธ€๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์•ˆ๋œ๋‹ค

์ง€๊ฐ‘ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์š”์†Œ

tx- ๋ธ”๋Ÿญ๋“ค์•ˆ์— ์žˆ๋Š” tx์˜ ๋งจ์ฒ˜์Œ๋‚ด์šฉ์€ ์ฑ„๊ตดํ•œ์‚ฌ๋žŒ์˜ ๊ฑฐ๋ž˜๋‚ด์šฉ์ด๊ณ  ๊ทธ์‚ฌ๋žŒํ•œํ…Œ ์ฝ”์ธ์„ ์ฃผ๋Š”๋ฐ ์ฒซ๋ฒˆ์จฐ ๊ฑฐ๋ž˜๋‚ด์šฉ์„ ์ฝ”์ธ๋ฒ ์ด์Šค(๋ชจ๋“ ๋ธ”๋Ÿญ์˜ ์ฒซ๋ฒˆ์จฐ ๊ฑฐ๋ž˜๋‚ด์—ญ)๋ผ๊ณ  ํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ -์ฝ”์ธ๋ฒ ์ด์Šค๋Š” ์ธํ’‹์˜ ๋‚ด์—ญ์€ ์กด์žฌํ•˜์ง€ ์•Š์Œ

tx pool

wallet

*UTXO

์ž…๊ธˆ์ถœ๊ธˆ-transaction(์ž…๊ธˆ์€ input, ์ถœ๊ธˆ์€output) -๊ฑฐ๋ž˜๋‚ด์—ญ์€ ๋‘๊ฐ€์ง€ ์†์„ฑ์ด ์žˆ๋‹ค ๋“ค์–ด์˜ฌ๋ˆ๊ณผ ๋‚˜๊ฐˆ๋ˆ

์ž”์•ก-unspentTransactionOutput(utxo)(๋ฏธ์‚ฌ์šฉํŠธ๋žœ์žญ์…˜)

๋ชจ๋“ ๊ฑฐ๋ž˜๋‚ด์—ญ์„ ๊ฐ€์ง€๊ณ  ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ˆ์˜ ์ด๋™์ด ์žˆ์„๋•Œ๋งˆ๋‹ค ์ž”์•ก์„ ํ‘œ์‹œํ•ด์„œ ์ž”์•ก์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐํ•œ๋‹ค

  1. tx0000

input ------------------ output x ------------------------์ด๋™ํ›ˆ 50btc(์ฝ”์ธ๋ฒ ์ด์Šค)-์ฑ„๊ตด๋กœ ๋ฐ›์€ ์ฝ”์ธ(์‚ฌ์šฉ)

  1. tx0001 (๊ทผ๋ฐ ์ธ๊ตฌํ•œํ…Œ 1btc๋ฅผ ์ฃผ๊ธฐ๋กœํ•จ)

0000:0(50 btc) ---------------์ธ๊ตฌ 1 btc(์‚ฌ์šฉ), ์ด๋™ํ›ˆ 49btc(๋ฏธ์‚ฌ์šฉ) sign

  1. tx0002 (๊ทผ๋ฐ ์ธ๊ตฌ๊ฐ€ ์žฌ์›ํ•œํ…Œ 0.5btc๋ฅผ ์ฃผ๊ธฐ๋กœํ•จ)

txOutId+ txOutIndex ------์ธ๊ตฌ 0.5btc(๋ฏธ์‚ฌ์šฉ), ์žฌ์› 0.5btc(๋ฏธ์‚ฌ์šฉ) (๊ทธ์ „๊ฑฐ๋ž˜๋‚ด๋ ฅ tx0001์ฐธ๊ณ -๋ฐ”๋กœ์ „์€ ์•„๋‹ˆ๊ณ  ๊ทธ๋ƒฅ ์ „์—๊ฑฐ tx:0001:0(1btc))

sign

*๋ฏธ์‚ฌ์šฉ๋งŒ ๋‹ค๋”ํ•˜๋ฉด ์›๋ž˜ 50btc๊ฐ€ ๋‚˜์˜จ๋‹ค ๊ทธ๋ž˜์„œ ๋ฏธ์‚ฌ์šฉํ•ญ๋ชฉ๋งŒ ๋„ฃ์„๊ฒƒ๋„ ๊ตฌํ˜„ํ•ด์•ผ๋œ๋‹ค

์ด๋™ํ›ˆ 49.9 ์ธ๊ตฌ 0.085 ์žฌ์› 0.005 ์ง€ํ˜„ 0.010

๋™ํ›ˆ์ด ๊ฐ๊ฐ 10 ์”ฉ์ฃผ๊ณ  ์žฌ์›๊ณผ ์ง€ํ˜„์ด ์ธ๊ตฌํ•œํ…Œ 2์”ฉ์ฃผ๊ณ  ์ธ๊ตฌ๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ž”์•ก์„ ๋‹ค ๋™ํ›ˆ์—๊ฒŒ ๋„˜๊ธด๋‹ค

tx0004 (49.9) 0003:0 ----------------------๋™ํ›ˆ 19.9, ์•ˆ๊ทœ 0.085, 10 ์žฌ์› 0.005, 10 ์ง€ํ˜„ 0.010, 10

tx0005 (์žฌ์› 10, ์ง€ํ˜„ 10) 0004:1 ------------------------์•ˆ๊ทœ 0.085,10 ,2, 2 ์žฌ์› 0.005,8(๋ฏธ์‚ฌ์šฉ) ์ง€ํ˜„ 0.010,8(๋ฏธ์‚ฌ์šฉ) 0004:2

tx0006 (์•ˆ๊ทœ 0.085,10 ,2, 2) 0005:0 ------------------------์•ˆ๊ทœ 0, ๋™ํ›ˆ 19.9, 0.085, 10 ,2, 2(๋ฏธ์‚ฌ์šฉ)

*๋งˆ์ด๋‹(์ฝ”์ธ๋ฒ ์ด์Šค) ๊ธฐ๋Šฅ๊ตฌํ˜„-ํŠน์ง•์€ ์ธํ’‹์ด์—†๋‹ค

output์ด ๋งŒ๋“ค์–ด์ง๊ณผ๋™์‹œ์— ๊ฑฐ๋ž˜๋‚ด์—ญ(transaction)(input, output๋‚ด์šฉ๊ณผ ๊ทธ๊ฑธํ•ฉ์ณ์„œ ๋งŒ๋“  ํ•ด์‰ฌ)์ด ๋งŒ๋“ค์–ด์ง€๊ณ  utxo(txOutId(๊ฑฐ๋ž˜๋‚ด์—ญ์—์„œ ๋งŒ๋“ค์–ด์ง„ ํ•ด์‰ฌ๊ฐ’),txOutIndex(์ธ๋ฑ์Šค),account(๊ณ„์ •),amount(output๋ˆ))๋„ ๋งŒ๋“ค์–ด์ง„๋‹ค ์ด๋ ‡๊ฒŒ utxo์— ๋ชจ๋“ ์‚ฌ๋žŒ์˜ (๊ณ„์ •, ์ธ๋ฑ์Šค, ๋ˆ)์ •๋ณด๊ฐ€ ์Œ“์ด๊ฒŒ ๋œ๋‹ค ์šฐ๋ฆฌ๋Š” ์ด utxo๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ ๊ฑฐ๋ž˜์˜ input์„ ๋งŒ๋“ ๋‹ค

์˜ˆ๋ฅผ ๋“ค์–ด tx0001๋ฒˆ์จฐ ๊ฑฐ๋ž˜๋‚ด์—ญ์„ ๋งŒ๋“ค๋ ค๊ณ ํ•œ๋‹ค ๊ทธ๋Ÿผ ๋จผ์ € input์„ ๋งŒ๋“ค์–ด์•ผ ๋œ๋‹ค input์„ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด utxo๋ฅผ ํ™•์ธํ•œ๋‹ค a๊ณ„์ •์˜ ์‚ฌ๋žŒ์ด bํ•œํ…Œ 10btc๋ฅผ ๋ณด๋‚ด๋ ค๊ณ  ํ•œ๋‹ค๋ฉด utxo์— ๋‹ด๊ธด a๊ณ„์ •์‚ฌ๋žŒ์— ๋Œ€ํ•œ๊ฑธ ์ซ™๋ชจ์€๋‹ค ๊ฑฐ๊ธฐ์„œ ์šฐ์„  balance(์ดํ•ฉ์‚ฐ์•ก)๋ฅผ ํ™•์ธํ•ด์„œ ๋‚ด๊ฐ€ ๋ณด๋‚ด๋ ค๋Š” ๊ฐ’๋ณด๋‹ค ๋”ํฐ ๊ธˆ์•ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค ๋”์ž‘์€ ๊ธˆ์•ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๋ƒฅ ์ข…๋ฃŒ๋˜๊ณ  ๋”ํฐ ๊ธˆ์•ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด 10btc์ด์ƒ์ด ๋พฅํž๋–„๊นŒ์ง€ ๋Œ๋ ค์„œ input์— ๋„ฃ์–ด์ค€๋‹ค

3, 5, 3 btc ๊ฐ€ ๊ฐ๊ฐ ๋ฝ‘ํ˜“๋‹ค๊ณ  ์น˜๋ฉด ์—ฌ๊ธฐ์—๋Œ€ํ•œ txOutId, txOutIndex๊ฐ’์ด ๋‹ค ๊ฐ๊ฐ ๋‹ค๋ฅผ๊ฒƒ์ด๋‹ค ์ด์ •๋ณด๋“ค์„ ๋ฐฐ์—ด์— ๋‹ด์•„์ฃผ๊ณ  ์„œ๋ช…๋„ ๋„ฃ์–ด์ค€๋‹ค ์ด๋ ‡๊ฒŒ utxo์—์„œ ์‚ฌ์šฉ๋œ์ •๋ณด๋“ค์€ ์‚ฌ์šฉ๊ณผ๋™์‹œ์— ์‚ฌ๋ผ์ง„๋‹ค ๊ทธ๋ฆฌ๊ณ  input๋„ ๋งŒ๋“ค์–ด์ง„๊ฒƒ์ด๋‹ค ๊ทธ๋‹ค์Œ output์— a์˜ account, amount(1btc), b์˜ account, amount(3,5,2btc)์˜ ๋‚ด์šฉ์ด ๋‹ด๊ธฐ๊ณ  output์ด ๋งŒ๋“ค์–ด์ง๊ณผ ๋™์‹œ์— ๋˜ ๊ฑฐ๋ž˜๋‚ด์—ญ์ด ๋งŒ๋“ค์–ด์ง€๊ณ  utxo์— output๋‚ด์šฉ์ด ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค

  • ๋งˆ์ด๋‹๋˜์–ด์•ผ ๊ฑฐ๋ž˜๋‚ด์—ญ์ด ์ƒ๊ธฐ๊ณ  utxo๋„ ์ถ”๊ฐ€๋˜๋Š”๊ฑฐ
  • balance=์ด์•ก(wallet.ts)
  • ๋น„ํŠธ์ฝ”์ธ์€ ํ’€์— ์Œ“๋Š” ํŠธ๋žœ์žญ์…˜์ด 10๋ถ„๋‹จ์œ„ ์ด๋”๋ฆฌ์›€์€ ์ˆซ์ž๋‹จ์œ„

<๋งค์„œ๋“œ ์ •๋ฆฌ>

*๋ฐฐ์—ด ๋งค์„œ๋“œfilter(๊ฑธ๋Ÿฌ๋‚ธ๋‹ค)

์ด ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋Š” element, index, array index์™€ array๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅ ํ•จ์ˆ˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด์—์„œ ์š”์†Œ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„์˜จ ๋‹ค์Œ์— ํ•„ํ„ฐ๋ง ์ฝœ๋ฐฑํ•จ์ˆ˜์— ์ „๋‹ฌํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ€ true์ธ ์š”์†Œ๋“ค๋งŒ ๋ชจ์•„๋†“์€ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋‹จ, ์–ด๋–ค ์š”์†Œ๋„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log( arr.filter((v) => { // return v % 5 === 0; if (v % 5 === 0) { return v; } }), );

/***๋ฐฐ์—ด ๋งค์„œ๋“œ reduce(๋ˆ„์ ํ•œ๋‹ค)

์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ค๊ณ , (์ƒ๋žต๊ฐ€๋Šฅํ•œ) ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ์ฝœ๋ฐฑ์˜ ์ฒซ ํ˜ธ์ถœ์—์„œ accumulator๊ฐ’์œผ๋กœ ์ ์šฉ๋  ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ 2๋ฒˆ์จฐ ์ธ์ž๊ฐ’์„ 0์œผ๋กœ ์ •ํ•ด์ฃผ๋ฉด v=0, k=0๋ฒˆ์จฐ ์ธ๋ฑ์Šค๊ฐ’, 1๋กœ ์ •ํ•ด์ฃผ๋ฉด v=1, k=0๋ฒˆ์จฐ ์ธ๋ฑ์Šค๊ฐ’์ด ๋œ๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ reduce ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด ์š”์†Œ๋“ค์˜ ํ‰๊ท ์„ ๊ตฌํ•  ๋•Œ ๋งŽ์ด ์“ด๋‹ค.

const array1 = [20, 35, 1, 98, 46, 5]; array1.reduce((a, b) => return(a += b)) //a=20, b=35 //๊ฒฐ๊ณผ : 205

(1) a : 20, b : 35 (2) a : 55(20 + 35), b : 1 (3) a : 56(20 + 35 + 1), b : 98 (4) a : 154(20 + 35 + 1 + 98), b : 46 (5) a : 200(20 + 35 + 1 + 98 + 46), b : 5 (6) array1.reduce((a, b) => (a + b)) ์—์„œ return ๋˜๋Š” ๊ฐ’ = a + b = 205 (7) 205 / 6 = 34.166666666666664

---->reduce ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜์ธ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ a๋Š” ๋ˆ„์  ๊ฐ’, b ๋Š” ํ˜„์žฌ ๊ฐ’์ด๋‹ค. reduce ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ return ๋˜๋Š” ๊ฐ’์€ ๋งˆ์ง€๋ง‰ ์ตœ์ข… ๋ˆ„์ ๊ฐ’์ด๋‹ค.

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log( arr.reduce((v, k) => { console.log("v =?", v); console.log("k =?", k); return (v += k); // v = v + k // return k; }, 0), // default option );

***๋ฐฐ์—ด map(๋งตํ•‘, ๋งค์น˜ํ•ด์ค€๋‹ค) ๋งค์„œ๋“œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ธฐ์กด์˜ ๋ฐฐ์—ด์„ ํ™œ์šฉํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š”๋ฐ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ

let arr = [1, 2, 3, 4, 5] console.log( arr.map((v) => { return v * 2 }), )

**๋ฐฐ์—ด join๋งค์„œ๋“œ

arr.join() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ, ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•  ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ„๋‹ค. ์ด ๊ตฌ๋ถ„์ž๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ƒ๋žตํ•˜๋ฉด ๋ฐฐ์—ด์˜ ์›์†Œ๋“ค์˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

์˜ˆ์ œ const arr = ['๋ฐ”๋žŒ', '๋น„', '๋ฌผ'];

console.log(arr.join()); // ๋ฐ”๋žŒ,๋น„,๋ฌผ

console.log(arr.join('')); // ๋ฐ”๋žŒ๋น„๋ฌผ

console.log(arr.join('-')); // ๋ฐ”๋žŒ-๋น„-๋ฌผ

**๋ฐฐ์—ด push๋งค์„œ๋“œ

push()๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด ๋์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค

const arr =[1,2,3]; const arr2 = [8,9,10]; arr.push(4);// single item //arr=1234 arr.push(5,6,7);// multiple items //arr=1234567 arr.push(...arr2);// spread operator //arr=12345678910 //๋ฐฐ์—ด์— ๋‹ด๊ฒจ์žˆ์œผ๋‹ˆ ...์œผ๋กœ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ํ•ด์„œ ๋ฐฐ์—ด์—์„œ ๊บผ๋‚ด์„œ ๋„ฃ์–ด์ค€๋‹ค //12345678910 console.log(arr); //12345678910

// const arr = [1, 2, 3] const arr2 = arr.push(4, 5)
console.log(arr)//[1,2,3,4,5] ---push๋งค์„œ๋“œ๋Š” ๋‹ค๋ฅธ๊ณณ์— ์•ˆ๋‹ด์•„์ค˜๋„ ๋ฐ”๋กœ ๋ฐฐ์—ด์— ์ถ”๊ฐ€๋จ console.log(arr2)//5 -------push๋งค์„œ๋“œ๋Š” ๋‹ค๋ฅธ๊ณณ์— ๋‹ด์•„์ฃผ๊ฒŒ๋˜๋ฉด length๊ฐ’์ด ๋œฌ๋‹ค

**๋ฐฐ์—ด concat๋งค์„œ๋“œ

const myArr = [1, 2, 3];

console.log(myArr.concat(4, 5)); // [1, 2, 3, 4, 5] console.log(myArr.concat('์œก', '์น ')); // [1, 2, 3, '์œก', '์น '] console.log(myArr.concat(true, false)); // [1, 2, 3, true, false] console.log(myArr.concat({name: 'bigtop'})); // [1, 2, 3, {...}]

**concat๊ณผ push์˜ ์ฐจ์ด

-push์— ๋ฐฐ์—ด์„ ํ†ต์จฐ๋กœ ๋„ฃ์Œ const arr = [1, 2, 3] const arr2 = [4, 5]

arr.push(arr2) //[ 1, 2, 3, [ 4, 5 ] ] console.log(arr)

-push์— ๋ฐฐ์—ด์—์„œ ๋ฐ์ดํ„ฐ๋งŒ ๊บผ๋‚ด์„œ ๋„ฃ์Œ const arr3 = [1, 2, 3] const arr4 = [4, 5] arr3.push(...arr4) //[ 1, 2, 3, 4, 5 ] console.log(arr3)

const arr1 = [1, 2, 3] const arr2 = [4, 5] console.log(arr1.concat(arr2)) //[ 1, 2, 3, 4, 5 ]

const arr1 = [1, 2, 3] const arr2 = [4, 5] console.log(arr1.concat(...arr2)) //[ 1, 2, 3, 4, 5 ]

1.push๋Š” ์›๋ž˜์žˆ๋˜ ๋ฐฐ์—ด์— ๋งˆ์ง€๋ง‰ ์š”์†Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ธฐ์กด๋ฐฐ์—ด์„ ๋ณ€ํ˜• concat์€ slice์ฒ˜๋Ÿผ ๊ธฐ์กด๋ฐฐ์—ด์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ถ€๋ถ„๋„ slice์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ์กด์˜ ๋ฐฐ์—ด ์ „์ฒด๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค. ์‚ฌ์‹ค concat๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ์šฉ๋„๋ณด๋‹ค๋Š” ์ฃผ๋กœ ๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด์„ ํ•ฉ์น˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

2.์›๋ณธ ๋ฐฐ์—ด์ด ๋ณ€ํ™˜๋˜๋„ ์ƒ๊ด€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” push() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์›๋ณธ์˜ ๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋Š” concat() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

***๋ฐฐ์—ด find๋งค์„œ๋“œ

const arr = [1, 2, 4, 8, 20, 30]

return console.log(arr.find((v) => v > 10)) //20 //???์™œ30์€ ๋ฐ˜ํ™˜์„ ์•ˆํ• ๊นŒ //find๋ฉ”์†Œ๋“œ๋Š” ์ฃผ์–ด์ง„ ๋งค์„œ๋“œ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ฒซ๋ฒˆ์จฐ ์š”์†Œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค //๋งŒ์•ฝ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด undefinde๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

**string repeat๋งค์„œ๋“œ

๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณตํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

const string = 'abc' const string2 = string.repeat(5)

console.log(string2) //abcabcabcabcabc

//๋˜๋Š” console.log('123'.repeat(10)) //123123123123123123123123123123

*******์›๋ž˜๋ฐฐ์—ด์— ์ถ”๊ฐ€๋งŒํ•ด์ฃผ๋Š” ๋งค์„œ๋“œ๋Š” ์ƒˆ๋กœ ์•ˆ๋‹ด์•„์ค˜๋„ ๋˜์ง€๋งŒ ์ƒˆ๋กœ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋Š”๊ฑด ๋‹ด์•„์ค˜์•ผ ์ ์šฉ์ด ๋œ๋‹ค*********** */

//if๋ฌธ break; //const,let //ํŒŒ๋žŒ์Šค //์ฒซ๋ฒˆ์จฐ ๋งˆ์ด๋‹์€ ๊ฑฐ๋ž˜๋‚ด์—ญ์—†์ด ๋นˆ๋ฐฐ์—ด๋กœ์ง„ํ–‰?

//๊ฑฐ๋ž˜๋‚ด์—ญ์„ ๋ฐ›์•„์„œ ๋งˆ์ด๋‹ํ•˜๋Š” ์ฝ”๋“ ๋А ์–ด๋””์— //์—ฝ๋ฐ์ดํŠธ ํŠธ๋žœ์žญ์…˜

์ฑ„๊ตด๋กœ๋ฒˆ ์ฝ”์ธ์€ utxo์—๋Š” ๋“ค๊ฐ€์ง€๋งŒ ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹ˆ๋ผ ํŠธ๋žœ์žญ์…˜์ด ์•ˆ์ƒ๊ธฐ๊ณ  ํŠธ๋žœ์žญ์…˜ํ’€์—๋„ ๋“ค๊ฐ€์ง€ ์•Š๊ณ  ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์–ด์•ผ ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•˜๊ณ  ํ’€์—๋“ค๊ฐ

**addToChain ๊ณผ์ • ex) a๋…ธ๋“œ ์ฒด์ธ์•ˆ์— ๋ธ”๋Ÿญ์ˆ˜ 2๊ฐœ , b๋…ธ๋“œ ์ฒด์ธ์•ˆ์— ๋ธ”๋Ÿญ์ˆ˜4๊ฐœ a๋…ธ๋“œ๊ฐ€ ๋งˆ์ด๋‹ํ•˜๊ณ  ์ฒด์ด๋‹ํ•จ latestBlock์„ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธํ•จ b๋…ธ๋“œ๊ฐ€ ๋ฐ›์Œ ๊ทผ๋ฐ utxo๋น„๊ตํ–ˆ์„๋–„ b๊ฐ€ ๋” ๋งŽ์Œ ๊ทธ๋Ÿผ ๋ฐ›์€๊ฑฐ ์ถ”๊ฐ€์•ˆํ•˜๊ณ  ์ž๊ธฐ ์ฒด์ธ์„ ๋ณด๋ƒ„ a๋…ธ๋“œ๊ฐ€ ๊ทธ์ฒด์ธ์„ ๋ฐ›์•„์„œ ๊ต์ฒด //์ด๊ฒŒ์•„๋‹ˆ๋ผ ๋ธ”๋Ÿญ์ˆ˜๊ฐ€ 2์ด์ƒ ์ฐจ์ด๊ฐ€ ๋‚ ๋–„๋Š” ํ†ต์จฐ๋กœ ๋‹ค๋ฅธ๋…ธ๋“œ์˜ ์ฒด์ธ์„ ๊ฐ€์ ธ์™€์„œ ๋ฎ์–ด์”Œ์›Œ์ง€๋Š”๊ฑฐ๊ฐ™๋‹ค

ex) a๋…ธ๋“œ ์ฒด์ธ์•ˆ์— ๋ธ”๋Ÿญ์ˆ˜ 2๊ฐœ , b๋…ธ๋“œ ์ฒด์ธ์•ˆ์— ๋ธ”๋Ÿญ์ˆ˜2๊ฐœ a๋…ธ๋“œ๊ฐ€ ๋งˆ์ด๋‹ํ•˜๊ณ  ์ฒด์ด๋‹ํ•จ latestBlock์„ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธํ•จ b๋…ธ๋“œ๊ฐ€ ๋ฐ›์Œ ๋น„๊ตํ–ˆ์„๋•Œ utxo๊ฐ€ a๊ฐ€ ๋” ๋งŽ์œผ๋‹ˆ๊นŒ ๋ฐ›์€ ๋ธ”๋ก์„ ์ฒด์ด๋‹ํ•จ
๋—

**๊ฑฐ๋ž˜๋‚ด์—ญ์ด ์ƒ๊ธฐ๋ฉด ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋œ๋‹ค

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •