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

[Besu] ๋…ผ๋ฌธ์š”์•ฝ : Permissioned Blockchains : A Comparative Study (2)

ruhz 2021. 12. 9. 18:01

Hyperledger Besu์˜ ์•„ํ‚คํ…์ณ

์ด ์ „์—, Besu๋Š” ์ด๋”๋ฆฌ์›€ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•œ ์ด๋”๋ฆฌ์›€ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ์ด์•ผ๊ธฐํ–ˆ์—ˆ๋‹ค. ์ด ์œ„์— Besu๋Š” EEA์˜ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์ด๋”๋ฆฌ์›€์— ํ”„๋ผ์ด๋น— ํŠธ๋žœ์žญ์…˜, ํ—ˆ๊ฐ€์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๊ฐ€๋กœ ํ™•์žฅํ–ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Besu์˜ ๊ตฌ์กฐ์ ์ธ ๊ตฌ์„ฑ๊ณผ ๊ฐœ๋…์ด ์ด๋”๋ฆฌ์›€์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋”๋ฆฌ์›€์— ๋Œ€ํ•œ ์„ค๋ช…๋„ ๊ฐ™์ด ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด๋”๋ฆฌ์›€์€ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ ํ•˜๋‚˜์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. Go-Ethereum ๋ฅผ ํ‘œ์ค€์œผ๋กœ ์น˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ, Open Ethereum๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ๊ตฌํ˜„๋„ ์กด์žฌํ•œ๋‹ค).  Besu๋Š” ๋‹ค๋ฅธ ์ด๋”๋ฆฌ์›€ ๊ตฌํ˜„์„ forkํ•ด์˜จ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. JAVA๋กœ ์ด๋”๋ฆฌ์›€ ํ”„๋กœํ† ์ฝœ์„ ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ๋•Œ๋ฌธ์— ๋น„์Šทํ•œ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋˜ ์กฐ์ง๋“ค๋„ Besu๋ฅผ ์ฃผ๋ชฉํ•˜๊ณ  ์žˆ๋‹ค.             

  • 0. ๋…ธ๋“œ
  • 1. ๊ณ„์ •
  • 2. ์žฅ๋ถ€
  • 3. ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ
  • 4. ์ด๋”๋ฆฌ์›€ ๊ฐ€์ƒ๋จธ์‹ 
  • 5. ๋„คํŠธ์›Œํฌ์™€ ์ƒํ˜ธ์ž‘์šฉ
  • 6. ํ—ˆ๊ฐ€

 

๊ทธ๋ฆผ 3.9 Besu ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ณ

 

0. ๋…ธ๋“œ

Besu ๋„คํŠธ์›Œํฌ๋Š” ์™„์ „ํžˆ ๋™์ผํ•œ ํ”ผ์–ด ๋…ธ๋“œ์— ์˜ํ•ด ์‹คํ–‰๋˜๊ณ , ๊ฐ ๋…ธ๋“œ๋Š” Besu ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ด๋”๋ฆฌ์›€ ํด๋ผ์ด์–ธํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ํ”ผ์–ด๋“ค ๊ฐ„์˜ ํ†ต์‹ ์€ ์™„์ „ํžˆ P2P ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜๊ณ , ์•ฝ๊ฐ„์˜ ์ค‘์•™ํ™”(ํƒˆ์ค‘์•™ํ™”์˜ ๋ฐ˜๋Œ€)๋‚˜ ๋‹ค๋ฅธ ๋…ธ๋“œ ํƒ€์ž…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๋…ธ๋“œ๋“ค์€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜๊ณผ ํ•จ๊ป˜ ์žฅ๋ถ€๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์ „์ฒด ๋ธ”๋ก์ฒด์ธ์„ ์ €์žฅํ•˜๊ณ , ํ’€๋…ธ๋“œ(Full Node)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ํ’€๋…ธ๋“œ๋“ค์€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰('๋น ๋ฅธ ๋™๊ธฐํ™”' ๊ธฐ๋Šฅ์€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค)ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋“ค์€ ๊ฐ€์žฅ ์ตœ์‹ ์˜ world state๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋„คํŠธ์›Œํฌ์— ์ƒˆ๋กœ์šด ํ’€๋…ธ๋“œ๋Š” ๋‹ค๋ฅธ ํ”ผ์–ด์—๊ฒŒ ๋ธ”๋ก์„ ์š”์ฒญํ•ด์„œ ์ด world state๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ’€๋…ธ๋“œ๋Š” ์˜ค์ง ๊ฐ€์žฅ ์ตœ์‹ ์˜ world state๋งŒ ์œ ์ง€ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ’€๋…ธ๋“œ๋Š” ์ด์ „ ๋ธ”๋ก์˜ state๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜๋Š” ์—†๋‹ค(ํ˜„์žฌ head ์•ž ๋ธ”๋ก์˜ ์ž”๊ณ , ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ state ๋“ฑ).

 

๋น„๋ก ์•ž์—์„œ ์™„์ „ํžˆ ๋™์ผํ•œ ๋…ธ๋“œ๋“ค์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ, ์•ฝ๊ฐ„์˜ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์•„์นด์ด๋ธŒ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ํ’€๋…ธ๋“œ์˜ ํ™•์žฅ ๊ฐœ๋…์œผ๋กœ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ๋…ธ๋“œ๋“ค์€ ๊ฐ ๋ธ”๋ก์˜ ๊ฐ์˜ ๋ชจ๋“  ์ค‘๊ฐ„ world state๋ฅผ ์ €์žฅํ•ด์„œ, ๋‹ค์‹œ ํŠธ๋žœ์žญ์…˜๋“ค๋กœ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์—ฌ ์ด์ „์˜ world state๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†๊ฒŒ๋”ํ•œ๋‹ค. ๋Œ€์‹  ์•„์นด์ด๋ธŒ ๋…ธ๋“œ๋Š” ๋” ๋งŽ์€ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. ์•„์นด์ด๋ธŒ ๋…ธ๋“œ๋Š” ํ’€๋…ธ๋“œ์˜ ํ™•์žฅ ๊ฐœ๋…์ด๋ฏ€๋กœ, ํ’€ ๋…ธ๋“œ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ์ฃผ์ œ๋Š” ์กฐ์ง๊ณผ ๋…ธ๋“œ์˜ ๊ด€๊ณ„์ด๋‹ค. Besu์—์„œ๋Š” '์กฐ์ง'์˜ ๊ฐœ๋…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๊ณ„๋Š” ๊ต‰์žฅ์ด ๋‹จ์ˆœํ•˜๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ๊ทธ๋“ค ์ž์‹ ์˜ public / privateํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์ž์‹ ์˜ ์‹ ์›์„ ์ฆ๋ช…ํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•จ์— ์žˆ์–ด ์กฐ์ง์ด ํ›จ์”ฌ ์œ ์—ฐํ•จ์„ ์˜๋ฏธํ•œ๋‹ค: ์ž‘์€ ์กฐ์ง์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์ด์šฉํ•ด ์ฐธ์—ฌํ•˜๊ณ , ํฐ ์กฐ์ง์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ด์šฉํ•ด ์ฐธ์—ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

๊ทธ๋ฆผ 3.10 Besu ๊ตฌ์„ฑ์š”์†Œ ๋ฐ ๊ฐœ๋…์˜ ๊ด€๊ณ„ ๋‹ค์ด์–ด๊ทธ๋žจ

 

๋„คํŠธ์›Œํฌ ์ƒ์„ฑ

Besu๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ • ์—ญ์‹œ ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•˜๋‹ค. ์ด ๊ณผ์ •์€ ํฌ๊ฒŒ 3๊ฐœ์˜ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•œ๋‹ค.

  1. ์ œ๋„ค์‹œ์Šค ํŒŒ์ผ์„ ์„ค์ •ํ•œ๋‹ค. ์ด๊ฒƒ์€ ์ œ๋„ค์‹œ์Šค ๋ธ”๋ก์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  2. ๊ฐ ๋…ธ๋“œ๋ณ„ ์„ค์ •์ด config.toml์— ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค.
  3. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์ œ๋„ค์‹œ์Šค ์„ค์ • ํŒŒ์ผ์€ ๋น„๊ต์  ์ž‘๊ณ , ์ „์ฒด ๋„คํŠธ์›Œํฌ์— ์ ์šฉํ•  ๋‹ค์–‘ํ•œ ์„ค์ •๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์ค‘ ํ—ˆ๊ฐ€ํ˜• ๋„คํŠธ์›Œํฌ์—์„œ ์ฃผ์š”ํ•œ 4๊ฐ€์ง€ ์„ค์ •๊ฐ’๋“ค์„ ์‚ดํŽด๋ณด์ž.

  • config : ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉํ•  ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์ •ํ•œ๋‹ค.
  • gasLimit : ๋ธ”๋ก์˜ ์ตœ๋Œ€ ๊ฐ€์Šค๋Ÿ‰์„ ์ •ํ•œ๋‹ค. ๊ธฐ์—…์—์„œ๋Š” ๋ณดํ†ต gas ์—†์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋Œ€ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • contractSizeLimit : contract์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ œํ•œํ•œ๋‹ค. ๊ธฐ๋ณธ 24KB๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ํ•„์š”(์•ฑ ๊ตฌํ˜„)์— ๋”ฐ๋ผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • alloc : ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋‚˜ ์ ‘๊ทผํ•  ๊ณ„์ •๊ณผ ์ดˆ๊ธฐ ์ž”๊ณ ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆผ 3.11 Besu ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ์ „ํ˜•์  ํ”Œ๋กœ์šฐ

 

๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋‹ˆ ๋‹ค์Œ, ๊ฐ ๋…ธ๋“œ๋“ค์ด ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ • ์—ญ์‹œ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค.  ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์„ ์Šค์œ„์น˜ ์ฒ˜๋Ÿผ ์˜จ-์˜คํ”„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. rpc-http-enabled, rpc-ws-enabled, graphql-http-enabled ์˜ต์…˜๋“ค๊ณผ ํ˜ธ์ŠคํŠธ, IP ์˜ต์…˜์€ ์ด ๋…ธ๋“œ๊ฐ€ ๊ธฐ๋Šฅ์„ JSON-RPC๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ• ์ง€, WebSocket์„ ํ†ตํ•ด ์ œ๊ณตํ• ์ง€, GraphQL๋กœ ์ œ๊ณตํ• ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. Metrics-enabled๋Š” Prometheus ๊ฐ™์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ธ”๋ก์ฒด์ธ์˜ ๋ฉ”ํŠธ๋ฆญ์Šค๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐ์‚ฌํ•ด ๋†’์ด, ๋งˆ์ง€๋ง‰ ๋ธ”๋ก ๋ฒˆํ˜ธ, ์—ฐ๊ฒฐ๋œ ํ”ผ์–ด, ํ”ผ์–ด๋ณ„ ์—ฐ๊ฒฐ๋œ ํ”ผ์–ด ์ˆ˜ ๋“ฑ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค. permissions-nodes-config-file์„ ํ†ตํ•ด ๋…ธ๋“œ๋ณ„๋กœ ๋‹ค๋ฅธ ๊ณ„์ •๊ณผ ๋…ธ๋“œ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. min-gas-price๋Š” ํŠน๋ณ„ํžˆ ํ—ˆ๊ฐ€ํ˜• ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ๋ฅผ ์œ„ํ•ด ์ค‘์š”ํ•œ๋ฐ, 0์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ์ •๋Ÿ‰์˜ ๊ฐ€์Šค๋ฅผ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. bootnodes๋Š” ์˜๋ฏธ๋ฅผ ์ œ๋Œ€๋กœ ์•„๋Š”๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์–ด๋–ค ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ˜„์žฌ ์‹คํ–‰ํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐํ•  ํ”ผ์–ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š”๋‹ค. ์ด๋ฆ„์ด ๋…ธ๋“œ์˜ ์ข…๋ฅ˜ ๊ฐ™์•„์„œ ๋…ธ๋“œ์˜ ๋ถ€ํŒ…์„ ๋„์™€์ฃผ๋Š”, ๋„คํŠธ์›Œํฌ์˜ ๋ฌธ์ง€๊ธฐ์ฒ˜๋Ÿผ ์ค‘์•™ํ™”๋œ ํ˜•ํƒœ๋ฅผ ์ƒ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ„ํ˜น ์žˆ์ง€๋งŒ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง์ž. bootnodes๋กœ ์„ค์ •ํ•˜๋Š” ๋…ธ๋“œ๋„ ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ๋˜‘๊ฐ™์€ ๋…ธ๋“œ์ด๋‹ค. ๊ฒฐ๊ตญ, ํ”ผ์–ด๋Š” ๊ฐ์ž ์„ค์ •ํ•œ ๋ถ€ํŠธ๋…ธ๋“œ๋ฅผ ๋„คํŠธ์›Œํฌ์˜ ์–ด๋–ค ๋…ธ๋“œ๋กœ๋˜์ง€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

๋งŒ์•ฝ ํ”ผ์–ด์˜ ์ตœ์†Œ ์ˆซ์ž(ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค)๋ฅผ ์ฐพ์œผ๋ฉด, ๋„คํŠธ์›Œํฌ๊ฐ€ ๋™์ž‘๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋‹ค์–‘ํ•œ ์กฐ์ง๋“ค์ด ํ”ผ์–ด์˜ ๊ด€์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ทธ๋ฆผ 3.12์—์„œ ๋ณด์—ฌ์ค€๋‹ค. ์กฐ์ง๋“ค์€ ๊ตฌ๋ถ„์ด ์ž˜ ๋˜๋ผ๊ณ  ์ƒ‰์น ํ•œ ๊ฒƒ์ด์ง€, ๊ธฐ์ˆ ์ ์œผ๋กœ ๋‹ค๋ฆ„์„ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š”๋‹ค. ์ด์ „์—๋„ ๋งํ–ˆ์ง€๋งŒ Besu์—๋Š” ์กฐ์ง์ด๋ผ๋Š” ์ปจ์…‰ ์ž์ฒด๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๊ด€์—์„œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๋ฉ”์ธ ๋ถ€ํŠธ ๋…ธ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ๋‹ค๋ฅธ ๊ธฐ๊ด€์˜ ๋„คํŠธ์›Œํฌ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ฆผ 3.12์—์„œ ์ดˆOrg3์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋Ÿฌํ•˜๋‹ค. ์ด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด์„œ, ์กฐ์ง์ด ๊ทธ๋“ค์˜ bootnode๋ฅผ ์ •ํ•˜๋Š” ๋ฐ์— ์žˆ์–ด, ๊ต‰์žฅํžˆ ์œ ์—ฐํ•˜๋ฉฐ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์กฐ์ง์— ๊ฑธ์ณ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ž์‹ ์˜ bootnode๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์‹ค ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—๋งŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด๋„, peer discovery๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋ชจ๋“  ๋…ธ๋“œ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆผ 3.12 ์„ธ ๊ฐœ์˜ ๊ธฐ๊ด€์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์˜ˆ์‹œ

 

 

1. ๊ณ„์ •

์œ„์—์„œ๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€, ์–ด๋–ป๊ฒŒ ๊ทธ๋“ค๋ผ๋ฆฌ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๋…ธ๋“œ๋“ค์ด ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์ธํ•˜๋Š”๋ฐ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์œ ์ผํ•œ ์—ญํ• ์€ ์žฅ๋ถ€๋ฅผ ๊ณ„์†ํ•ด์„œ ์ถ”์ ๊ด€๋ฆฌํ•˜๊ณ , ๋ธ”๋ก์„ ๋งŒ๋“ค๋ฉฐ ํŠธ๋žœ์žญ์…˜์„ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๊ณ„์ •์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ์ธ๋œ๋‹ค. ์‚ฌ์‹ค, ์ด๋Ÿฌํ•œ ๊ณ„์ •๋“ค์€ ๋„คํŠธ์›Œํฌ์™€ ์™„์ „ํžˆ ๋ฌด๊ด€ํ•  ์ˆ˜๋„ ์žˆ๋Š” ๊ฐœ์ฒด๋“ค์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๊ณ„์ •๊ณผ ๊ณ„์ • ์‚ฌ์ด์— ์ผ์–ด๋‚œ๋‹ค. ์š”์•ฝํ•˜๋ฉด, ๋…ธ๋“œ๋“ค์ด ๋„คํŠธ์›Œํฌ์˜ ์ธํ”„๋ผ์— ๋ถˆ๊ณผํ•˜๋ฉฐ, ๊ณ„์ •๋“ค์ด ์ธํ”„๋ผ ์œ„์—์„œ ์‹ค์ œ ํ™œ๋™์„ ํ•˜๋Š” ๊ฐœ์ฒด๋“ค์ด๋ผ๋Š” ์‚ฌ์‹ค์ด๋‹ค. ๊ณ„์ •์—๋Š” ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. EOA(Externally Owned Accounts)์™€ SCA(Smart Contract Account)๊ฐ€ ์žˆ๋‹ค. ๋‘ ํƒ€์ž…์˜ ๊ณ„์ • ๋ชจ๋‘ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

