Merklix

Merklix

ย 
bitcoinABC(bitcoinCache)
Merkle tree๋ฅผ Merklix-metadata ํŠธ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ• ๊ฒƒ์ด๋‹ค.
Merkle ํŠธ๋ฆฌ์™€ radix(patricia) ํŠธ๋ฆฌ์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•˜์—ฌ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ.
MerkleํŠธ๋ฆฌ์™€ bitwise trie์˜ ๊ฒฐํ•ฉ
embarrassingly parallel์„ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Bitcoin์˜ ๊ธฐ์กด ์‘์šฉ ํ™˜๊ฒฝ๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์ตœ๋Œ€ํ•œ ๋ณด์กด
ํ˜„์žฌ ๋น„ํŠธ์ฝ”์ธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” balanced merkle tree๋Š” ๋ณ‘ํ–‰ ์‚ฝ์ž…์— ์ ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ธ”๋ก์ด ์ปค์งˆ์ˆ˜๋ก ํ™•์žฅ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ
ย 
merklix tree์˜ ์ •ํ™•์„ฑ์€ ๋ธ”๋ก์ฒด์ธ ํ”„๋กœํ† ์ฝœ์˜ ์™„์ „ํ•œ ํŠธ๋žœ์žญ์…˜ ์ˆœ์„œ์— ์˜์กดํ•จ. canonical transaction ordering rule์ด ํ•„์š”.
์‚ฝ์ž…,์ œ๊ฑฐ,๋ณ‘ํ•ฉ ๋“ฑ์„ embarrassingly parallel๋กœ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ(๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ž„์˜์˜ ์ ‘๋‘์‚ฌ ๋ฒ”์œ„์— ๋Œ€ํ•ด ๋ถ„ํ•  ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—)
Merklix ํŠธ๋ฆฌ๋Š” ๋ธ”๋ก์— n ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด์žˆ์„ ๊ฒฝ์šฐ O (ln2(n))์˜ ์ ๊ทผ์  ๋ณต์žก์„ฑ์œผ๋กœ ์‚ฝ์ž… ๋ฐ ์ œ๊ฑฐ์— ์ตœ์ ์˜ ์ ๊ทผ์  ๊ฒฝ๊ณ„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ƒ์ˆ˜๋„ ๋งค์šฐ ๋‚ฎ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ
ย 
Merkle tree์˜ ์—ญ์‚ฌ์ ์ธ ์„ค๊ณ„ ๊ฒฐํ•จ์„ ์ œ๊ฑฐ, ๋นˆ ๋ธŒ๋žœ์น˜์˜ edge case๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐ
๊ท ํ˜•ํŠธ๋ฆฌ๋ฐ”์ด๋„ˆ๋ฆฌ ํŠธ๋ฆฌํ˜•ํƒœ์˜ ๋จธํด ํŠธ๋ฆฌ์—์„œ ํŠธ๋žœ์žญ์…˜์€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ถ”๊ฐ€ ๋˜๋ฉฐ ์˜ค๋ฅธ์ชฝ์— ๋นˆ branch๋‚˜ leaf๋ฅผ ํฌํ•จํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.
์ตœ์ ์ผ๋•Œ ์‚ฝ์ž…์— O(ln2(n))์˜ ์ ๊ทผ์  ์„ฑ๋Šฅ์„ ์ œ๊ณตํ–ˆ์—ˆ์Œ. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์„ ๊ณ ๋ คํ•˜๋ฉด ์ด ์„ฑ๋Šฅ์€ ์ˆœ์ฐจ์ ์ธ ์ถ”๊ฐ€ ์‚ฝ์ž…์„ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
๋จธํดํŠธ๋ฆฌ์™€ radixํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋งŽ์€ ๋ณ€์ข…์ด ์žˆ์–ด์™”๋‹ค.
๋ธ”๋ก ํ•ด์‹ฑ๋กœ์ง๋งŒ ๋ณ€๊ฒฝ
Merklix ํŠธ๋ฆฌ๋Š” ์ฒด์ธ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•ด ํ™œ์šฉ ๋  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์†Œํ˜• ๊ต์ •๋ณธ์„ ๋ณด์กดํ•˜๋ฉด์„œ ์ตœ์†Œํ•œ์˜ ๊ณ„์‚ฐ ์˜ค๋ฒ„ ํ—ค๋“œ๋กœ ๋ธ”๋ก ๋‚ด์—์„œ ๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
ย 
๊ทผ๋ณธ์ ์œผ๋กœ์ด ์•„์ด๋””์–ด๋Š” ํ‚ค์˜ ๋น„ํŠธ๋ฅผ ์ ‘๋‘์–ด๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํŠธ๋ฆฌ๋ฅผ ๋น„ํŠธ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด ์ ‘๊ทผ๋ฒ•์€ ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ์•Œ๋ ค์ ธ ์™”๋˜ X-fast trie์˜ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ ๋•Œ๋ฌธ์— ์ด์ต์„ ๊ฐ€์ ธ๋‹ค์ค€๋‹ค.
๋‹ค์Œ ์Šคํ‚ค๋งˆ๋Š” ๋น„ํŠธ ํŠธ๋ผ์ด๊ฐ€ 6 ๋ฐ”์ดํŠธ ๊ธธ์ด์˜ 6 ๊ฐœ ๊ฐ’ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹์„ ๋ณด์—ฌ์ค€๋‹ค.
ย 
ํŠน์„ฑ
  • 0๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์ž์‹์—๋งŒ ์˜ฌ์ˆ˜์žˆ๊ณ , 1๋…ธ๋“œ๋Š” ์˜ค๋ฅธ์ชฝ ์ž์‹์—๋งŒ ์˜ฌ์ˆ˜ ์žˆ๋‹ค.
