๐Ÿ’ป/๋ธ”๋ก์ฒด์ธ

[๋ธ”๋ก์ฒด์ธ] Besu : Quorum Developer Quickstart

ruhz 2021. 7. 27. 17:49
 

Private Network Example - Hyperledger Besu

Last update: April 22, 2021 Quorum Developer Quickstart tutorial The Quorum Developer Quickstart uses the Hyperledger Besu Docker image to run a private IBFT 2.0 network of Besu nodes managed by Docker Compose. Warning This tutorial runs a private network

besu.hyperledger.org

Hyperledger Besu๋Š” Quorum Developer Quickstart๋ผ๋Š” ์ดˆ๋ณด์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•œ๋‹ค. ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด, Hyperledger Besu์˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋นŒ๋“œํ•˜๊ณ , ํ์‡„ํ˜• ๋„คํŠธ์›Œํฌ(private network)์˜ ๊ธฐ๋ฐ˜์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•œ 4๊ฐœ์˜ validator์™€ 1๊ฐœ์˜ non-validator๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋•Œ non-validator๋Š” RPC๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋…ธ๋“œ์ด๋‹ค. ๊ธฐํƒ€ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํฌํ•จํ•ด Docker Compose ํŒŒ์ผ๋„ ์„ธํŒ…์ด ๋˜์–ด์žˆ๋‹ค. 

 

๊ทธ๋ƒฅ '์ด๋Ÿฐ๊ฒŒ ์žˆ๊ตฌ๋‚˜'ํ•˜๊ณ  ๋„˜์–ด๊ฐ€์„œ๋Š” ์•ˆ๋œ๋‹ค! ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์€ ํ์‡„ํ˜•(private) ๋ธ”๋ก์ฒด์ธ์„ ์–ด๋– ํ•œ ๊ณผ์ •์„ ํ†ตํ•ด์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

 

1. docker-compose.yml

Prerequisites๋ฅผ ๋ชจ๋‘ ์„ค์น˜ํ•˜๊ณ  run์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด, ์ง€์ •ํ•œ ํด๋”์— ์œ„์™€ ๊ฐ™์ด ์„ค์น˜๊ฐ€ ๋œ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ๋ณผ ๊ฒƒ์€ 'docker-compose.yml'์ด๋‹ค. ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด Quorum Developer Quickstart๋Š” Hyperledger Besu์™€ ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋นŒ๋“œํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์˜ต์…˜๋“ค์„ ๋ชจ๋‘ ์„ค์ •ํ•˜์—ฌ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด '๋„์ปค ์ปดํฌ์ฆˆ(Docker Compose)'์ด๋‹ค. ๊ทธ๋ง์€ ์ฆ‰, ์–ด๋–ค ์˜ต์…˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์‹คํ–‰์‹œ์ผฐ๋Š”์ง€ ๋„์ปค ์ปดํฌ์ฆˆ๋ฅผ ๋ณด๋ฉด ๋ชจ๋‘ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

vi ์—๋””ํ„ฐ๋กœ docker-compose.yml์„ ์—ด์–ด๋ณด๋ฉด ๊ฐ€์žฅ ์ฒซ์ค„์—๋Š” yml ํŒŒ์ผ ํฌ๋งท์˜ ๋ฒ„์ „์ด ์ ํ˜€์žˆ๋‹ค. ๊ทธ ์•„๋ž˜๋กœ x-besu-๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๊ฒƒ ์ €๊ฒƒ ๋ณด์ด์ง€๋งŒ, Page Down์„ ๋ˆŒ๋Ÿฌ "services: "๊ฐ€ ์ ํžŒ ๊ณณ์„ ์ฐพ์•„ ๋จผ์ € ๋ณด์ž. ์—ฌ๊ธฐ์„œ service๋Š” Docker์— ์˜ฌ๋ฆด ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

 

