前回に引き続きSSZ(Simple Serialize)について解説する。今回はSSZのMerkleizationについてまとめる。
前回の記事はこちら。
y-nakajo.hatenablog.com
Merkleizationについては、引き続きSSZの仕様を参考にした。
github.com
概要
Eth1.0ではPatricia Merkle Trieを採用していたが、sszではよりシンプルにするために、Binary Merkle Treeを採用した。
さらにhashアルゴリズムもより汎用性を高めるためにkeccak256ではなく、広く利用されているsha256を採用した。
また、SSZではSchema構造を維持したままMerkleizeされる。これにより、Schemaの一部のデータのみをProofと共に共有することが可能となっている。
例えば次に示すDepositDataスキーマをMerkleizeする場合は、下図のtreeが構成され、root hashが求まる。
class DepositData(Container):
pubkey: BLSPubkey
withdrawal_credentials: Bytes32
amount: Gwei
signature: BLSSignature
以降、Merkleization方法の各ステップを詳しく解説する。
- 概要
- 基本の処理の流れ
- Basic Typeの場合
- Vector[B, N]
- List[B, N]
- Bitvector[N]
- Bitlist[N]
- Union
- Vector[Composit Type, N]
- List[Composit Type, N]
- Container
続きを読む