MMR(merkle mountain ranges)

MMR(merkle mountain ranges)

ย 
Merkle Mountain Ranges
MimbleWimble grin๊ณผ beam์€ MMR์„ transaction accumulator ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
ย 
Merkle tree์™€์˜ ๋น„๊ต
MMR๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๊ท ํ˜•์žกํžŒ ์ด์ง„ ํŠธ๋ฆฌ, root๊ฐ€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹˜
merkle tree ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๊ท ํ˜•์žกํžŒ binary ํŠธ๋ฆฌ๊ฑฐ๋‚˜, ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์—์„œ ์ž˜๋ฆฐ(๋” ์งง์€) single binary ํŠธ๋ฆฌ
ย 
notion image
notion image
์œ„์ชฝ์€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค, ์•„๋ž˜์ชฝ์€ height ์„ ๋‚˜ํƒ€๋ƒ„
11๊ฐœ์˜ leaf์™€ ์ด 19๊ฐœ range โ†’ 19ํฌ๊ธฐ์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๊ฐ€๋Šฅ
๋น ๋ฅธ binary operation์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— MMR ๋‚ด์—์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋„ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
๋…ธ๋“œ์˜ ์œ„์น˜๊ฐ€ n์ด๋ผ๋ฉด ์ด MMR์˜ ๋†’์ด, ๋ถ€๋ชจ์˜ ์œ„์น˜, ํ˜•์ œ ๋“ฑ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
*Blacke2b๋Š” grin์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•ด์‹œํ•จ์ˆ˜
grin์€ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์‹ฑํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹MMR์— ์ถ”๊ฐ€ํ•จ
๋ฐ์ดํ„ฐ D๋ฅผ ์ €์žฅํ•˜๋Š” ์ธ๋ฑ์Šค โ€‹n ์— ๋ฆฌํ”„๋…ธ๋“œ l์ด ์žˆ๋Š” ๊ฒฝ์šฐ :
Node(l) = Blake2b(n | D)
โ†’ ์œ„์˜ MMR์—์„œ ๋ฆฌํ”„๋…ธ๋“œ I๊ฐ€ ๋ฐ์ดํ„ฐ D๋ฅผ ์ €์žฅํ•˜๊ณ , ์ธ๋ฑ์Šค 3์— ์œ„์น˜ํ•œ๋‹ค๋ฉด,
Node(I) = Blake2b(3| D)
ย 
ย 
์ธ๋ฑ์Šค m์—์„œ ์–ด๋–ค ๋ถ€๋ชจ๋…ธ๋“œ p :
Node(p) = Blake2b(m | Node(left_child(p)) | Node(right_child(p)))
โ†’ ๋ถ€๋ชจ๋…ธ๋“œ p๊ฐ€ ์ธ๋ฑ์Šค 5์— ์œ„์น˜ํ•œ๋‹ค๋ฉด,
Node(p) = Blake2b(5 | Node(left_child(p)) | Node(right_child(p))),
Node(left_child(p)) = Blake2b(3 | Dl),
Node(left_child(p)) = Blake2b(4 | Dr)
(Dl: left_child(p)์˜ ์ €์žฅ ๋ฐ์ดํ„ฐ, Dr: right_child(p)์˜ ์ €์žฅ ๋ฐ์ดํ„ฐ)
ย 
Bagging the peaks(final top peak๊ตฌํ•˜๊ธฐ)
Height 2 111 / \ 1 11 110 1010 / \ / \ / \ 0 1 10 100 101 1000 1001 1011
ํ•˜๋‚˜์˜ MMR์ด๋‹ค.
์ธ๋ฑ์Šค๊ฐ€ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„, 1๋ถ€ํ„ฐ ์‹œ์ž‘
ย 
๊ฐ€์žฅ ์™ผ์ชฝ ์ฒซ๋ฒˆ์งธ ํ”ผํฌ๊ฐ€ ํ•ญ์ƒ ๊ฐ€์žฅ (์œ„์น˜๊ฐ€) ๋†’๊ณ  ์ธ๋ฑ์Šค์˜ ์ž๋ฆฌ๊ฐ’์ด ํ•ญ์ƒ "๋ชจ๋‘ 1"์ด ๋˜๋Š” ๊ฒƒ์— ์ฃผ๋ชฉ
โ†’ ์—ฌ๊ธฐ์„œ 111, 11, 1
์ด ํ”ผํฌ๋Š” 2^n - 1 ํ˜•ํƒœ์˜ ์œ„์น˜.(n:๋†’์ด)
โ†’ 111= 7(2^3-1) ์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ง, 11์€ 3, 1์€ 1
ํ•ญ์ƒ MMR ๋‚ด๋ถ€์—์žˆ๋Š” ๊ฐ€์žฅ ๋†’์€ ์œ„์น˜๊ฐ€ ๋œ๋‹ค.
โ†’ ํ˜„์žฌ 111๋ผ๋Š” ์œ„์น˜๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋Š” ํŠธ๋ฆฌ์— ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋˜์–ด๋„, 1111์ด๋‚˜ 11 ๋“ฑ์— ์œ„์น˜ํ• ๊ฒƒ์ด๋‹ค.?
๋˜ํ•œ ๊ทธ ์œ„์น˜๋Š” ์ „์ฒด ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๋‹ค.
โ†’ 7(111) < 11(์ „์ฒดํฌ๊ธฐ)
MMR์˜ ์ตœ๊ณ  ๋†’์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ์œ„ํ•ด
๊ฐ€์žฅ ์™ผ์ชฝ ์ฒซ๋ฒˆ์งธ ํ”ผํฌ(111, 11, 1)์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ๊ฐ™์ด ์ฒ˜๋ฆฌํ•จ
2^0 - 1 = 0, and 0 < 11(์ „์ฒดํฌ๊ธฐ) 2^1 - 1 = 1, and 1 < 11 2^2 - 1 = 3, and 3 < 11 2^3 - 1 = 7(=111), and 7 < 11 2^4 - 1 = 15, and 15 is not < 11
๋”ฐ๋ผ์„œ ์ตœ๊ณ ๋†’์ด๋Š” 3
๋†’์ด 1,2,3์ธ ๊ฐ peak์ด ์žˆ์„๊ฒƒ์ด๋ฏ€๋กœ
๋”ฐ๋ผ์„œ ํฌ๊ธฐ 11์ธ MMR์€ 3๊ฐœ์˜ peak์„ ๊ฐ€์ง
ย 
p1,p2,p3์ผ๋•Œ
p1=7์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ํ”ผํฌ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ์˜ค๋ฅธ์ชฝ ํ˜•์ œ์—๊ฒŒ "์ ํ”„" ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(์•„๋งˆ, ๊ทธ ๋‹ค์Œ ํ”ผํฌ๋Š” ํ˜„์žฌํ”ผํฌ์˜ ๋†’์ด-1 ์— ์žˆ์œผ๋ฏ€๋กœ ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๋“ฏ)
ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ MMR์— ์—†๋‹ค๋ฉด ์™ผ์ชฝ ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
(์ฒซ๋ฒˆ์งธ MMR์˜ˆ์ œ์—์„œ ์ธ๋ฑ์Šค14๋…ธ๋“œ๋Š” ์˜ค๋ฅธ์ชฝ ํ˜•์ œ๋ฅผ ๊ฐ–๊ณ ์žˆ์ง€์•Š์•„ ๋Œ€์‹  ์ธ๋ฑ์Šค13์—๊ฒŒ)
๋งŒ์•ฝ ๊ทธ ํ•˜์œ„๋…ธ๋“œ๋„ MMR์— ์—†์œผ๋ฉด, MMR์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๊นŒ์ง€ ์™ผ์ชฝ์— ์žˆ๋Š” ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ณ„์† ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
๋‹ค์Œ ํ”ผํฌ๋ฅผ ์ฐพ์œผ๋ฉด ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ๋„๋‹ฌ ํ•  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ชจ๋“  ์˜คํผ๋ ˆ์ด์…˜์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋†’์ด h์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ํ˜•์ œ๋กœ ์ ํ”„ํ•˜๋Š” ๊ฒƒ์€ 2^(h + 1)-1๋งŒํผ์„ ๋†’์ด h์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™ผ์ชฝ ํ˜•์ œ๋ฅผ ๊ฐ€์ ธ ๊ฐ€๋ฉด 2^h๋งŒํผ ๊ฐ’์„ ๋บ๋‹ˆ๋‹ค.
โ†’ p1์˜ ๋†’์ด๋Š” 3์ด๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝํ˜•์ œ์—๊ฒŒ ๊ฐ€๊ธฐ์œ„ํ•ด์„œ 2^(3+1)-1 = 15 ๊ฐœ ๋ฅผ ์ถ”๊ฐ€?
์™ผ์ชฝ sibling์€ 2^3 =8๊ฐœ ๋บŒ? (๋‹ค์‹œํ™•์ธ)
ย 
๋ชจ๋“  peak์„ ์•Œ๊ฒŒ๋˜๋ฉด ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” peak๋ถ€ํ„ฐ
์ฐจ๋ก€๋กœ ํ•ด์‹ฑ, final top peak(P)์–ป๊ฒŒ๋จ
P = Blake2b(N | Blake2b(N | Node(p3) | Node(p2)) | Node(p1))
ย 
Pruning-mimblewimble
์ถฉ๋ถ„ํ•œ ๋ฆฌํ”„๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด ๋ถ€๋ชจ์˜ ์กด์žฌ๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๊ทธ ๋ฆฌํ”„๋“ค์˜ ์‚ญ์ œ๋กœ ์ธํ•ด MMR์˜ ์ƒ๋‹น ๋ถ€๋ถ„์„ pruning ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
MMR์˜ pruning์€ ๊ฐ„๋‹จํ•œ ๋ฐ˜๋ณต ํ”„๋กœ์„ธ์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.ย X๋Š” ์šฐ์„  ์ฒซ๋ฒˆ์งธ ์ œ๊ฑฐํ•  ๋ฆฌํ”„๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
  1. X๋ฅผ Pruning ํ•œ๋‹ค.
  1. ๋งŒ์•ฝย x๊ฐ€ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ pruning์„ ์ค‘๋‹จํ•œ๋‹ค.
  1. If x have not sibling, X=parent(X)