Quorum Developer Quickstart๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ด 4๊ฐœ์˜ validator์™€ 1๊ฐœ์˜ non-validator๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. environment์—์„œ๋Š” ์„œ๋น„์Šค์˜ ์ด๋ฆ„๊ณผ Hyperledger Besu์˜ ๋ฒ„์ „์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ ๋„์ปค๋กœ runํ•  ๋•Œ, ์˜ต์…˜์œผ๋กœ ๋„ฃ์€ ๊ฐ’์ธ 'latest'๊ฐ€  service.version์˜ ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ volumes ํ•ญ๋ชฉ๋“ค์„ ๋ณด๋‹ˆ "์›๋ž˜ ๋กœ์ปฌ๋กœ ๊น”๋ ค์žˆ์—ˆ๋‹ค๋ฉด (':'๊ธฐ์ค€์œผ๋กœ) ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ฃผ์†Œ์—์„œ ์ฐพ์•„์•ผ ํ•  ๊ฒƒ๋“ค์€ ์™ผ์ชฝ ์ฃผ์†Œ์— ์žˆ๋‹ค"๋ผ๊ณ  ์ด์•ผ๊ธฐํ•˜๋Š” ๋“ฏํ•˜๋‹ค.

 

volumes์˜ ํ•ญ๋ชฉ๋“ค์„ ๋ณด๋‹ˆ ์•„๋ž˜ ํ•ญ๋ชฉ๋“ค์„ ์ฐธ์กฐํ•˜๋Š” ๋“ฏํ•˜๋‹ค. config, genesis ๋“ฑ์˜ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ ๊ตฌ์„ฑ ํŒŒ์ผ(configuration fille, ํ”„๋กœ๊ทธ๋žจ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ผ)์ธ ๋“ฏํ•˜๋‹ค. ์•„๋ž˜ ํŒŒ์ผ๋“ค์€ ์กฐ๊ธˆ ์ด๋”ฐ๊ฐ€ ์ฐฌ์ฐฌํžˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

  • config.toml
  • permissions_config.toml
  • static-nodes.json
  • log-config.xml
  • log-config.splunk.xml
  • genesis.json

volume ๋‹ค์Œ์— network์—๋Š” ipv4_address์— ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์— ํ• ๋‹น ๋  IP ์ฃผ์†Œ๊ฐ€ 172.16.239.11์žˆ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋ณด๋‹ˆ ๋„์ปค์—์„œ๋Š” ์–ด๋–ป๊ฒŒ IP๊ฐ€ ํ• ๋‹น ๋˜๊ณ , ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฑด์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

 