EOA (Externally Owned Account)

EOA๋Š” ๊ฐœ์ธ์ด๋‚˜ ๊ทธ๋ฃน์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ „ํ˜•์ ์ธ ํƒ€์ž…์˜ ๊ณ„์ •์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ EOA๋Š” ํ•œ ์Œ์˜ ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค์ด๋ฉฐ, ์™„์ „ํžˆ ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ์˜ ๋ฐ”๊นฅ์— ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ๊ณ„์ •์€ ๋ˆ„๊ตฌ๋‚˜ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๋„คํŠธ์›Œํฌ๊ฐ€ ๋น„ํ—ˆ๊ฐ€ํ˜•์ด๊ฑฐ๋‚˜, ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋”๋ฆฌ์›€ ๊ธฐ๋ฐ˜ ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณต๊ฐœํ‚ค-๊ฐœ์ธํ‚ค ์Œ์€ ํƒ€์›๊ณก์„  ์•”ํ˜ธ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ, ์ด๊ฒƒ์€ RSA(Rivest-Shamir-Adleman)์— ๋น„ํ•ด ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋จผ์ € 0๊ณผ 2256 ์‚ฌ์ด์˜ ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ž„์˜๋กœ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์•ฝ 1077๊ฐœ์˜ ๊ฐœ์ธํ‚ค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์šฐ์ฃผ์—์„œ ๊ด€์ธก ๊ฐ€๋Šฅํ•œ ์›์ž๋Ÿ‰๋ณด๋‹ค 100๋ฐฐ~1000๋ฐฐ ๋ฐ–์— ์ ์ง€ ์•Š์€ ์ˆ˜์น˜์ด๋‹ค. ๊ฐ™์€ ๊ฐœ์ธํ‚ค๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋‚ฎ์€ ํ™•๋ฅ ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ์ธ ํ‚ค๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. secp256k1 ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ณต๊ฐœ ํ‚ค๋ฅผ ๊ณ„์ •์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋‚˜์˜ ์ •์ˆ˜๋กœ ์••์ถ•ํ•˜๋ฉฐ, ์ด ์ •์ˆ˜๋Š” ๋ณดํ†ต 16์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ๋‹ค. ์ด ๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  PKI๊ฐ€ ์•„๋‹Œ, ECDSA(Elliptic Curve Digital Signature Algorithm)์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์— ์„œ๋ช…ํ•œ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ, ์ฐธ์—ฌ์ž๋“ค์€ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์„œ๋กœ ๊ณต์œ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๊ฒƒ์ด ์™œ ๊ณต๊ฐœํ‚ค๊ฐ€ ์‚ฌ์ „์— ์žฅ๋ถ€์— ๋“ฑ๋ก๋˜์ง€ ์•Š๊ณ ๋„, EOA๊ฐ€ ์˜คํ”„์ฒด์ธ์—์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

 

SCA (Smart Contract Account)

SCA๋Š” EOA๊ฐ€ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. SCA๋Š” ๋˜ ๊ทธ ์ž์‹ ๋งŒ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋ฐ, ์ด๊ฒƒ์€ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ƒ์„ฑํ•œ EOA์˜ ์ฃผ์†Œ์™€ nonce๊ฐ’์„ ์ธ์ฝ”๋”ฉํ•˜์—ฌ keccak256์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค. SCA ์ฃผ์†Œ๋Š” ๊ณ„์ •์˜ ์ฃผ๋œ ์‹๋ณ„์ž์ด๋ฉฐ ๋‹ค๋ฅธ ๊ณ„์ •์ด ์ด ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

ํ‚ค ์Œ ๊ตฌ์กฐ

๋น„๋ก Besu์˜ ๋ชจ๋“  ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์™€ ๊ณ„์ •์ด ๊ณต๊ฐœ ํ‚ค/๊ฐœ์ธ ํ‚ค ์Œ์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ํ˜น์‹œ ์ƒ์œ„์˜ ์กฐ์ง์ด ์‚ฌ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. Besu๋Š” ECDSA๋กœ ๊ณต๊ฐœ ํ‚ค/๊ฐœ์ธ ํ‚ค ์Œ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ณต๊ฐœ ํ‚ค/๊ฐœ์ธ ํ‚ค๋Š” ํ•˜๋‚˜์˜ ํ…์ŠคํŠธ์ด๋ฉฐ, ๊ฐœ์ธ ํ‚ค๋Š” 256๋น„ํŠธ์˜ ์ •์ˆ˜์— ๋Œ€์‘ํ•˜๋Š” 64๋น„ํŠธ 16์ง„์ˆ˜์˜ ์ •์ˆ˜์ด๋‹ค. ๊ณต๊ฐœ ํ‚ค๋Š” 512๋น„ํŠธ์˜ ์ •์ˆ˜์— ๋Œ€์‘ํ•˜์—ฌ secp256k1์˜ ํƒ€์› ๊ณก์„ ์„ ์ด์šฉํ•ด ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํ‚ค๋“ค์€ ํŒจ๋ธŒ๋ฆญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ์„œ์™€ ๋‹ค๋ฅด๊ฒŒ ํ•ญ์ƒ ์ˆซ์ž๋กœ ์‚ฌ์šฉ๋œ๋‹ค. Besu์—์„œ ํ‚ค๋“ค์€ ์ธ์ฆ์„œ๋กœ ํฌ์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ์œ„ ์กฐ์ง์— ์˜ํ•ด ์‚ฌ์ธ์ด ๋  ์ˆ˜ ์—†๋‹ค.

 

 

2. ์žฅ๋ถ€(Ledger)

Besu์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๋ฉด, ๋„ํ๋จผํŠธ๊ฐ€ ๊ต‰์žฅํžˆ ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด StorageProvider๋ผ๋Š” ํŒŒ์‚ฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

// 3.1 StorageProvider
public interface StorageProvider extends Closeable {
	BlockchainStorage createBlockchainStorage ( ProtocolSchedule protocolSchedule );
	WorldStateStorage createWorldStateStorage ( DataStorageFormat dataStorageFormat );
	WorldStateStorage createPrivateWorldStateStorage () ;
	GoQuorumPrivateStorage createGoQuorumPrivateStorage () ;
}

 

์ฒซ์งธ๋กœ, BlockchainStorage๋Š” ๋ธ”๋ก์„ ์ €์žฅํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ๋ธ”๋ก์˜ ํ•ด์‹œ์™€ ๋ณธ๋ฌธ์„ ์ œ๊ณตํ•ด์„œ, ๋ธ”๋ก์„ ์ €์žฅํ•  ๋•Œ ํ•„์š”ํ•œ put-์—ฐ์‚ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋ธ”๋ก๋“ค์€ ์™ธ๋ถ€์˜ ํ‚ค-๋ฐธ๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ด๊ฒƒ์€ rocksdb๋กœ ์„ค์ •๋˜์–ด ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ํ‚ค-๋ฐธ๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. BlockchainStorage๋Š” ๋น ๋ฅด๊ฒŒ ๋ธ”๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋ธ”๋ก ๋ฒˆํ˜ธ์—์„œ ๋ธ”๋ก ํ•ด์‹œ๋กœ์˜ ๋งตํ•‘ ๋˜ํ•œ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. 

 

๋‘๋ฒˆ์งธ๋กœ, WorldStateStorage๋ฅผ ํ†ตํ•ด world state์„ ์ €์žฅํ•œ๋‹ค. ์ด world state์€ ํŠธ๋ผ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ €์žฅ๋œ๋‹ค. ์ด ์—ญ์‹œ key-value ์ €์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ์•ฝ๊ฐ„ ๋ณ€ํ˜•๋œ Bonsai Trie ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์‚ฌ์šฉ๋๋‹ค. ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์ด ์ˆจ๊ฒจ์ ธ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„ ๊ถŒ์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ์‚ฌ์‹ค ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š”๊ฐ€์ด๋‹ค. ๋’ค์— ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ world state๋Š” ๊ณ„์ • ์ฃผ์†Œ์—์„œ ๊ณ„์ • state๋กœ์˜ ๋งคํ•‘ ์ •๋ณด ์—ญ์‹œ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์˜ ์ฃผ์†Œ(ํ•ด์‹œ)์—์„œ ์ฝ”๋“œ๋กœ์˜ ๋งคํ•‘ ์ •๋ณด์—ญ์‹œ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์‚ฌ์‹ค, ์ด ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ์Šค๋งˆํŠธ๋ž™์ด๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ world state๋Š” ๊ณ„์ •์˜ ํ•ด์‹œ์—์„œ ๊ณ„์ •์˜ ์ €์žฅ๊ณต๊ฐ„๊นŒ์ง€์˜ ๋งคํ•‘ ์—ญ์‹œ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์ €์žฅ๊ณต๊ฐ„์€ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์˜ ์œ ๋‹ˆํฌํ•œ key-value ๋งคํ•‘์„ ์ฐธ์กฐํ•œ๋‹ค.

 

