2022-09-18 09:45:31 -07:00
|
|
|
global mpt_hash:
|
2022-09-30 13:04:16 -07:00
|
|
|
// stack: node_ptr, retdest
|
|
|
|
|
DUP1
|
|
|
|
|
%mload_trie_data
|
|
|
|
|
// stack: node_type, node_ptr, retdest
|
|
|
|
|
// Increment node_ptr, so it points to the node payload instead of its type.
|
|
|
|
|
SWAP1 %add_const(1) SWAP1
|
|
|
|
|
// stack: node_type, node_payload_ptr, retdest
|
|
|
|
|
|
|
|
|
|
DUP1 %eq_const(@MPT_NODE_EMPTY) %jumpi(mpt_hash_empty)
|
|
|
|
|
DUP1 %eq_const(@MPT_NODE_HASH) %jumpi(mpt_hash_hash)
|
|
|
|
|
DUP1 %eq_const(@MPT_NODE_BRANCH) %jumpi(mpt_hash_branch)
|
|
|
|
|
DUP1 %eq_const(@MPT_NODE_EXTENSION) %jumpi(mpt_hash_extension)
|
|
|
|
|
DUP1 %eq_const(@MPT_NODE_LEAF) %jumpi(mpt_hash_leaf)
|
|
|
|
|
PANIC // Invalid node type? Shouldn't get here.
|
|
|
|
|
|
|
|
|
|
mpt_hash_empty:
|
|
|
|
|
%stack (node_type, node_payload_ptr, retdest) -> (retdest, @EMPTY_NODE_HASH)
|
|
|
|
|
JUMP
|
|
|
|
|
|
|
|
|
|
mpt_hash_hash:
|
|
|
|
|
// stack: node_type, node_payload_ptr, retdest
|
|
|
|
|
POP
|
|
|
|
|
// stack: node_payload_ptr, retdest
|
|
|
|
|
%mload_trie_data
|
|
|
|
|
// stack: hash, retdest
|
|
|
|
|
SWAP1
|
|
|
|
|
JUMP
|
|
|
|
|
|
|
|
|
|
mpt_hash_branch:
|
|
|
|
|
// stack: node_type, node_payload_ptr, retdest
|
|
|
|
|
POP
|
|
|
|
|
// stack: node_payload_ptr, retdest
|
|
|
|
|
PANIC // TODO
|
|
|
|
|
|
|
|
|
|
mpt_hash_extension:
|
|
|
|
|
// stack: node_type, node_payload_ptr, retdest
|
|
|
|
|
POP
|
|
|
|
|
// stack: node_payload_ptr, retdest
|
|
|
|
|
PANIC // TODO
|
|
|
|
|
|
|
|
|
|
mpt_hash_leaf:
|
|
|
|
|
// stack: node_type, node_payload_ptr, retdest
|
|
|
|
|
POP
|
|
|
|
|
// stack: node_payload_ptr, retdest
|
|
|
|
|
DUP1 %mload_trie_data
|
|
|
|
|
// stack: node_nibbles, node_payload_ptr, retdest
|
|
|
|
|
PANIC // TODO
|