#8 Merkle Tree

Storage size optimization

๋น„ํŠธ์ฝ”์ธ์˜ ๋ชจ๋“  ๋ธ”๋ก์˜ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ํฐ space๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ฆ์ธ๋“ค์€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์žˆ์ง€๋งŒ, ๋น„ํŠธ์ฝ”์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ(์ˆ˜๋ฐฑ GB)๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์•„๋ฌด๋„ ๋น„ํŠธ์ฝ”์ธ ๊ฑฐ๋ž˜๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

๋น„ํŠธ์ฝ”์ธ์€ ์ด๋Ÿฌํ•œ ๋น„ํšจ์œจ์„ฑ์„ ์ค„์ด๊ธฐ์œ„ํ•ด Merkle Tree๋ฅผ ๋„์ž…ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋จธํดํŠธ๋ฆฌ์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋งํฌ์—์„œ ๋จผ์ € ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„ํ•  ๊ฒƒ

๋จธํดํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ์œ„ํ‚คํ”ผ๋””์•„์—์„œ ๊ฐ€์ ธ์˜จ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Leaf ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•ด์‹œ๋ฅผ ๊ตฌํ•˜๊ณ  2๊ฐœ์˜ ํ•ด์‹œ๋ฅผ ์ด์–ด์„œ ๋‹ค์‹œ ํ•ด์‹œ๋ฅผ ๊ตฌํ•ด ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. Leaf ๋…ธ๋“œ๋Š” ์ง์ˆ˜๊ฐœ ์กด์žฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ์˜ ํŠน์„ฑ์ƒ Leaf ์ค‘์˜ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ(ํ•ด์‹œ๊ฐ’)๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ด€๋œ ๋ชจ๋“  ๋ถ€๋ชจ์˜ ํ•ด์‹œ๊ฐ’์ด ๋ฐ”๋€๋‹ˆ๋‹ค.

Merkle Tree from Wikipidia

Coinbase Transaction on New Block

Merkle Tree๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ์ „์— ์ƒˆ๋กœ์šด ๋ธ”๋ก์ด ์ƒ์„ฑ๋  ๋•Œ ์ฝ”์ธ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋‹จ transaction.goํŒŒ์ผ์„ ์—ด์–ด CoinbaseTx์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋žœ๋คํ•˜๊ฒŒ ์ƒ์„ฑ๋˜๋„๋ก ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

send์—์„œ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•  ๋•Œ Coinbase ํŠธ๋žœ์žญ์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฃผ์†Œ์—๊ฒŒ ๋ณด์ƒ 20 ์ฝ”์ธ์„ ์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. cli/cli.go

blockchain/blockchain.goํŒŒ์ผ์„ ์—ด์–ด์„œ VerifyTransaction์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

blockchain/merkle.go

Merkle Tree๋Š” ํ•ด์‹œ๋“ค์˜ ํ•ด์‹œ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํ”„๋…ธ๋“œ(Leaf node)๋Š” ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์˜ ํ•ด์‹œ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ๋‘๊ฐœ์˜ ๋ฆฌํ”„๋…ธ๋“œ์˜ ํ•ด์‹œ๊ฐ’์„ ํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฃจํŠธ๋…ธ๋“œ๊นŒ์ง€ ๋งŒ๋“ค๊ณ  Merkle Tree๋Š” ์ด ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ํฌ์ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

blockchain/block.go

HashTransactions ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ์–ด ๋จธํดํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋ฃจํŠธ์˜ Hash๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Test

Send ์‹œ์— ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”์ธ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•˜์—ฌ 20์ฝ”์ธ์ด ๋” ์ฃผ์–ด์ง„๋‹ค.

printchain ์œผ๋กœ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๋ณด๋ฉด,

2๋ฒˆ์งธ ๋ธ”๋ก (ํ”„๋ฆฐํŠธ ์ƒ์—์„œ๋Š” ์œ„์—์„œ ์ฒซ๋ฒˆ์งธ)์— 2๊ฐœ์˜ transaction์ด ์ ํ˜€์žˆ๊ณ , ๊ทธ ์ค‘ ์ฒซ๋ฒˆ์งธ ํŠธ๋žœ์žญ์…˜์€ Coinbase ํŠธ๋žœ์žญ์…˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฏธ๊ตฌํ˜„ ์‚ฌํ•ญ

ํ’€ ๋…ธ๋“œ์™€ ๋ผ์ดํŠธ ๋…ธ๋“œ ๊ฐœ๋…์ด ์—†์ด, ์ผ๋‹จ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋“  ๋ธ”๋ก์ฒด์ธ ์ •๋ณด๋ฅผ ๋‹ค ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จธํดํŠธ๋ฆฌ์˜ ์žฅ์ ์€ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

Last updated: May 8, 2021

Last updated

Was this helpful?