$30 off During Our Annual Pro Sale. View Details »

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. Merkle Sum Sparse Merkle Tree

    (Taro Protocol)


    View Slide

  2. 1
    Sparse Merkle Tree

    Key/Value形式のデータエンコードするマークルツリー

    ・・・
    Key

    Keyの値からツリー内の 

    エントリーの位置が特定できるツリー 

    TaroではKeyは256 bit

    Keyをビット列にし、

    ● 0であれば左の子ノード 

    ● 1であれば右の子ノード 

    と順にツリーを下っていく 

    空のリーフノードの値を決めておくことで、

    エントリーが空であることを空のリーフまでの

    マークルプルーフを提供することで証明できる


    View Slide

  3. 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は、各ノードが子ノードの数値の合計に 

    コミットする。


    親ノードのハッシュ値は、 

    ● 左右の子ノードのハッシュ値 

    ● 左右の子ノードの数値の合算値 

    を連結したハッシュ値 


    View Slide

  4. 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個のリーフノード


    View Slide