// 3.2 Storing of World State in Besu
public interface WorldStateStorage {
	interface Updater {
		Updater putAccountStateTrieNode ( Bytes location , Bytes32 nodeHash , Bytes node );
		Updater putCode ( Hash accountHash , Bytes32 nodeHash , Bytes code );
		Updater putAccountStorageTrieNode ( Hash accountHash , Bytes location , Bytes32 nodeHash ,
			Bytes node );
	}
}

 

์„ธ๋ฒˆ์งธ๋กœ, createPrivateWorldStateStorage()๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…(WorldStateStorage)์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๊ฒƒ์„ ํ†ตํ•ด์„œ, ์šฐ๋ฆฌ๋Š” ํ”„๋ผ์ด๋น— ๋ฐ์ดํ„ฐ๋Š” ํ”„๋ผ์ด๋น— ๋ฐ์ดํ„ฐ ๋งŒ์˜ world state๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋„คํŠธ์›Œํฌ์˜ world state์™€๋Š” ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ•จ์ˆ˜์ธ createGoQuorumPrivateSotrage()๋กœ Besu์˜ world state๊ฐ€ GoQuorum์ด๋ผ๋Š” ๋˜๋‹ค๋ฅธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ด๋”๋ฆฌ์›€ ํด๋ผ์ด์–ธํŠธ์˜ ํ˜•์‹๊ณผ ๋™์ผํ•œ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆผ 3.13์ด Besu ์žฅ๋ถ€์˜ ๋‹จ์ˆœํ™”๋œ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค€๋‹ค.

 

๊ทธ๋ฆผ 3.13 ์žฅ๋ถ€ ์•ˆ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์‹œ๊ฐํ™” ์ž๋ฃŒ

 

๊ณ„์ • ๊ตฌ์กฐ

์ด์ „์— ์ด๋”๋ฆฌ์›€ ๋ฐฑ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž ๊น ๊ณ„์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์ง€๋งŒ, Besu์˜ ๊ณ„์ •์ด ์ด๋”๋ฆฌ์›€ ํ”„๋กœํ† ์ฝœ๊ณผ ๊ฐœ๋…์ ์œผ๋กœ ์™„์ „ํžˆ ๋™๋“ฑํ•˜์ง€๋Š” ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ Besu์˜ ๊ณ„์ •์ด ์–ด๋–ป๊ฒŒ ์žฅ๋ถ€์— ์ €์žฅ์ด ๋˜๋Š”์ง€, accountState๋Š” ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋‹ค์Œ 3.3์€ AccountState์˜ ๋‹จ์ˆœํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

// 3.3 Account State
public interface AccountState {
	Hash getAddressHash () ;
	long getNonce () ;
	Wei getBalance () ;
	default boolean hasCode () ;
	Bytes getCode () ;
	Hash getCodeHash () ;
	UInt256 getStorageValue ( UInt256 key );
}

 

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

 

์œ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” EOA์™€ SCA์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋œ๋‹ค. ํ•˜์ง€๋งŒ EOA๋Š” ์–ด๋–ค ์ฝ”๋“œ๋„, (ํ‚ค-๊ฐ’)์ €์žฅ์†Œ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์ฝ”๋“œ์™€ ์Šคํ† ๋ฆฌ์ง€๋Š” ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์— ๋Œ€ํ•ด์„œ๋งŒ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์šฐ๋ฆฌ๋Š” EOA์™€ SCA์˜ ๊ตฌ์กฐ์  ์ฐจ์ด๋ฅผ ๊ทธ๋ฆผ 3.14์™€ ๊ฐ™์ด ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ํšŒ์ƒ‰์˜ ํ•ญ๋ชฉ์€ ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ํ—ˆ๊ฐ€ํ˜• ์„ค์ •์„ ์œ„ํ•ด์„œ๋Š” ๋ฌด๊ด€ํ•œ ํ•ญ๋ชฉ๋“ค์ด๋‹ค. 

 

๊ทธ๋ฆผ 3.14 EOA์™€ SCA์˜ ๊ตฌ์กฐ์  ์ฐจ์ด

 

ํŠธ๋žœ์žญ์…˜ ๊ตฌ์กฐ

์ด์   ์žฅ๋ถ€์˜ ๊ตฌ์กฐ, ๊ณ„์ •์˜ ์˜๋ฏธ์™€ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์œผ๋‹ˆ, ์ด์ œ ๊ณ„์ •๋“ค์ด ์–ด๋–ป๊ฒŒ ์žฅ๋ถ€์— ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ 3.4์— ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์„ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋กœ Besu๊ฐ€ ํŠธ๋žœ์žญ์…˜ ํƒ€์ž…์„ ๋ฉ”์‹œ์ง€ ์ฝœ๊ณผ ๊ณ„์•ฝ ์ƒ์„ฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

// 3.4 Transaction Structure
public interface Transaction {
	Hash getHash () ;
	long getNonce () ;
	Quantity getGasPrice () ;
	Optional < Quantity > getGasPremium () ;
	Optional < Quantity > getFeeCap () ;
	long getGasLimit () ;
	Optional <? extends Address > getTo () ;
	Quantity getValue () ;
	BigInteger getV () ;
	BigInteger getR () ;
	BigInteger getS () ;
	Address getSender () ;
	Optional < BigInteger > getChainId () ;
	Optional < Bytes > getInit () ;
	Optional < Bytes > getData () ;
	Bytes getPayload () ;
	TransactionType getType () ;
}

 

๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์€ ์‹๋ณ„๊ณผ nonce๋ฅผ ์œ„ํ•ด ์ž์‹  ๊ณ ์œ ์˜ ํ•ด์‹œ๋ฅผ ๊ฐ–๋Š”๋‹ค. ํŠธ๋žœ์žญ์…˜์˜ nonce๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•œ ์‚ฌ๋žŒ์˜ nonce, ์ฆ‰ ๊ณ„์ •์ด ์ƒ์„ฑํ•œ ํŠธ๋žœ์žญ์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ธด ์ˆซ์ž์ด๋‹ค. ๋งŒ์•ฝ ์ด ํŠธ๋žœ์žญ์…˜์˜ nonce๊ฐ€ ๊ณ„์ •์˜ nonce ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ํŠธ๋žœ์žญ์…˜์€ ์ด์ „ ๋ธ”๋ก์ด๋‚˜ ๊ฐ™์€ ๋ธ”๋ก์˜ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์ด๋ฏธ ํฌํ•จ๋œ ํŠธ๋žœ์žญ์…˜ ์ „์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฒ€์ฆ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์ด ์ˆœ์„œ์— ๋งž๊ฒŒ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜์ค‘์— ๋„์ฐฉํ•œ ํŠธ๋žœ์žญ์…˜์€ ์ด๋ฏธ ํฌํ•จ๋œ ํŠธ๋žœ์žญ์…˜๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค(Fork์˜ ๊ฒฝ์šฐ ์ œ์™ธ). ๊ฐ€์Šค๋Š” ๋ณดํ†ต ํ—ˆ๊ฐ€ํ˜• ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ GasPremium, FeeCap, GasLimit, Value๋Š” ๋นผ๊ธฐ๋กœ ํ•œ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์€ ์‚ฌ์ธ ๊ณผ์ •์˜ ์ผ๋ถ€๋กœ์„œ ECDSA์— ์˜ํ•ด ์ƒ์„ฑ๋œ V, R, S-๊ฐ’์„ ํฌํ•จํ•œ๋‹ค. Sender ํ•ญ๋ชฉ์€ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๊ณ„์ •์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ๊ฐ’๋“ค์€ V, R, S-๊ฐ’์—์„œ ํŒŒ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์— Sender๊ฐ€ SCA๊ฐ€ ์•„๋‹Œ EOA๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๋‹ค. ChainId ์—ญ์‹œ ์žฌ์ง„์ž… ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด V-๊ฐ’์—์„œ ํŒŒ์ƒ๋œ๋‹ค.

 

