JAR: Join-Accumulate Refine

17.2. State Trie🔗

The trie uses fixed-length bit-string keys: 31-byte keys (248 bits) for state commitment and 32-byte keys for work-report Merkle roots.

🔗def
Jar.Merkle.trieRoot (entries : Array (OctetSeq 31 × ByteArray)) : Hash
Jar.Merkle.trieRoot (entries : Array (OctetSeq 31 × ByteArray)) : Hash

M(d) : Compute Merkle trie root from key-value pairs. GP Appendix D. Keys are 31-byte OctetSeqs. Returns ℍ_0 for empty.

🔗def
Jar.Merkle.trieRoot32 (entries : Array (ByteArray × ByteArray)) : Hash
Jar.Merkle.trieRoot32 (entries : Array (ByteArray × ByteArray)) : Hash

Compute Merkle trie root from key-value pairs with 32-byte keys. Keys are 32 bytes for splitting; leaf encoding truncates to 31 bytes. Returns ℍ_0 for empty.

🔗def
Jar.Merkle.stateRoot (entries : Array (OctetSeq 31 × ByteArray)) : Hash
Jar.Merkle.stateRoot (entries : Array (OctetSeq 31 × ByteArray)) : Hash

M_σ(σ) : Compute the state Merkle root. GP Appendix D eq (D.2). Delegates to the trie root computation on state key-value pairs.