๋„์ปค์˜ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์ƒ ์ด๋”๋„ท ์–ด๋Œ‘ํ„ฐ(veth, virtual ethernet๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋งŒ์•ฝ ๋‚˜์™€ ๊ฐ™์€ ์˜ต์…˜์„ ์„ ํƒํ–ˆ๋‹ค๋ฉด, docker ps -a๋กœ ๋ดค์„ ๋•Œ, ์ด 15๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด veth๋“ค์ด docker0์— ๋ฐ”๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, docker-compose๋กœ ๋ฌถ์—ฌ ์žˆ์–ด์„œ์ธ์ง€(ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค) bridge๋ฅผ ํ•˜๋‚˜ ๋” ๊ฑฐ์น˜๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค. 

 

์•„๋ฌดํŠผ docker-compose.yml ์—์„œ ํ•ด๋‹น ์„œ๋น„์Šค(์ปจํ…Œ์ด๋„ˆ)์— ์–ด๋–ค IP๋ฅผ ์ค„์ง€ ์ •์˜ํ•˜๊ณ  ์žˆ๊ณ , Validator1์— ์‹ค์ œ ํ• ๋‹น ๋˜์—ˆ๋Š”์ง€๋Š” docker inspect [Validator1์˜ ์ปจํ…Œ์ด๋„ˆ ID]๋ฅผ ์ž…๋ ฅํ•ด "NetworkSettings" ๊ฐ’์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค. ๊ฒฐ๊ตญ, docker-compose.yml ํŒŒ์ผ์€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์„ ์„ค์ •ํ•ด ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํŒŒ์ผ์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ์ค‘์—์„œ ์–ด๋–ค ์„ค์ •๋“ค์€ ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ ๋”ฐ๋กœ ์ •์˜๋˜์–ด์žˆ์—ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ณด๋„๋ก ํ•˜์ž.

 

 

2. configuration files

๋จผ์ € /config/besu/config.toml์˜ ํ•ญ๋ชฉ๋“ค์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ๋‹ค.

ํ•ญ ๋ชฉ ์„ค ๋ช…
rpc rpc ๊ธฐ๋Šฅ์— ๊ด€ํ•œ ์„ค์ • ์ดˆ๊ฐ€๊ฐ’
ws ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ
graphql graphql(API ๊ด€๋ฆฌ) ์„ค์ • ์ดˆ๊ธฐ๊ฐ’
metrics ๋ชจ๋‹ˆํ„ฐ๋ง ๋ชฉ์ ์˜ ํ†ต๊ณ„ ์ˆ˜์ง‘ ์„ค์ • ์ดˆ๊ธฐ๊ฐ’
permission private network์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋„คํŠธ์›Œํฌ ๊ฐ€์ž… ํ—ˆ์šฉ ๋Œ€์ƒ ์ •์˜
bootnodes ์–ด๋–ค ๋…ธ๋“œ๊ฐ€ ๋ถ€ํŠธ๋…ธ๋“œ์ธ์ง€ enode url๋กœ ์„ค์ •
static nodes ๋™์ ์œผ๋กœ ์ƒˆ๋กœ ๊ฐ€์ž…ํ•˜์ง€ ์•Š์€ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋…ธ๋“œ

bootnode, enode url ๋“ฑ์˜ ๋‹จ์–ด๊ฐ€ ๋‚ฏ์„ค์—ˆ๋‹ค. 

๋จผ์ € bootnode๋Š” ๊ฐ„๋‹จํžˆ ์ด์•ผ๊ธฐํ•˜๋ฉด ํŠน์ • ์ด๋”๋ฆฌ์›€ ๋„คํŠธ์›์— ์ฐธ์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๋“ค์„ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ๊ทธ๋ฆผ์˜ node4๊ฐ€ bootnode์— ๋ถ™์œผ๋ฉด bootnode๋Š” ํ˜„์žฌ ๋ถ™์–ด ์žˆ๋Š” ๋…ธ๋“œ ์ •๋ณด(node1...node3)๋ฅผ node4์— ์•Œ๋ ค ์ค€๋‹ค. node4๋Š” ์ด ์ •๋ณด์— ๋ฐ”ํƒ•ํ•ด์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค๊ณผ ํ†ต์‹ ํ•˜๋ฉฐ p2p ๋ง์„ ์ด๋ฃฌ๋‹ค. ๊ทธ๋ฆฌ๊ณ  node4๋Š” ์ˆ˜์‹œ๋กœ bootnode์— ๋ถ™์–ด ์ด ์ •๋ณด๋ฅผ ๊ฐฑ์‹  ๋ฐ›๋Š”๋‹ค.

http://blockchaindev.kr/models/content/92

๊ทธ๋ฆฌ๊ณ  ์ด bootnode๋ฅผ configure.toml์—์„œ๋Š” "enode://..."๋กœ ์‹œ์ž‘ํ•˜๋Š” url ์ฃผ์†Œ๋กœ ์•Œ๋ ธ๋‹ค. ์ด๊ฒƒ์€ ์ด๋”๋ฆฌ์›€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ํ•˜๋‚˜์˜ ์ฒด๊ณ„์ธ๋ฐ, "enode://[๊ณต๊ฐœํ‚ค]@[๋…ธ๋“œ์˜ IP]:[๋“ฃ๊ณ ์žˆ๋Š” ํฌํŠธ]"์˜ ํ˜•์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. docker inspect๋กœ IP ์ฃผ์†Œ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ณ , docker ps -a๋กœ ์—ด๋ ค ๋“ฃ๊ณ  ์žˆ๋Š” ํฌํŠธ ๋ฒˆํ˜ธ๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ํ‘œ์—์„œ permission ํ•ญ๋ชฉ์€, permission_config.toml๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ vi ์—๋””ํ„ฐ๋กœ ์—ด์–ด๋ณด๋ฉด ํ˜„์žฌ ์˜ฌ๋ ค์ ธ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋„ enode url ํ˜•ํƒœ๋กœ ์ ํ˜€์žˆ์„ ๊ฒƒ์ด๋‹ค.

https://eth.wiki/fundamentals/enode-url-format

 

enode url์— ๊ณต๊ฐœํ‚ค๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋‚˜์˜จ๋‹ค. ํ•™๋ถ€ ์ˆ˜์—… ๋•Œ ์ž ๊น ๋“ค์—ˆ๋˜ ๊ธฐ์–ต์€ ๋‚˜์ง€๋งŒ, ์ž์„ธํžˆ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์„ ๋ฟ๋”๋Ÿฌ ์ด๊ฒŒ ์™œ ํ•„์š”ํ•œ์ง€ ์ฐพ์•„๋ดค๋‹ค. ์„ค๋ช…์ด ๋„ˆ๋ฌด ์ž˜ ๋˜์–ด ์žˆ์–ด, ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค. ๋‚˜๋จธ์ง€ ๋ชฉ๋ก์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๋„ ํ•˜๋‚˜ํ•˜๋‚˜ ์—ด์–ด๋ณด๋ฉด์„œ ์–ด๋–ค ๊ฐ’๋“ค์ด ์ ํ˜€์žˆ๋Š”์ง€ ์ฐพ์•„๋ดค๋‹ค.

 

[Mastering Ethereum] 3์žฅ ํ‚ค์™€ ์ฃผ์†Œ — Steemit

์•ˆ๋…•ํ•˜์„ธ์š”. ๊ฐœ๋ฐœ์ž ๋ชจ๋„๋ฆฌ์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋Š” ์Šคํ„ฐ๋””์—์„œ Mastering Ethereum ๋ฅผ ๊ต์žฌ๋กœ ํ•˜์—ฌ ๋งค์ฃผ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ์— ์ œ๊ฐ€ ๋งก์€ ๋ถ€๋ถ„์„ ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. TIP ์ด๋”๋ฆฌ

steemit.com

 

 

3. genesis.json

์ž ๊ทธ๋Ÿผ ์—ฌ๊ธฐ๊นŒ์ง€ ์ˆœ์„œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. docker-compose.yml ์„ ๋ณด๋ฉฐ, ๋„์ปค ์ปดํฌ์ฆˆ๊ฐ€ ์˜ต์…˜์— ๋งž๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๋จผ์ € bootnode์ธ validator1์ด ๋จผ์ € ์˜ฌ๋ผ์˜จ๋‹ค. ๊ทธ ๋‹ค์Œ์€? ์ตœ์ดˆ์˜ ๋ธ”๋ก์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ ์ œ๋„ค์‹œ์Šค ๋ธ”๋Ÿญ(Genesis block)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด ๊ณณ์—๋Š” ๋‹ค์–‘ํ•œ ์‹ค์ œ ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ์˜ ์„ค์ •๊ฐ’์ด ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‚ด์šฉ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด genesis.json์ด๋‹ค. ์ผ๋‹จ ์—ด์–ด๋ณด์ž.

/config/besu/

cliqueGenesis.json, ibft2Genesis.json ๊ฐ™๋‹ค. ์ด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” genesis.json์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ, ์•„๊นŒ docker-compose.yml์˜ volume์—์„œ ํŒŒ์ผ์„ ๋งค์นญ ์‹œ์ผœ์คฌ์—ˆ๋˜ ๊ฒƒ์ด ๊ธฐ์–ต๋‚œ๋‹ค.

๋‚ด๊ฐ€ ์ง์ ‘ ์„ค์ •ํ•œ ์ ์€ ์—†์ง€๋งŒ, default๋กœ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ibft2๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•œ ๋“ฏํ•˜๋‹ค. ๋‹ค์‹œ ๋ณด๋‹ˆ Besu์˜ Quorum Developer Quickstart ๋งํฌ ๊ฐ€์žฅ ์ดˆ์žฅ์— IBFT 2.0 ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ๋‚˜์™€์žˆ๋‹ค. ์œ„ ์‚ฌ์ง„์˜ ๋…ธ๋ž€ ๋„ค๋ชจ๋ฅผ ๋ณด๋ฉด, ์˜ค๋ฅธ์ชฝ ๊ฒฝ๋กœ genesis.json์€ ibft2Genesis.json์— ๋Œ€์‘์‹œ์ผœ๋†จ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. Clique๋‚˜ IBFT 2.0์€ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ผ์ข…์ธ๋ฐ, ์ข€ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€๋ฅผ ํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. 

์•„๋ฌดํŠผ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋˜ genesis.json์€ ibft2Genesis.json์ด๋‹ค! ์ตœ์ดˆ์˜ ๋ธ”๋ก์—๋Š” ์–ด๋–ค ๋‚ด์šฉ๋“ค์ด ์ ํ˜€ ์žˆ๋Š”์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ๋œฏ์–ด๋ณด์ž. ์‚ฌ์ง„ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ฐ ์†์„ฑ ๊ฐ’๋“ค์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ฐพ์•„๋ดค๋‹ค. 

 

Explaining the Genesis Block in Ethereum

Every blockchain has to start somewhere, so there’s what’s called a genesis block at the beginning. This is the first block, and in it the creators of Ethereum were at liberty to say “To start, the following accounts all have X units of my cryptocurr

arvanaghi.com

 

config: chainID

๋‚ด๊ฐ€ ์–ด๋Š ์ฒด์ธ์— ์˜ฌ๋ผ์™€ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค. ์ด๋”๋ฆฌ์›€ ๋ฉ”์ธ๋„ท์˜ chainID๋Š” 1์ด๋‹ค. ์—ฌ๊ธฐ๋Š” 1337๋กœ ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๊ฑด private chain์˜ default ์ฒด์ธ ID๋ผ๊ณ  ํ•œ๋‹ค. (1-Ethereum mainnet, 2-Morden, 3-Ropsten, 4-Rinkeby, 5-Goerli, 42-Kovan, 1337-Private(default))

 

alloc

๋„คํŠธ์›Œํฌ์— ๋“ค์–ด์™”์„ ๋•Œ, ์–ด๋–ค ์‚ฌ๋žŒ์˜ ์ง€๊ฐ‘์— ์–ผ๋งŒํผ์˜ ๋ˆ์„ ์ฑ„์›Œ๋‘˜์ง€๋ฅผ ์ •ํ•œ๋‹ค. ์‚ฌ๋žŒ๋“ค์˜ ์ฃผ์†Œ์™€ ์ฑ„์›Œ์ค„ ๊ธˆ์•ก์ด ์ ํ˜€์žˆ๋‹ค. ์˜ˆ์ œ์—์„œ๋Š” private key๋ฅผ ๊ฐ™์ด ๋„ฃ์–ด์คฌ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ํ•ด๋‹น ์ฃผ์†Œ๋“ค์€ /config/networkFiles ๋””๋ ‰ํ† ๋ฆฌ์— member1, member2, member3 ํด๋”์— key๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์‚ฌ์‹ค ์—ฌ๊ธฐ์„œ "validator๊ฐ€ ๋„คํŠธ์›Œํฌ์˜ member ์•„๋‹ˆ์—ˆ๋‚˜?" ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.  ๊ทธ๋ž˜์„œ ์ด๊ฒƒ ์ €๊ฒƒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€, npx quorum-dev-quickstart ์ฒ˜์Œ ์‹คํ–‰ ์‹œ,private transaction ์˜ต์…˜์„ y๋กœ ํ•ด๋ดค๋”๋‹ˆ ์ปจํ…Œ์ด๋„ˆ๋กœ member๋“ค์ด ๋– ์žˆ์Œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค....!

์•„๋ฌดํŠผ ์—ฌ๊ธฐ์„œ๋Š” ๋„คํŠธ์›Œํฌ ์‹œ์ž‘ ์ „ alloc์œผ๋กœ member1, member2, member3์—๊ฒŒ ์ด๋”๋ฆฌ์›€์„ ๋ฏธ๋ฆฌ ๋ชฝ๋•… ์ฅ์–ด์ฃผ๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

difficulty

์ฑ„๊ตด์˜ ์–ด๋ ค์šด ์ •๋„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฑ„๊ตด, ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ด€๋ จํ•ด์„œ๋Š” ๋”ฐ๋กœ ๊ณต๋ถ€ํ•ด์„œ ํฌ์ŠคํŒ…์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค. ๊ฐ‘์ž๊ธฐ ์ฑ„๊ตด ๋ฟ ์•„๋‹ˆ๋ผ ๋ธ”๋Ÿญ, ๋ฐ์ดํ„ฐ, ๋ถ„๊ธฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋…์ด ํ—ท๊ฐˆ๋ ค์„œ ๋ช‡๋ช‡ ์ž๋ฃŒ๋“ค์„ ์ฐพ์•„๋ดค๋‹ค.

 

๋ธ”๋ก์ฒด์ธ์˜ ์ •์˜์™€ ๊ธฐ์ˆ  “๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•˜๋Š” ๊ธฐ๋ณธ์  ์ดํ•ด”

์•ˆ๋…•ํ•˜์„ธ์š” ๋ธ”๋ก์ฒด์ธ ์•Œ๋ ค์ฃผ๋Š” ๋‚จ์ž Ryan KIM ์ž…๋‹ˆ๋‹ค.

medium.com

 

๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๋น„ํŠธ์ฝ”์ธ ์ฑ„๊ตด ๋ฐฉ๋ฒ• (ft ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ, ๋…ธ๋งˆ๋“œ์ฝ”๋”)

https://youtu.be/ElGBP90XZWE ์ธํŠธ๋กœ ๋น„ํŠธ์ฝ”์ธ ๊ฐ€๊ฒฉ ์ƒ์Šน ์ž‘์—… ์ฆ๋ช… / ์ฑ„๊ตด / ์™œ ์ฑ„๊ตด์— ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๊ฐ€ ์“ฐ์ด๋Š”์ง€ ์•Œ์•„๋ด„ ๋ธ”๋ก์ฒด์ธ์€ ๋ฌด์—‡์ธ๊ฐ€? ๋ธ”๋ก์ฒด์ธ = ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๋ฐ์ดํ„ฐ๋Š” ๋ธ”๋ก + ํ•ด์‹œ๋กœ ์—ฐ๊ฒฐ ๋ˆ„

dfso2222.tistory.com

 

 

mixhash, nonce

mix hash์™€ nonce๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋ก์ด ์ œ๋Œ€๋กœ ์ฑ„๊ตด๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ๊ฑฐ์ง“ nonce๋กœ ๋ธ”๋ก์„ ์œ„์กฐํ•  ๊ฒฝ์šฐ, nonce๊ฐ€ ๊ฑฐ์ง“์ž„์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. mixhash๋Š” nonce๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š๋Š” nonce๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ค‘๊ฐ„ ๊ณ„์‚ฐ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ธ”๋ก์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ๋•Œ ์ž˜๋ชป๋œ ํ˜ผํ•ฉ ํ•ด์‹œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒฝ์šฐ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ์— ๋ธ”๋ก์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค..

 

parentHash

์ด์ „ ๋ธ”๋ก ํ—ค๋”์˜ ํ•ด์‹œ. ์‚ฌ์‹ค ์ œ๋„ค์‹œ์Šค ๋ธ”๋ก์—์„œ๋Š” ํ•ด๋‹น ํ•ญ๋ชฉ์„ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒ ์ง€๋งŒ, ์ œ๋„ค์‹œ์Šค ๋ธ”๋ก์€ ๋‹ค๋ฅธ ๋ธ”๋ก๋“ค์—๊ฒŒ ์•ž์œผ๋กœ ์ด์–ด์งˆ ๋„คํŠธ์›Œํฌ์˜ ๋ธ”๋ก์ด ์–ด๋–ค ํ˜•์‹์ด์–ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ค˜์•ผํ•˜๊ธฐ ๋–„๋ฌธ์—, ๋น„์›Œ๋‘์ง€ ์•Š๊ณ  ์ ์ ˆํžˆ ์ฑ„์›Œ๋‘”๋‹ค.

 

coinbase

ํ•ด๋‹น ๋ธ”๋ก์„ ์ฑ„๊ตดํ–ˆ์„ ๋•Œ, ๋ณด์ƒ์ด ๋“ค์–ด๊ฐˆ ๊ณณ์˜ ๊ณณ์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

Timestamp

์œ ๋‹‰์Šค ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด, ๋ธ”๋ก์ด ์ƒ์„ฑ๋œ ์‹œ๊ฐ„์„ ๊ธฐ๋ก