์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์†ก์‹ ์ž๋Š” To ํ•ญ๋ชฉ์— SCA ์ฃผ์†Œ์™€ Payload ํ•ญ๋ชฉ์— ํ•จ์ˆ˜ ํ˜ธ์ถœ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ์ถœํ•œ๋‹ค. ๊ณ„์•ฝ ์ƒ์„ฑ ํŠธ๋žœ์žญ์…˜์€ To ํ•ญ๋ชฉ์— ์ˆ˜์‹ ์ž์˜ ์ฃผ์†Œ๋ฅผ ์ ์„ ํ•„์š”๊ฐ€ ์—†๋Š”๋ฐ, ์™œ๋ƒํ•˜๋ฉด ์ด ์ฃผ์†Œ๋Š” ์†ก์‹ ์ž์˜ ์ฃผ์†Œ์™€ nonce์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ณ„์•ฝ ์ƒ์„ฑ ํŠธ๋žœ์žญ์…˜์€ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ ํ˜ธ์ถœ๊ณผ ๋Œ€๋น„๋˜๊ฒŒ๋„, ์ธ์ž ๋Œ€์‹  Payload ํ•ญ๋ชฉ์— ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค. Init ํ•ญ๋ชฉ์€ ํŠธ๋žœ์žญ์…˜์ด ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ์ƒ์„ฑํ•œ๋‹ค๋ฉด Payload ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๋ฉ”์‹œ์ง€ ์ฝœ์ด๋ผ๋ฉด ๋น„์–ด์žˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Data ํ•ญ๋ชฉ์€ ํŠธ๋žœ์žญ์…˜์ด ๋ฉ”์‹œ์ง€ ์ฝœ์ด๋ผ๋ฉด Payload ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด๋ผ๋ฉด ๋น„์–ด์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, Type์€ ์—ด๊ฑฐํ˜• ํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ์ตœ๊ทผ์—๋Š” EIP1559๋กœ ์„ค์ •๋˜์–ด์žˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ํŠธ๋žœ์žญ์…˜์˜ ์ˆœ๋ฐฉํ–ฅ ํ˜ธํ™˜์„ฑ์— ์‚ฌ์šฉ๋œ๋‹ค. ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๊ฑฐ๋ž˜์— ๋Œ€ํ•œ ๊ฐœ์š”๋Š” ๊ทธ๋ฆผ 3.15๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

 

๊ทธ๋ฆผ 3.15 ๋‘ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฅ˜(์ปจํŠธ๋ž™ ์ƒ์„ฑ๊ณผ ๋ฉ”์‹œ์ง€ ์ฝœ)์˜ ๊ตฌ์กฐ์  ์ฐจ์ด

 

 

3. ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ

์œ„์—์„œ ๋ดค๋“ฏ์ด, ์šฐ๋ฆฌ๋Š” ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™(ํ˜น์€ SCA)๊ฐ€ 3๊ฐœ์˜ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ์„ ๋ณด์•˜๋‹ค: (์ฃผ์†Œ, nonce๋ฅผ ํฌํ•จํ•œ)account state, ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ ๋ฐ”์ดํŠธ์ฝ”๋“œ, ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ ์ €์žฅ์†Œ. ์ด ๊ตฌ์„ฑ์š”์†Œ๋“ค์ด ์žฅ๋ถ€ ์œ„์—์„œ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๊ณ  ์–ด๋–ป๊ฒŒ ์„ค ์—ฐ๊ฒฐ๋˜๋Š”์ง€๋„ ์•Œ์•„๋ณด์•˜๋‹ค. ๋น„๋ก ๊ฐ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด ์ €์žฅ(ํ˜น์€ state)์˜ ๊ด€์ ์—์„œ ๋…๋ฆฝ๋˜์–ด ์žˆ์ง€๋งŒ, ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์€ ํ•˜๋‚˜์˜ ๊ณ„์•ฝ์ด ๋‹ค๋ฅธ ๊ณ„์•ฝ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ์„ฑ๋œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด๋ผ๋„ EOA์— ์˜ํ•ด ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•  ์ˆœ ์—†๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๊ณ , ์œ ์ง€๋˜๋Š”์ง€ ๊ฐœ๋…์ ์ธ ๋‹จ๊ณ„์—์„œ ์ง‘์ค‘ํ•ด ์•Œ์•„๋ณด์ž.

 

์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ ์“ฐ๊ธฐ

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

 

์šด ์ข‹๊ฒŒ๋„, ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ, ๊ณ ๊ธ‰ ์–ธ์–ด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค. ์ตœ๊ทผ์—๋Š” EVM์ด Solidity, Vyper, Yul(+) ๋“ฑ์˜ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์–ธ์–ด๋“ค์€ DSL์ด๋‹ค. ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด๋Š” Solidity์ด๋‹ค. Solidity๋Š” JavaScript์˜ ์˜ํ–ฅ์„ ํฌ๊ฒŒ ๋ฐ›์€ ๋ฐ›์€ ์ •์  ํƒ€์ž… ์–ธ์–ด์ด๋‹ค. Solidity ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์€ ์ถ”๊ฐ€ ํŒŒ์ผ์— ์ •์˜๋œ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Vyper๋Š” ๋˜ ๋‹ค๋ฅธ DSL์–ธ์–ด๋กœ, ๊ฐ„๊ฒฐ์„ฑ, ์ˆ˜์ • ๊ฐ€๋Šฅ์„ฑ, ๋ณด์•ˆ ๋“ฑ์˜ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ํƒ„์ƒํ–ˆ๋‹ค. Vyper๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์— ์˜ํ•ด ์ฒ ์ €ํ•˜๊ฒŒ ๊ฒ€์ฆ๋˜์–ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์–ธ์–ด์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ปจ์†Œ์‹œ์—„์— ์ฐธ์—ฌํ•œ ๊ธฐ๊ด€๊ฐ„์— ์„œ๋กœ๋ฅผ ์™„์ „ํžˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ Solidity๊ฐ€ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ง€ Solidity๋กœ ์ž‘์„ฑ๋œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด Vyper๊ฐ€ ์—„๊ฒฉํ•œ๋ฐ์— ๋น„ํ•ด ๋” ์œ ์—ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์„ธ๋ฒˆ์งธ๋กœ Yul(+)์€ ๊ต‰์žฅ์ด ๋กœ์šฐ ๋ ˆ๋ฒจ์˜ ์–ธ์–ด์ด๊ณ , ์ž์‹ ๋“ค์˜ ๊ตฌํ˜„์„ ๋ณด๋‹ค ์ตœ์ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด ์•ž์„œ ๋งํ–ˆ๋˜ ์–ธ์–ด๋“ค๋กœ ์“ฐ์—ฌ์ง€๋ฉด, ํ•ด๋‹น ์–ธ์–ด์˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปจํŠธ๋ž™์„ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•œ๋‹ค. ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” (์ ‘๊ทผ ํ—ˆ๊ฐ€๊ฐ€ ์žˆ๋‹ค๋ฉด)์–ด๋–ค ๊ณ„์ •์ด๋˜์ง€ ๋„คํŠธ์›Œํฌ์— ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํŠธ๋ž™ ์ƒ์„ฑ ํŠธ๋žœ์žญ์…˜์„ ํฌํ•จํ•œ๋‹ค.

 

์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ ์œ ์ง€ํ•˜๊ธฐ

