Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Merkle Sum Sparse Merkle Tree

Merkle Sum Sparse Merkle Tree

GBECの解説動画のスライドです。
https://goblockchain.network/2023/01/merkle-sum-sparse-merkle-tree/

shigeyuki azuchi

January 25, 2023
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 Sparse Merkle Tree
 Key/Value形式のデータエンコードするマークルツリー 
 ・・・ Key
 Keyの値からツリー内の 


    エントリーの位置が特定できるツリー 
 TaroではKeyは256 bit
 Keyをビット列にし、
 • 0であれば左の子ノード 
 • 1であれば右の子ノード 
 と順にツリーを下っていく 
 空のリーフノードの値を決めておくことで、
 エントリーが空であることを空のリーフまでの
 マークルプルーフを提供することで証明できる

  2. 2 Merkle Sum Tree
 H(H(H(A) || H(B)) || H(H(C) ||

    H(D))) 
 H(H(A) || H(B))
 H(A)
 H(B)
 H(H(C) || H(D))
 H(C)
 H(D)
 一般的なマークルツリーは、 
 左右の子ノードのハッシュ値を連結しハッシュ値を計算し、 
 それを親ノードのハッシュ値とする 
 H(H(H(A) || H(B)) || H(H(C) || H(D)) || 80 + 82) 
 H(H(A) || H(B) || 50 + 30) 
 H(A), 50
 H(B), 30
 H(H(C) || H(D) || 15 + 67) 
 H(C), 15
 H(D), 67
 Merkle Sum Treeは、各ノードが子ノードの数値の合計に 
 コミットする。
 
 親ノードのハッシュ値は、 
 • 左右の子ノードのハッシュ値 
 • 左右の子ノードの数値の合算値 
 を連結したハッシュ値 

  3. 3 Merkle Sum Sparse Merkle Tree
 Sparse Merkle Tree とMerkle

    Sum Treeを組み合わせたマークルツリー 
 Taroでは2階層のMerkle Sum Sparse Merkle Tree を使用
 https://github.com/Roasbeef/bips/blob/bip-taro/bip-taro-ms-smt.mediawiki 
 Asset Tree Root
 256 ・・・ Asset ID Tree Root
 ・・・ Asset ID
 Asset Script Key
 • 1階層めのツリーは、アセットIDをキーに対象アセットの 
 エントリーを格納
 • このツリーの全アセットの量にコミット 
 Leaf:H(Taro version || Asset ID Tree Root || Asset Sum)
 • 2階層めのツリーは対象アセットについて、
 各ユーザー(アカウント)が保持する
 アセットの量をコミット
 Leaf:H(Asset Leaf || Asset Sum)
 ※ Asset Leaf=アセットに関するTLVレコード
 256 2256個のリーフノード