#8 Merkle Tree
Storage size optimization
๋นํธ์ฝ์ธ์ ๋ชจ๋ ๋ธ๋ก์ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ํฐ space๊ฐ ํ์ํฉ๋๋ค. ๊ฒ์ฆ์ธ๋ค์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ ์ฅํ ํ์๊ฐ ์์ง๋ง, ๋นํธ์ฝ์ธ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋์ด ๋ชจ๋ ํธ๋์ญ์ ๋ฐ์ดํฐ(์๋ฐฑ GB)๋ฅผ ์ ์ฅํด์ผ ํ๋ค๋ฉด ์๋ฌด๋ ๋นํธ์ฝ์ธ ๊ฑฐ๋๋ฅผ ์ด์ฉํ์ง ์์ ๊ฒ ์ ๋๋ค.
๋นํธ์ฝ์ธ์ ์ด๋ฌํ ๋นํจ์จ์ฑ์ ์ค์ด๊ธฐ์ํด Merkle Tree๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉํฉ๋๋ค. ๋จธํดํธ๋ฆฌ์ ๋ํ ๊ฐ๋ ์ ๋งํฌ์์ ๋จผ์ ๊ณต๋ถํ์๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
๊ตฌํํ ๊ฒ
๋จธํดํธ๋ฆฌ์ ๊ตฌ์กฐ๋ ์๋ ์ํคํผ๋์์์ ๊ฐ์ ธ์จ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Leaf ๋ ธ๋๋ถํฐ ํด์๋ฅผ ๊ตฌํ๊ณ 2๊ฐ์ ํด์๋ฅผ ์ด์ด์ ๋ค์ ํด์๋ฅผ ๊ตฌํด ๋ถ๋ชจ๋ ธ๋๋ฅผ ๋ง๋ค์ด๊ฐ๋ ๊ตฌ์กฐ์ ๋๋ค. Leaf ๋ ธ๋๋ ์ง์๊ฐ ์กด์ฌํด์ผํฉ๋๋ค.
ํด์์ ํน์ฑ์ Leaf ์ค์ ํ๋์ ๋ฐ์ดํฐ(ํด์๊ฐ)๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ๋ฐ์ดํฐ์ ์ฐ๊ด๋ ๋ชจ๋ ๋ถ๋ชจ์ ํด์๊ฐ์ด ๋ฐ๋๋๋ค.

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 ํธ๋์ญ์ ์์ ์ ์ ์๋ค.
๋ฏธ๊ตฌํ ์ฌํญ
ํ ๋ ธ๋์ ๋ผ์ดํธ ๋ ธ๋ ๊ฐ๋ ์ด ์์ด, ์ผ๋จ ํ๋์ ๋ ธ๋๊ฐ ๋ชจ๋ ๋ธ๋ก์ฒด์ธ ์ ๋ณด๋ฅผ ๋ค ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋จธํดํธ๋ฆฌ์ ์ฅ์ ์ ํ์ฉํ์ง ๋ชปํ๋ ์ํฉ์ ๋๋ค.
์ฝ๋๋ https://github.com/siisee11/golang-blockchain ์ step8 ๋ธ๋์น์ ์์ต๋๋ค .
Last updated: May 8, 2021
Last updated
Was this helpful?