์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด ๋ธ”๋ก์ฒด์ธ ๊ทธ ์ž์ฒด์— ๋ฐฐํฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์—, ๊ทธ๊ฒƒ๋“ค์€ ๋ฐฐํฌ๊ฐ€ ๋˜๊ณ  ๋‚˜๋ฉด ์ˆ˜์ •๋  ์ˆ˜ ์—†๋‹ค. ์ด ๊ฒƒ์€ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋˜๋‹ค๋ฅธ ๊ณผ์ œ์ด๋‹ค. ์ด ๋ฐฉํ•ด๋ฌผ์€ DelegateCall() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ถ€๋ถ„์ ์œผ๋กœ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ A๊ฐ€ ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ๋‹ค๋ฅธ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์˜ ํ•จ์ˆ˜(B)๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ƒ๊ธด ๋ณ€ํ™”๋Š” A์˜ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์˜ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ์— ์ €์žฅ๋œ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ DelegateCall() ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค๋ฅธ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์— ์‹ค์ œ ๊ตฌํ˜„์„ ์ž‘์„ฑํ•˜๊ณ , ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ๋Œ€๋ฆฌ๋กœ ๋ฐฐํฌํ•  ๋•Œ ์‚ฌ์šฉํ•ด์™”๋‹ค. OpenZeppelin์€ ๋ฐฐํฌํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€๋Šฅํ•œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ํ•ด๋‹ต์€ ์•„๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด ํ•˜๋‚˜์˜ ๊ฐœ์ธ์— ์˜ํ•ด ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๋œ๋‹ค๊ณ  ํ•˜๋ฉด, ์ด๊ฒƒ์€ ์‹ ๋ขฐ์™€ ๋‚จ์šฉ ์œ„ํ—˜์˜ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•œ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์—, ์—ฌ๋Ÿฌ๊ฐœ์˜ EOA๊ฐ€ ์ฐธ์กฐ๋œ ์ปจํŠธ๋ž™์˜ ์ฃผ์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ์š”๊ตฌํ•จ์œผ๋กœ์จ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์ปจํŠธ๋ž™์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, SCA ์ €์žฅ์†Œ๊ฐ€ ์ด๋ฏธ ๋ฐ”๋€Œ์—ˆ์„ ๊ฒƒ์ด๊ณ , ์ด๊ฒƒ์„ ๋ณต๊ตฌํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋”ฐ. 131๊ฐœ์˜ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์˜ ์—ฐ๊ตฌ ๋…ผ๋ฌธ๊ณผ, 150๋ช…์ด ๋„˜๋Š” ์ด๋”๋ฆฌ์›€ ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ์„ค๋ฌธ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ด์Šˆ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•˜๋Š”์ง€ ์กฐ์‚ฌํ–ˆ๋‹ค. 36%์˜ ์‘๋‹ต์ž๋Š” ์ด ๋Œ€๋ฆฌ-์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๊ณ , ๋ฐ˜๋ฉด์— ๋Œ€๋‹ค์ˆ˜๋Š” ๊ทธ๋ƒฅ ์ƒˆ๋กœ์šด ์ปจํŠธ๋ž™์„ ๋ฐฐํฌํ–ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ปจํŠธ๋ž™์„ ๋ฐฐํฌํ•œ ๋Œ€๋‹ค์ˆ˜์˜ ๊ฐœ๋ฐœ์ž๋“ค์€, Selfdestruct()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ด์ „ ์ปจํŠธ๋ž™์„ ํ๊ธฐํ–ˆ๋‹ค.

 

 

4. ์ด๋”๋ฆฌ์›€ ๊ฐ€์ƒ๋จธ์‹ 

Besu๋Š” EVM์„ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์—”์ง„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. EVM์€ ์ค€-ํŠœ๋ง์™„์ „์ด๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์€ ๊ฐ€์Šค ์ œํ•œ๊ณผ ์‹คํ–‰ ์‹œ๊ฐ„ ๋•Œ๋ฌธ์ด๋‹ค. ๋ณดํ†ต EVM์€ GasCalculator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์‹คํ–‰์— ์‚ฌ์šฉ๋œ ๊ฐ€์Šค์˜ ์–‘์„ ์ถ”์ ํ•œ๋‹ค. ๊ฐ€์Šค๊ฐ€ ๋‹ค ๋–จ์–ด์ง€๋ฉด, ํŠธ๋žœ์žญ์…˜ใ…‡์‹คํ–‰์€ ์ทจ์†Œ๋˜๊ณ , ๋ณ€๊ฒฝ๋œ state๋Š” ๋กค๋ฐฑ๋œ๋‹ค. ์ด ์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ๊ฐ€์Šค๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ๊ฐ€์Šค ์ œํ•œ์„ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ํ—ˆ๊ฐ€ํ˜• ์„ค์ •์„ ํ•˜๋ฉด ์‚ฌ๋ผ์ง„๋‹ค. ๊ฐ€์Šค ์ œํ•œ์ด ๊ฑฐ์˜ ๋ฌดํ•œ์— ๊ฐ€๊น๊ธฐ ๋–„๋ฌธ์— EVM์€ ํŠœ๋ง์™„์ „์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€์Šค๊ฐ€ ํ•„์š”์—†๋Š” ํ—ˆ๊ฐ€ํ˜• ์„ค์ •์—์„œ๋„, ๋งŒ์•ฝ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ—ˆ๊ฐ€ํ˜•์—์„œ ๊ฐ€์Šค๋น„๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋‚ฎ๊ฒŒ ์„ค์ •ํ•œ๋‹ค๋ฉด, ์–ด์„คํ”„๊ฒŒ ์ž‘์„ฑ๋œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์ด ์ „์ฒด ๋„คํŠธ์›Œํฌ์˜ ์†๋„๋ฅผ ๋‚ฎ์ถ”์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค.

 

Besu์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, EVM ๊ตฌํ˜„์ด ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ์•„ํ‚คํ…์ณ๋ฅผ ํ•˜๊ณ  ์žˆ์Œ์ด ๋ช…๋ฐฑํ•ด์ง„๋‹ค. ์ด๊ฒƒ์€ ์ด๋”๋ฆฌ์›€์˜ ๊ธฐ์ˆ ๋ฌธ์„œ์— ์ œ์•ˆ๋œ ์ปจ์…‰๊ณผ ๋น„์Šทํ•˜๋‹ค. ์ด EVM์€ EVM์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์˜ ๋ฆฌ์ŠคํŠธ์ธ OperationRegistry๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ด ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ฐ„๋‹จํ•œ Push, Pop ์—ฐ์‚ฐ์„ ํฌํ•จํ•ด์„œ DelegateCall๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์—ฐ์‚ฐ๋„ ์žˆ๋‹ค.

 

Besu์—์„œ์˜ ํŠธ๋žœ์žญ์…˜์€ ๋ฉ”์‹œ์ง€ ์ฝœ์ด๊ฑฐ๋‚˜ ์ปจํŠธ๋ž™ ์ƒ์„ฑ ํŠธ๋žœ์žญ์…˜์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋‘ ๊ฐ€์ง€ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด ๋‘๊ฐ€์ง€ ํŠธ๋žœ์žญ์…˜์ด ๋ฉ”์„ธ์ง€, ์ฆ‰ ์žฅ๋ถ€์— ์š”์ฒญํ•œ ๋ณ€ํ™”๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋ฉ”์„ธ์ง€๋“ค์€ Besu์—์„œ MessageFrame์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ, MessageFrame์€ "๋ฉ”์„ธ์ง€์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  state์˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด"์ด๋‹ค. ๊ด€์Šต์ ์œผ๋กœ, ์ด๊ฒƒ์€ MessageFrame์€ global state(WorldsState, blockchain), ์Šคํƒ ์•„ํ‚คํ…์ณ(program counter, memory, stack) ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐœ(44)์˜ private ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. Besu์˜ EVM ๊ตฌํ˜„ ์ „๋ถ€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๊ธฐ์ˆ ์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ๋ฆผ 3.16, ๊ทธ๋ฆผ 3.17์˜ ์š”์•ฝ๋œ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆผ 3.16 Besu์˜ EVM ๊ตฌํ˜„

 

๊ทธ๋ฆผ 3.17 Besu์—์„œ ํŠธ๋žœ์žญ์…˜ ๋ผ์ดํ”„์‚ฌ์ดํด

 

 

5. ๋„คํŠธ์›Œํฌ์™€ ์ƒํ˜ธ์ž‘์šฉ

๋กœ์ปฌ์˜ ํ˜น์€ ์›๊ฒฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์™€ ํ†ต์‹ ํ•จ์œผ๋กœ์จ ๋„คํŠธ์›Œํฌ์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์€ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ๊ณผ API๋ฅผ ํ†ตํ•˜์—ฌ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. HTTP๋ฅผ ํ†ตํ•œ JSON-RPC,  WebSockets๋ฅผ ํ†ตํ•œ JSON-RPC, HTTP๋ฅผ ํ†ตํ•œ GraphQL์ด ๊ทธ๊ฒƒ์ด๋‹ค.

 

JSON-RPC๋Š” JSON์„ ์‚ฌ์šฉํ•˜๋Š” RPC์˜ ํ‘œ์ค€์ด๋ฉฐ, ๋น„์ƒํƒœ ํ†ต์‹ ์„ ํ•˜๋Š”๋ฐ์˜ ๊ทœ์น™๊ณผ ํ˜•์‹์„ ์ •์˜ํ•œ๋‹ค. Besu๋Š” 2.0 ๋ฒ„์ ผ์„ ์ง€์›ํ•œ๋‹ค. RPC๊ฐ€ ๋ณดํ†ต ๊ทธ๋Ÿฌํ•˜๋“ฏ, ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๊ณผ, ์ธ์ž๋“ค์ด ํฌํ•จ๋œ ์š”์ฒญ์„ ํŽ˜์ด๋กœ๋“œ ํ˜•ํƒœ๋กœ ๋ถ™์—ฌ ๋„˜๊ธด๋‹ค. 3.5์—์„œ ํ•ด๋‹น ํŽ˜์ด๋กœ๋“œ์— ๋Œ€ํ•ด ์˜ˆ์‹œ๊ฐ€ ์žˆ๋‹ค. 

 