(๋งŒ์•ฝย X๊ฐ€ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋ฉดย X์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š”ย X๋ผ๊ณ  ๋ฐฐ์ •๋œ๋‹ค.)
ย 
Height 3 14 / \ / \ / \ / \ 2 6 13 / \ / \ 1 2 5 9 12 17 / \ / \ / \ / \ / \ 0 0 1 3 4 7 8 10 11 15 16 18
์ฒซ ๋ฒˆ์งธ MMR ์˜ˆ์‹œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ฆฌํ”„[0, 3, 4, 8, 16]์„ ์ œ๊ฑฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ pruning MMR์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
Height 3 14 / \ / \ / \ / \ 2 6 13 / / \ 1 2 9 12 17 \ / / \ / 0 1 7 10 11 15 18
0์ œ๊ฑฐ: 0์€ ํ˜•์ œ๋…ธ๋“œ1์ด ์žˆ์–ด 0๋งŒ ํ”„๋ฃจ๋‹ํ›„ ์ค‘๋‹จ
3,4์ œ๊ฑฐ+5์ œ๊ฑฐ: 3์€ ํ˜•์ œ๋…ธ๋“œ4๊ฐ€ ์žˆ์œผ๋‚˜ 3๋งŒ ํ”„๋ฃจ๋‹ ํ›„ ์ค‘๋‹จ. 4๋„ ํ”„๋ฃจ๋‹ ๋Œ€์ƒ์ด๋ฏ€๋กœ ํ”„๋ฃจ๋‹ ํ–ˆ๋”๋‹ˆ, ๋‘˜์˜ ๋ถ€๋ชจ๋…ธ๋“œ์˜€๋˜ 5๋Š” ๋”์ด์ƒ ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ 5๋„ ์ œ๊ฑฐ.
8์ œ๊ฑฐ: 8์€ ํ˜•์ œ๋…ธ๋“œ7์ด ์žˆ์–ด 8๋งŒ ํ”„๋ฃจ๋‹ํ›„ ์ค‘๋‹จ
16์ œ๊ฑฐ: 16์€ ํ˜•์ œ๋…ธ๋“œ15๊ฐ€ ์žˆ์–ด 16๋งŒ ํ”„๋ฃจ๋‹ํ›„ ์ค‘๋‹จ
ย 
๋‹ค์Œ์€ ๋…ธ๋“œ๊ฐ€ ์ ์ฐจ ์ถ”๊ฐ€๋ ๋•Œ๋ฅผ ๋‚˜ํƒ€๋ƒ„
๊ฐ ๊ฐ’์€ ๋†’์ด๋ฅผ ์˜๋ฏธ(0๋ถ€ํ„ฐ)
0 00 001 <- indexes 0 and 1 are hashed to form index 2 0010 0010012 <- another tree, which leads to the two subtrees being merged (height 2) 00100120 0010012001 <- now we have two trees, one of height 2, one of height 1
๋งˆ์ง€๋ง‰ 0010012001์€
๋‹ค์Œ๊ณผ ๊ฐ™์€ MMR์ด๋‹ค
/\ /\/\/\
log2(n)
ย 
ย 
ํ˜„์žฌ ์ด๋”๋ฆฌ์›€์€ Patricia-Merkle trie accumulator๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒํƒœ ์ด์™ธ์˜ ์ •๋ณด๋Š” transaction์—์„œ ์ฝ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ stateless client model์—์„œ๋Š” history (receipt ๊ฐ™์€ ์ฝ๊ธฐ์ „์šฉ ํ˜น์€ contract code) ์ „์šฉ accumulator๋ฅผ ๋”ํ•œ dual accumulator VM ๋ฐฉ์‹์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. transaction sender๊ฐ€ off-chain ๊ณ„์‚ฐํ•˜์—ฌ history๋ฅผ ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— history ์ ‘๊ทผ์ด ์ƒํƒœ ๋ณด๋‹ค ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋ž˜์„œ contract๊ฐ€ storage ๋Œ€์‹  history๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค. history-driven application์€ SNARK(STARK)๋‚˜ TrueBit์„ ์‚ฌ์šฉํ•˜์—ฌ history์˜ ํ•ด์‹œ ํ˜น์€ ์ž„์‹œ ์ƒํƒœ๋งŒ storage์— ์ €์žฅํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 

MMR์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•œ ๊ธ€๋“ค(์ฝ์–ด๋ณด๊ธฐ)

Fly client, MMR
ย 
๊ด€์‹ฌ ์ฃผ์ œ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ธ€์„ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.