**npm run dev:ts index.ts npm run dev:ts ./wallet/server.ts
๋ฐํ์์ด ์๋ค==์คํํ ์์๋ ํ๊ฒฝ, ์คํ์์ผ์ค์์๋ ์คํ๊ธฐ 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์ด๋ค.
{
"extends": ["plugin:prettier/reccommend"]
}{
"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~n-1๊น์ง์ ์ ์์์ ๋๋คํ๊ฒ ๋ฝ์)๋ฅผ ํ์๊ณก์ ์ด ์ง์ ํด์ฃผ๋ ๋ฒ์ ๋ด์์ ์ ํ๋ค
- ์ฒซ๋ฒ์งธ์๋ช r, ๋๋ฒ์จฐ ์๋ช s์ฐพ๊ธฐ
- ๊ฐ์ธํค๋ฅผ ๊ณจ๋์๋์ฒ๋ผ 1~n-1๋ฒ์์ ์ ์๋ฅผ ๋๋คํ๊ฒ ๊ณ ๋ฅธ๋ค
- ๊ฐ์ธํค๋ ํ๋ฒ๊ณ ๋ฅด๋ฉด ํ์ ๊ทธํค๋ง ์ฐ๋๋ฐ ์ด๊ฐ์ ํธ๋์ญ์ ์ ๋ณด๋ผ๋๋ง๋ค ๋๋คํ๊ฒ ์ ์ ํด์ ๊ณจ๋ผ์ผ ํ๋ค
- ๋ด๊ฐ ๊ณ ๋ฅด๋๊ฑด ์๋๊ณ ์ปดํฐ๊ฐ ๋๋คํ๊ฒ ๋ฝ์์ ๋ฃ์ด์ค๋ค
- ์ด์ ํธ๋์ญ์ +์๋ช r๊ณผ ์๋ช s๋ฅผ ์ ์กํ๋ฉด ๋๋ค
-
๋ฐ๋์ฌ๋์ ์ ์ฐจ
- ์ด๊ฑฐ์ง์ง ๋๊ฐ ๋ณด๋ธ๊ฑฐ ๋ง์๋ฅผ ํ์ธ
์ง๊ฐ์ด ๋ณด๋ด๋ ์ฌ๋,๋ฐ๋์ฌ๋, ๊ธ์ก๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋ฉด ๋ธ๋ก์ฒด์ธ์ ํธ๋์ญ์ ์ ๋ง๋๋๊ฒ ์๋๋ผ ๊ทธ๊ฑธ๋ฐ์์ ๋ธ๋ก์ ๋ฃ๋ ์ญํ ์ ์ฆ ๋ธ๋ก์ฒด์ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ณ ์ง๊ฐ์ด ๋ณด๋ด์ฃผ๋ฉด ๊ทธ๊ฑธ ๋ณด๊ดํ๊ณ ์๋ค๊ฐ ๋ธ๋ญ์ด ์์ฑ๋๋ฉด ๊ฑฐ๊ธฐ์ ๋ฃ์ด์ค
์ง๊ฐ๊ณผ ๋ธ๋ก์ฒด์ธ์ ํฌํธ๊ฐ ๋ค๋ฅด๋ค ๊ทธ๋์ ์ง๊ฐ์์ ๋ธ๋ก์ฒด์ธ์ ์์ฒญ์ ๋ณด๋ด๋ฉด cors์ค๋ฅ๊ฐ ํฐ์ง๋ค
- Authorization a[Token]--->a๊ฐ๋จผ๊ฐ
@๊ธฐ์ค์ผ๋ก ์๋ฅด๊ณ ์์๊ฑธ ๊ฐ์ ธ์ค๋ฉด Authorization :basic web7722
web7722์ด๊ฑธ ์ธ์ฝ๋ฉํ๊ฒ ๋ํ๋๊ณ ๋ค์์ด๋ฌ์ผ๋ํ๋ด๋ ค๋ฉด ํฐ์ฝ๋ฉํด์ค๋๋ค
์ค๋ ์ด๊ฑธ์ค์ตํ ๊ฑฐ๋ค ๊ทผ๋ฐ ํ ํฐ๋ฐฉ์์ด์๋ ์๋ ๋ฐฉ์์ด๋ผ ๊ตฌ๊ธ๋ธ๋ผ์ฐ์ ์์๋ ์๋๋ค
์ง๊ฐ ๊ตฌํํ๋๋ฐ ํ์ํ ์์
tx- ๋ธ๋ญ๋ค์์ ์๋ tx์ ๋งจ์ฒ์๋ด์ฉ์ ์ฑ๊ตดํ์ฌ๋์ ๊ฑฐ๋๋ด์ฉ์ด๊ณ ๊ทธ์ฌ๋ํํ ์ฝ์ธ์ ์ฃผ๋๋ฐ ์ฒซ๋ฒ์จฐ ๊ฑฐ๋๋ด์ฉ์ ์ฝ์ธ๋ฒ ์ด์ค(๋ชจ๋ ๋ธ๋ญ์ ์ฒซ๋ฒ์จฐ ๊ฑฐ๋๋ด์ญ)๋ผ๊ณ ํ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ตฌํ -์ฝ์ธ๋ฒ ์ด์ค๋ ์ธํ์ ๋ด์ญ์ ์กด์ฌํ์ง ์์
tx pool
wallet
*UTXO
์ ๊ธ์ถ๊ธ-transaction(์ ๊ธ์ input, ์ถ๊ธ์output) -๊ฑฐ๋๋ด์ญ์ ๋๊ฐ์ง ์์ฑ์ด ์๋ค ๋ค์ด์ฌ๋๊ณผ ๋๊ฐ๋
์์ก-unspentTransactionOutput(utxo)(๋ฏธ์ฌ์ฉํธ๋์ญ์ )
๋ชจ๋ ๊ฑฐ๋๋ด์ญ์ ๊ฐ์ง๊ณ ํ๋๊ฒ ์๋๋ผ ๋์ ์ด๋์ด ์์๋๋ง๋ค ์์ก์ ํ์ํด์ ์์ก์ ๊ฐ์ง๊ณ ๊ณ์ฐํ๋ค
- tx0000
input ------------------ output x ------------------------์ด๋ํ 50btc(์ฝ์ธ๋ฒ ์ด์ค)-์ฑ๊ตด๋ก ๋ฐ์ ์ฝ์ธ(์ฌ์ฉ)
- tx0001 (๊ทผ๋ฐ ์ธ๊ตฌํํ 1btc๋ฅผ ์ฃผ๊ธฐ๋กํจ)
0000:0(50 btc) ---------------์ธ๊ตฌ 1 btc(์ฌ์ฉ), ์ด๋ํ 49btc(๋ฏธ์ฌ์ฉ) sign
- 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๊ฐ ๋ ๋ง์ผ๋๊น ๋ฐ์ ๋ธ๋ก์ ์ฒด์ด๋ํจ
๋
**๊ฑฐ๋๋ด์ญ์ด ์๊ธฐ๋ฉด ๋ธ๋ก๋์บ์คํธ๋๋ค