notion image
  • ์žŽ์€ ๋นˆ ์žŽ์ด์—†๋Š” ์ง‘ํ•ฉ์˜ ๊ฐ’์„ ์ •ํ™•ํ•˜๊ฒŒ ํฌํ•จ
  • ์žŽ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋Š” ์žŽ์— ํฌํ•จ ๋œ ๊ฐ’์˜ ๋น„ํŠธ prefix
ย 
pseudocode
// T: set of transactions // k: index of the bit used for partitioning MerklixHash(T,k) { match (T) with | { t } => SHA256(t) // single transaction | (T0,T1) where { t โˆˆ T0 : t[k] == 0 } and { t โˆˆ T1 : t[k] == 1 } => match (T0,T1) with | (_,ร˜) => MerklixHash(T0,k+1) | (ร˜,_) => MerklixHash(T1,k+1) | _ => SHA256(MerklixHash(T0,k+1)::MerklixHash(T1,k+1)) } // Root start at bit index zero MerklixHashRoot(T) => MerklixHash(T, 0)
T: ํŠธ๋žœ์žญ์…˜์ง‘ํ•ฉ
k: ํŠธ๋žœ์žญ์…˜ id์˜ k๋ฒˆ์งธ bit
t : ํŠธ๋žœ์žญ์…˜
ย 
T์— t๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ sha256๊ณ„์‚ฐ
ํŠธ๋žœ์žญ์…˜t์˜ id์˜ k๋ฒˆ์งธ bit๊ฐ€ t[k]๋กœ ํ‘œํ˜„
operator::๋Š” byte-wise concatenation.
SHA256์€ Bitcoin์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด์ค‘ sha-256
๋ธ”๋ก ๋ ˆ๋ฒจ์—์„œ ๋จธํดํŠธ๋ฆฌ๋ฅผ ๋ณด์กด Merkle ํŠธ๋ฆฌ์˜ ํ”„๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ธ”๋ก์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ธฐ์กด ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชจ๋“  ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.
ย 
์ด์ง„ํŠธ๋ฆฌ ํŠน์ง•
  • ๋†’์ด๊ฐ€ย h์ธย ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ(full binary tree)๋Š”ย `2^h`โˆ’1๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค
  • ๋…ธ๋“œ๊ฐ€ย N๊ฐœ์ธย ํฌํ™”(full) ํ˜น์€ย ์™„์ „(complete) ์ด์ง„ ํŠธ๋ฆฌ์˜ย ๋†’์ด๋Š”ย logN์ด๋‹ค.
    • O(logN)
  • ํ•œ์ชฝ์œผ๋กœ ์ ๋ฆฐ๊ฒฝ์šฐ ์ตœ์•…์€ ๋†’์ด N