# 3.5 JSON-RPC example payload
{
	"jsonrpc": "2.0",
	"method" : "eth_blockNumber",
	"params" : [],
	"id" : 1
}

์šฐ๋ฆฌ๋Š” ๊ฐ ์ฟผ๋ฆฌ๊ฐ€ JSON-RPC ํ”„๋กœํ† ์ฝœ, ๋ฉ”์†Œ๋“œ ์ด๋ฆ„, ๋ฉ”์†Œ๋“œ์— ํ•„์š”ํ•œ ์ธ์ž, ์‹๋ณ„์ž๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์‹๋ณ„์ž๋Š” ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋…ธ๋“œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ๋งŒ์•ฝ ์‹๋ณ„์ž๋ฅผ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์„ ๋Œ๋ ค๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. ๋ช…๋ฐฑํ•˜๊ฒŒ JSON-RPC๋Š” ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ํ™˜๊ฒฝ๊ณผ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ WebSockets์„ ํ†ตํ•œ ์ƒํ˜ธ์ž‘์šฉ๋„ ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊บผ์ ธ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์š”์ฒญ์„ ํ•  ๋•Œ, ๋…ธ๋“œ์˜ ์„ค์ • ํŒŒ์ผ์— ์ •์˜ํ•œ๋‹ค๋ฉด ์œ ์ € ์ด๋ฆ„/ ๋น„๋ฐ€๋ฒˆํ˜ธ ์Œ, ํ˜น์€ JWT๋ฅผ ํ†ตํ•œ ์ธ์ฆ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

๋งˆ์ง€๋ง‰์œผ๋กœ HTTP๋ฅผ ํ†ตํ•œ GraphQL์ด ์ง€์›๋œ๋‹ค. GraphQL์€ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ์–ด๋–ค ํ•ญ๋ชฉ์„ ์š”์ฒญํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ ์–ธ์–ด์ด๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ, ์ฟผ๋ฆฌ ์–ธ์–ด๋Š” ์žฅ๋ถ€๋ฅผ ์ฟผ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ GraphQL์€ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ๋‹ค. 3.6์˜ ์˜ˆ์‹œ๊ฐ€ ๋‚จ์€ ํŠธ๋žœ์žญ์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฟผ๋ฆฌํ•ด์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

 

# 3.6 GraphQL example payload
{
	"query": "{pending {transactionCount}}"
}

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

๋น„๋ก HTTP ํ˜น์€ WebSocket ๋ฉ”์‹œ์ง€๋กœ ๋…ธ๋“œ์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. Besu๊ฐ€ ์ด๋”๋ฆฌ์›€ ํ”„๋กœํ† ์ฝœ์˜ ๋Œ€๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(์„œ๋ช…๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์„ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„ ์ œ์™ธ), ์ด๋”๋ฆฌ์›€ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ค์€ Besu์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ ๋ช…ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Web3.js(JavaScript), Web3j(Java), Web3py(Python), Nethereum(.Net)์ด ์žˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋”๋ฆฌ์›€ ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ํ•˜๋˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋„, ์ปค์Šคํ…€ ๋„คํŠธ์›Œํฌ์˜ ์ŠคํŽ™์„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด,  Besu์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. Truffle, Remix ๋Š” ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ๋ฐฐํฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•˜๋Š”๋ฐ ์œ ๋ช…ํ•œ ๋„๊ตฌ๋“ค์ด๋‹ค. Tenderly๋„ ๋ถ„์„์ž๋ฃŒ๋ฅผ ๋ชจ์œผ๊ณ , ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ Prometheus๋„ Besu ๋„คํŠธ์›Œํฌ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Grafana๋Š” Prometheus๋กœ ๋ชจ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆผ 3.18์€ Besu ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” Grafana ๋Œ€์‹œ๋ณด๋“œ์ด๋‹ค. ๋ช…๋ฐฑํ•œ ์ด์œ ๋“ค๋กœ, ๋ฐ์ดํ„ฐ ํ”„๋ผ์ด๋ฒ„์‹œ์™€ ๊ฐ™์€ Besu์˜ ํŠน์ง• ๊ธฐ๋Šฅ๋“ค์€, ์ด๋”๋ฆฌ์›€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. Besu ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„น์…˜ 6.2์— ์ž์„ธํžˆ ์„ค๋ช…๋œ Web3.js-eeea59์™€ ๊ฐ™์ด EEA ํ™•์žฅ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆผ 3.18 Besu ๋„คํŠธ์›Œํฌ๋ฅผ ์œ„ํ•œ Grafana ๋Œ€์‹œ๋ณด๋“œ

 

EthSigner๋ฅผ ํ†ตํ•ธ ํŠธ๋žœ์žญ์…˜ ์ „์†ก

์ด ์ „์—, ํŠธ๋žœ์žญ์…˜์€ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ณ„์ •์— ์˜ํ•ด ์ƒ์„ฑ๋œ๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‚ฌ์šฉ์ž ๋“ฑ actor๊ฐ€ ์ด ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๊ณ , ์ด ๊ฒƒ์„ JSON-RPC ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด ์ง์ ‘์ด๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ๋“  ๋…ธ๋“œ์— ๋ณด๋‚ธ๋‹ค. ์ด ํŠธ๋žœ์žญ์…˜์ด ๋„คํŠธ์›Œํฌ์—์„œ ํ•ฉ๋ฒ•์œผ๋กœ ์ธ์ • ๋ฐ›์œผ๋ ค๋ฉด, ์ด๊ฒƒ์€ ๋ฐ˜๋“œ์‹œ ๊ณ„์ •์˜ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋ช…๋˜์–ด์•ผ ํ•œ๋‹ค. Go Ethereum, Open Ethereum ๊ฐ™์€ ์ „ํ†ต์ ์ธ ์ด๋”๋ฆฌ์›€ ๋…ธ๋“œ๋“ค์€ ๋‚ด์žฅ๋œ ์ง€๊ฐ‘์ด ์žˆ์–ด, ๊ณต๊ฐœ ํ‚ค/๊ฐœ์ธ ํ‚ค ์Œ์„ ๋ณด๊ด€ํ–ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ์ด ์ด๋”๋ฆฌ์›€ ํด๋ผ์ด์–ธํŠธ๋“ค์€ eth_sendTransaction์˜ endpoint๋ฅผ ์ง€์›ํ•ด์„œ, actor๋“ค์ด ์„œ๋ช…๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์„œ๋ช…๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜ ์š”์ฒญ์„ ์ˆ˜๋ นํ•˜๋ฉด, ๋…ธ๋“œ๋Š” ์ง€๊ฐ‘์˜ ๊ฐœ์ธ ํ‚ค๋ฅผ ๋ณด๊ณ  ์„œ๋ช…ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ์— ๋ฟŒ๋ ธ๋‹ค. ํ•˜์ง€๋งŒ Besu๋Š” ๋‚ด์žฅ ์ง€๊ฐ‘๊ณผ eth_sendTransaction์„ ํ†ตํ•œ ๋ฌด์„œ๋ช… ํŠธ๋žœ์žญ์…˜์„ ๋ชจ๋‘ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

Besu์— ์žˆ๋Š” actor๋“ค์—๊ฒŒ๋Š” eth_sendTransaction ๋ฉ”์†Œ๋“œ๊ฐ€ (๊ตฌํ˜„๋˜์ง€ ์•Š์•„)์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ, eth_sendRawTransaction ๋ฉ”์†Œ๋“œ๊ฐ€ ๋Œ€์‹  ์ œ๊ณต๋œ๋‹ค. ์ด ํ•จ์ˆ˜ ์—ญ์‹œ ์ด๋”๋ฆฌ์›€ ํ”„๋กœํ† ์ฝœ์˜ ํ•œ ๋ถ€๋ถ„์ด๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ช…๋œ ํŠธ๋žœ์žญ์…˜์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๋‹ค. 3.7์˜ ์˜ˆ์‹œ๊ฐ€ eth_sendRawTransaction ๋ฉ”์†Œ๋“œ๋ฅผ JSON-RPC๋กœ ํ˜ธ์ถœํ•˜๋Š” ํŽ˜์ด๋กœ๋“œ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

