ゴミクズがスタートアップするブログ

日常に飲まれないためのサードプレイス

Merkle Proofのデータ構造ってどうなってるの

ノリで Tesuji Plasma を読んで

ノリで yosriady/merkle_tree を読んで

ノリで MerkleProofがなんで動くのか調べ

んでElixerがオンラインで動くエディタを見つけたのでいろいろ遊んでたらembedできることがわかったのでとりあえず貼っておく

 

Solidityで書かれてるMerkle.solだと

proven? がcheckProof()にあたる

proof 自体のデータ構造は 32バイトがconcatされたもので、Elixer実装ではbyteArrayを内包したオブジェクト的なもの(Elixerにオブジェクトはなさそう)として表現されているので、Solidityにパスするときはいい感じにserializeしてあげないといかんぽい

Solidity Assembly触るモチベが出てきた

 

 

P.S. proofを作るインターフェース、ミニマルに必要なのはtreeとindex: int.

treeのdepthに依存してindexのbinary indexは異なるので整数で渡すべき 

実装によってはleafleaf_hashを食って内部的にindexを出したり責務がマチマチだがよしなに

plasma-contracts/fixed_merkle.py at aceca7a8872c2cffe72810c560d4b188c4867904 · omisego/plasma-contracts · GitHub