ย
Merkle Mountain Ranges
MimbleWimble grin๊ณผ beam์ MMR์ transaction accumulator ๋ก ์ฌ์ฉํ๋ค.
ย
Merkle tree์์ ๋น๊ต
MMR๋ ์๋ฒฝํ๊ฒ ๊ท ํ์กํ ์ด์ง ํธ๋ฆฌ, root๊ฐ ํ๋๊ฐ ์๋
merkle tree ๋ ์๋ฒฝํ๊ฒ ๊ท ํ์กํ binary ํธ๋ฆฌ๊ฑฐ๋, ์ค๋ฅธ์ชฝ ์๋จ์์ ์๋ฆฐ(๋ ์งง์) single binary ํธ๋ฆฌ
ย
์์ชฝ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค, ์๋์ชฝ์ 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
๋ ์ฐ์ ์ฒซ๋ฒ์งธ ์ ๊ฑฐํ ๋ฆฌํ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.X
๋ฅผ Pruning ํ๋ค.
- ๋ง์ฝย
x
๊ฐ ํ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์ฌ๊ธฐ์ pruning์ ์ค๋จํ๋ค.
- 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
ย