ย 
bitwise trie๋Š” ์ผ๋ฐ˜ ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฏ€๋กœ Merkle ํ•ด์‹ฑ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ, ๋น„ํŠธ ํŠธ๋ผ์ด์™€ ์—ฐ๊ด€๋œ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋จ์— ๋”ฐ๋ผ (์ฆ‰, ๋นˆ ๋ฆฌํ”„๊ฐ€ ์—†์Œ), ๋นˆ ๋ฆฌํ”„ ์—์ง€ ์ผ€์ด์Šค์— ๋Œ€์ฒ˜ํ•  ํ•„์š”๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋œ๋‹ค. ์ด ์†์„ฑ์€ Bitcoin ์•ฑ์˜ ๊ตฌํ˜„์„ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.
ย 
๋จธํด๋ฆญ์Šค ํŠธ๋ฆฌ์˜ ์‚ฝ์ž…์€ O(ln2(n))
๋Ÿฌ๋‚˜ Bitcoin์˜ ๋งฅ๋ฝ์—์„œ ๋ณผ ๋•Œ ํ‚ค๋Š” SHA-256 ํ•ด์‹œ์ด๋ฏ€๋กœ ํ‚ค์˜ ๋ณธ์„ฑ์œผ๋กœ ์ธํ•ด ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ๋น„์Œ‰๋‹ˆ๋‹ค. ๊นŠ์ด 256์˜ ๋ถˆ๊ท ํ˜• ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ SHA-256์„ ๊นจ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Bitcoin ์ปจํ…์ŠคํŠธ์—์„œ ๋น„ํŠธ ํŠธ๋ผ์ด์˜ ๊นŠ์ด๋Š” 256์—์„œ ์ƒํ•œ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ”์ธ๋”ฉ์€ ์‹ค์ œ๋กœ๋Š” ํ›จ์”ฌ ๋‚ฎ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
ย 
ย 
notion image
ย 
๋‘๋ฒˆ์งธ paper subtree
๋‘๋ฒˆ์งธ paper subtree
๋กœ์ปฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ƒค๋”ฉ(UTXO๋ฅผ ๋ถ„ํ• )
4๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋Š” ๋ธ”๋ก, txA < txB ์™€๊ฐ™์€ ์ˆœ์œผ๋กœ ์‚ฌ์ „์‹ ์ •๋ ฌ(์™ผโ†’์˜ค)
๋‘๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•˜๊ณ , ์„œ๋ธŒํŠธ๋ฆฌ B์™€ C์˜ ํ•ด์‹œ๋ฅผ ๊ฐ๊ฐ ๊ณ„์‚ฐ
์ด๋Ÿฐ ๊ณ„์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ง‘์•ฝํ•ด ์„œ๋ธŒํŠธ๋ฆฌ A๋ฅผ ์ƒ์„ฑ
์ฝ”์ธ๋ฒ ์ด์Šค ํ•ด์‹œ์™€ ๊ฒฐํ•ฉ๋˜์–ด ๋จธํด๋ฆญ์Šค ๋ฃจํŠธ ์ƒ์„ฑ
๊ฐ ๋ฆฌํ”„๋…ธ๋“œ์— tx ํ•ด์‹œ ์กด์žฌ
(์ƒค๋“œ๋œ ์‹œ์Šคํ…œ์ด๋”๋ผ๋„ ๋™๊ธฐํ™” ์—†์ด๋Š” ์„œ๋ธŒํŠธ๋ฆฌ ํ•ด์‹œ๋ฅผ ์‚ฌ์ „๊ณ„์‚ฐํ• ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐœ๋ณ„ ์‚ฌ๋“œ์— ์˜ํ•ด ๊ณ„์‚ฐ๋ ์ˆ˜ ์žˆ๋Š” ํ•˜์œ„ํŠธ๋ฆฌํ•ด์‹œ์˜ ์ง‘๊ณ„๋กœ ๊ณ„์‚ฐ๋˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผํ•จ)
CTOR ํ•ด์‹œ๋กœ ์ˆœ์„œ๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๋Š” ๊ฒƒ์˜ ๋˜๋‹ค๋ฅธ ์œ ์šฉํ•œํŠน์„ฑ์€, mempool์˜ ์ˆ˜์šฉ์ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ถ„ํ•  ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜ ๋ผ์šฐํ„ฐ๋ฅผ ์—ฌ๋Ÿฌmempoolํ”„๋กœ์„ธ์„œ ์•ž์— ๋ฐฐ์น˜ํ•˜์—ฌ ์ˆ˜ํ–‰ ํ• ์ˆ˜ ์žˆ๋‹ค.
์ด ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ผ์šฐํ„ฐ 1๊ณผ ๋ผ์šฐํ„ฐ 2๋Š” ์ด์ „์— ํ•ฉ์˜ํ•œ mempool ์ˆ˜๋ฝ ์ž์—๊ฒŒ ๋™์ผํ•œ ๋ฒ”์œ„ ๋‚ด์—์„œ ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ mempool acceptor๋Š” ์„œ๋กœ ๋ฐ UTXO ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜์—ฌ ์ƒ์œ„ ํŠธ๋žœ์žญ์…˜์ด ์กด์žฌํ•˜๊ณ  ์†Œ๋น„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค์— ๊ฑธ์ณ mempool์„ ๋ถ„ํ• ํ•˜๋ฉด API ์š”์ฒญ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋‹ค์–‘ํ•œ Merkle ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ํ•ด์‹œ๋ฅผ ์ฟผ๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค.ย ๊ทธ๋ฆผ (1)์—์„œ Subtree B์™€ Subtree C๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Merkle ๋ฃจํŠธ๋กœ ๊ณ„์† ์ง‘๊ณ„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
notion image
ย 

references

ย 
ย 
ย 
https://okky.kr/article/464145 โ†’ ๋Œ“๊ธ€๋„๋ณด๊ธฐ ์ƒํƒœ์ „์ด
๊ด€์‹ฌ ์ฃผ์ œ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ธ€์„ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.