# 3.7 sendRawTransaction example
{
	" jsonrpc ": "2.0 ",
	" method ": "eth_sendRawTransaction ",
	" params ": ["0 xf869018203e ... "],
	"id": 1
}

 

sendRawTransaction ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๋ชจ๋‘๊ฐ€ ๊ฐœ์ธ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์„œ๋ช…ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ๋ถ€๋‹ด์„ ์ง€๊ฒŒํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ Besu๋Š” EthSigner๋ผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ, EthSigner๋Š” eth_sendTransaction ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋…ธ๋“œ ์•ž์— ๋ถ™์–ด ํ”„๋ก์‹œ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. EthSigner๋ฅผ ํ†ตํ•ด actor๋Š” ๊ฐœ์ธ ํ‚ค์— ๋Œ€ํ•ด ์•Œ๊ณ , ํŠธ๋žœ์žญ์…˜์— ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ถ€๋‹ด ์—†์ด eth_sendTransaction ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. EthSigner๋Š” ๋ฌด์„œ๋ช… ํŠธ๋žœ์žญ์…˜์„ ๋ฐ›์œผ๋ฉด, ๊ทธ๊ฒƒ์— ์„œ๋ช…ํ•˜๊ณ  ๋…ธ๋“œ์˜ eth_sendRawTransaction์œผ๋กœ ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค. ๊ณต๊ฐœ ํ‚ค/๊ฐœ์ธ ํ‚ค ์Œ ์—ญ์‹œ EthSigner ์ธ์Šคํ„ด์Šค์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋กœ์ปฌ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜, Hashicorp Vault์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, Key Vault of Microsoft Azure์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆผ 3.19๋Š” ๋…ธ๋“œ์— ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•œ๋‹ค.

 

๊ทธ๋ฆผ 3.19 ํŠธ๋žœ์žญ์…˜ ์ „์†ก ๊ณผ์ •

 

 

6. ํ—ˆ๊ฐ€

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

 

๋กœ์ปฌ : ์‚ฌ์šฉ์ž-๊ธฐ๋ฐ˜ ์ธ์ฆ

๋…ธ๋“œ๋Š” JSON-RPC ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” toml ํŒŒ์ผ์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์‚ฌ์šฉ์ž๋“ค์— ๋Œ€ํ•ด ๋‹ค์Œ ํ•ญ๋ชฉ๋“ค์ด ํŠน์ •๋œ๋‹ค: ๊ณต๊ฐœ ํ‚ค, ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ํ•ด์‹œ, ํ—ˆ๊ฐ€์˜ ๋ชฉ๋ก. ์—ฌ๊ธฐ์„œ ํ—ˆ๊ฐ€์˜ ๋ชฉ๋ก์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” JSON-RPC ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์˜ ๋ชฉ๋ก์„ ๋งํ•œ๋‹ค. 3.8์— ์˜ˆ์‹œ๊ฐ€ ์žˆ๋‹ค. ์ด ํ˜•ํƒœ์˜ ์ธ์ฆ์€ ๋…ธ๋“œ์—๋งŒ ๋กœ์ปฌ ๋ ˆ๋ฒจ์—์„œ ์ •์˜๋˜๊ณ , ํ•ด๋‹น ์„ค์ •ํŒŒ์ผ์„ ์ •์˜ํ•œ ๋…ธ๋“œ์—๋งŒ ์ ์šฉ๋œ๋‹ค. 

 

# 3.8 User-Based Authentication
[ Users . username1 ]
password = " $2a$10$l3GA7K8g6rJ /Yv. YFSygCuI9byngpEzxgWS9qEg5emYDZomQW7fGC "
permissions =[" net :*"," eth : blockNumber "]
privacyPublicKey =" U7ANiOOd5L9Z / dMxRFjdbhA1Qragw6fLuYgmgCvLoX4 ="

[ Users . username2 ]
password = " $2b$10$6sHt1J0MVUGIoNKvJiK33uaZzUwNmMmJlaVLkIwinkPiS1UBnAnF2 "
permissions =[" net : version "," admin :*"]
privacyPublicKey =" quhb1pQPGN1w8ZSZSyiIfncEAlVY /M/ rauSyQ5wVMRE ="

 

์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ํŒจ์Šค์›Œ๋“œ๋Š” ๋…ธ๋“œ์— ์š”์ฒญํ•˜์—ฌ ๋กœ๊ทธ์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ๊ณต๊ฐœ ํ‚ค ์™€ ๊ฐœ์ธ ํ‚ค๋ฅผ RSA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ, ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ JWT๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ์˜ต์…˜์ด ์ผœ์กŒ๋‹ค๋ฉด, ์š”์ฒญ ํ—ค๋” Authorization ํ•ญ๋ชฉ์— ์œ ํšจํ•œ JWT๋ฅผ ์ž…๋ ฅํ•œ ํด๋ผ์ด์–ธํŠธ๋งŒ ๋…ธ๋“œ์˜ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋Š” ๊ทธ๋ฆผ 3.20์— ๋‚˜์™€์žˆ๋‹ค.

 

๊ทธ๋ฆผ 3.20 JWT๋ฅผ ์ด์šฉํ•œ ๊ณต๊ฐœํ‚ค/๊ฐœ์ธํ‚ค ์ธ์ฆ

 

๋กœ์ปฌ/๋„คํŠธ์›Œํฌ : ๋…ธ๋“œ ํ—ˆ๊ฐ€ ๋ชฉ๋ก

์•ž์— ๋‘๊ฐ€์ง€ ํ—ˆ๊ฐ€ ๊ธฐ์ˆ ์€ ๋…ธ๋“œ์˜ API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” actor์— ์ดˆ์ ์„ ๋งž์ท„๋‹ค. Besu ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ bootnode์™€ peer discovery๋ฅผ ์ด์šฉํ•ด ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ๊ธฐ์–ตํ•ด๋ณด์ž. ์—ฌ๊ธฐ์„œ, ์šฐ๋ฆฌ๋Š” ํƒ€๋™์„ฑ(A๊ฐ€ B์— ์—ฐ๊ฒฐ๋˜๊ณ , B๊ฐ€ C์— ์—ฐ๊ฒฐ๋˜๋ฉด, A๊ฐ€ C์— ์—ฐ๊ฒฐ๋จ)์ด ์ด ์—ฐ๊ฒฐ์— ์ ์šฉ๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๊ณต๊ฒฉ์ž๊ฐ€ ํ—ˆ๊ฐ€ํ˜• ๋„คํŠธ์›Œํฌ๋ฅผ ์šด์šฉํ•˜๋Š” ์กฐ์ง๊ณผ ์ „ํ˜€ ์ ‘์ด‰ ์—†์ด, bootnode์˜ ์ฃผ์†Œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๊ฒƒ์„ ์ œํ•œํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ „์ฒด ๋„คํŠธ์›Œํฌ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ๊ทธ๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ณต์œ ํ•  ๊ฒƒ์ด๋‹ค. Besu๋Š” ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๋ชฉ๋ก์„ ์ •์˜ํ•ด ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•œ๋‹ค. ๋ชฉ๋ก์— ์—†๋Š” ๋…ธ๋“œ๋“ค์˜ ์—ฐ๊ฒฐ์€ ๊ฑฐ์ ˆํ•œ๋‹ค. ์ด ์ฐธ๊ฐ€ ์ œํ•œ์€ EEA์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ด๋”๋ฆฌ์›€ ํด๋ผ์ด์–ธํŠธ ์ •์˜์—์„œ connectionAllowed ํ•จ์ˆ˜๋กœ๋„ ์•Œ๋ ค์ ธ์žˆ๋‹ค.

 

๋…ธ๋“œ ํ—ˆ๊ฐ€๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ ์œ ๋‹ˆํฌํ•œ ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์Œ, ๋…ธ๋“œ์˜ enode๊ฐ€ ๋…ธ๋“œ์˜ ํ—ˆ๊ฐ€๋ชฉ๋ก์— ์ ํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค. enode๋Š” "enode://nodePubKey@host:port" ํ˜•์‹์˜ URL์ด๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” ์œ ๋‹ˆํฌํ•˜๊ฒŒ ๋„คํŠธ์›Œํฌ์˜ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ—ˆ๊ฐ€๋ชฉ๋ก์€ ๋กœ์ปฌ์˜ toml ํŒŒ์ผ์— ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋กœ์ปฌ/๋„คํŠธ์›Œํฌ : ๊ณ„์ • ํ—ˆ๊ฐ€ ๋ชฉ๋ก