From ecce5be9e399a0f1c81a43ad04050ab527e3c071 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Fri, 14 Oct 2022 18:08:25 -0700 Subject: [PATCH] MPT format tweaks Don't need value lengths in memory. Branches with null values recognized as value_ptr = null. --- evm/spec/{tries.tex => mpts.tex} | 16 ++++++++-------- evm/spec/zkevm.pdf | Bin 161092 -> 153232 bytes evm/spec/zkevm.tex | 2 +- evm/src/cpu/kernel/asm/mpt/hash.asm | 13 ++++--------- evm/src/cpu/kernel/asm/mpt/load.asm | 21 ++++++++++----------- evm/src/cpu/kernel/asm/mpt/read.asm | 17 ++++------------- evm/src/cpu/kernel/tests/mpt/insert.rs | 1 - evm/src/cpu/kernel/tests/mpt/load.rs | 2 -- evm/src/cpu/kernel/tests/mpt/read.rs | 11 +++++------ 9 files changed, 32 insertions(+), 51 deletions(-) rename evm/spec/{tries.tex => mpts.tex} (53%) diff --git a/evm/spec/tries.tex b/evm/spec/mpts.tex similarity index 53% rename from evm/spec/tries.tex rename to evm/spec/mpts.tex index 7ec0fcce..49d1d328 100644 --- a/evm/spec/tries.tex +++ b/evm/spec/mpts.tex @@ -6,21 +6,21 @@ Withour our zkEVM's kernel memory, \begin{enumerate} \item An empty node is encoded as $(\texttt{MPT\_NODE\_EMPTY})$. - \item A branch node is encoded as $(\texttt{MPT\_NODE\_BRANCH}, c_1, \dots, c_{16}, \abs{v}, v)$, where each $c_i$ is a pointer to a child node, and $v$ is a value of length $\abs{v}$.\footnote{If a branch node has no associated value, then $\abs{v} = 0$ and $v = ()$.} + \item A branch node is encoded as $(\texttt{MPT\_NODE\_BRANCH}, c_1, \dots, c_{16}, v)$, where each $c_i$ is a pointer to a child node, and $v$ is a pointer to a value. If a branch node has no associated value, then $v = 0$, i.e. the null pointer. \item An extension node is encoded as $(\texttt{MPT\_NODE\_EXTENSION}, k, c)$, $k$ represents the part of the key associated with this extension, and is encoded as a 2-tuple $(\texttt{packed\_nibbles}, \texttt{num\_nibbles})$. $c$ is a pointer to a child node. - \item A leaf node is encoded as $(\texttt{MPT\_NODE\_LEAF}, k, \abs{v}, v)$, where $k$ is a 2-tuple as above, and $v$ is a leaf payload. - \item A digest node is encoded as $(\texttt{MPT\_NODE\_DIGEST}, d)$, where $d$ is a Keccak256 digest. + \item A leaf node is encoded as $(\texttt{MPT\_NODE\_LEAF}, k, v)$, where $k$ is a 2-tuple as above, and $v$ is a pointer to a value. + \item A digest node is encoded as $(\texttt{MPT\_NODE\_HASH}, d)$, where $d$ is a Keccak256 digest. \end{enumerate} \subsection{Prover input format} -The initial state of each trie is given by the prover as a nondeterministic input tape. This tape has a similar format: +The initial state of each trie is given by the prover as a nondeterministic input tape. This tape has a slightly different format: \begin{enumerate} \item An empty node is encoded as $(\texttt{MPT\_NODE\_EMPTY})$. - \item A branch node is encoded as $(\texttt{MPT\_NODE\_BRANCH}, \abs{v}, v, c_1, \dots, c_{16})$, where $\abs{v}$ is the length of the value, and $v$ is the value itself. Each $c_i$ is the encoding of a child node. + \item A branch node is encoded as $(\texttt{MPT\_NODE\_BRANCH}, v_?, c_1, \dots, c_{16})$. Here $v_?$ consists of a flag indicating whether a value is present,\todo{In the current implementation, we use a length prefix rather than a is-present prefix, but we plan to change that.} followed by the actual value payload if one is present. Each $c_i$ is the encoding of a child node. \item An extension node is encoded as $(\texttt{MPT\_NODE\_EXTENSION}, k, c)$, $k$ represents the part of the key associated with this extension, and is encoded as a 2-tuple $(\texttt{packed\_nibbles}, \texttt{num\_nibbles})$. $c$ is a pointer to a child node. - \item A leaf node is encoded as $(\texttt{MPT\_NODE\_LEAF}, k, \abs{v}, v)$, where $k$ is a 2-tuple as above, and $v$ is a leaf payload. - \item A digest node is encoded as $(\texttt{MPT\_NODE\_DIGEST}, d)$, where $d$ is a Keccak256 digest. + \item A leaf node is encoded as $(\texttt{MPT\_NODE\_LEAF}, k, v)$, where $k$ is a 2-tuple as above, and $v$ is a value payload. + \item A digest node is encoded as $(\texttt{MPT\_NODE\_HASH}, d)$, where $d$ is a Keccak256 digest. \end{enumerate} -Nodes are thus given in depth-first order, leading to natural recursive methods for encoding and decoding this format. +Nodes are thus given in depth-first order, enabling natural recursive methods for encoding and decoding this format. diff --git a/evm/spec/zkevm.pdf b/evm/spec/zkevm.pdf index 184ba36b1d30f5b348c1d79900597a461f054d29..f181eba624273229b664ab2127b74209ff289eb3 100644 GIT binary patch delta 49211 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 a3KC(Hab3Z1;n|p3SQ%l-$ix)HVgC;lBnD0Z delta 57114 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 (rlp_pos, 0x80, rlp_pos) + // stack: value_ptr, rlp_pos', encode_value, retdest + %stack (value_ptr, rlp_pos, encode_value) -> (rlp_pos, 0x80, rlp_pos) %mstore_rlp // stack: rlp_pos', retdest %increment // stack: rlp_pos'', retdest %jump(encode_node_branch_prepend_prefix) encode_node_branch_with_value: - // stack: value_len_ptr, rlp_pos', encode_value, retdest - %increment // stack: value_ptr, rlp_pos', encode_value, retdest %stack (value_ptr, rlp_pos, encode_value) -> (encode_value, rlp_pos, value_ptr, encode_node_branch_prepend_prefix) @@ -276,7 +272,6 @@ encode_node_leaf_after_hex_prefix: %add_const(2) // The value pointer starts at index 3, after num_nibbles and packed_nibbles. // stack: value_ptr_ptr, rlp_pos, encode_value, retdest %mload_trie_data - %increment // skip over length prefix // stack: value_ptr, rlp_pos, encode_value, retdest %stack (value_ptr, rlp_pos, encode_value, retdest) -> (encode_value, rlp_pos, value_ptr, encode_node_leaf_after_encode_value, retdest) diff --git a/evm/src/cpu/kernel/asm/mpt/load.asm b/evm/src/cpu/kernel/asm/mpt/load.asm index 73f58b95..49258a31 100644 --- a/evm/src/cpu/kernel/asm/mpt/load.asm +++ b/evm/src/cpu/kernel/asm/mpt/load.asm @@ -70,7 +70,7 @@ load_mpt_branch: SWAP1 %append_to_trie_data // stack: node_ptr, retdest // Save the offset of our 16 child pointers so we can write them later. - // Then advance out current trie pointer beyond them, so we can load the + // Then advance our current trie pointer beyond them, so we can load the // value and have it placed after our child pointers. %get_trie_data_size // stack: children_ptr, node_ptr, retdest @@ -79,8 +79,8 @@ load_mpt_branch: %set_trie_data_size // stack: children_ptr, node_ptr, retdest %load_value - // stack: children_ptr, value_ptr, node_ptr, retdest SWAP1 + // stack: children_ptr, value_ptr, node_ptr, retdest // Load the 16 children. %rep 16 @@ -170,26 +170,28 @@ load_mpt_digest: %%after: %endmacro -// Load a leaf from prover input, append it to trie data, and return a pointer to it. +// Load a value from prover input, append it to trie data, and return a pointer to it. +// Return null if the value is empty. %macro load_value // stack: (empty) PROVER_INPUT(mpt) // stack: value_len - DUP1 ISZERO - %jumpi(%%return_null) + DUP1 %jumpi(%%has_value) + %stack (value_len) -> (0) + %jump(%%end) +%%has_value: // stack: value_len %get_trie_data_size + // stack: value_ptr, value_len SWAP1 // stack: value_len, value_ptr - DUP1 %append_to_trie_data - // stack: value_len, value_ptr %%loop: DUP1 ISZERO // stack: value_len == 0, value_len, value_ptr %jumpi(%%finish_loop) // stack: value_len, value_ptr PROVER_INPUT(mpt) - // stack: leaf_part, value_len, value_ptr + // stack: value_part, value_len, value_ptr %append_to_trie_data // stack: value_len, value_ptr %decrement @@ -199,8 +201,5 @@ load_mpt_digest: // stack: value_len, value_ptr POP // stack: value_ptr - %jump(%%end) -%%return_null: - %stack (value_len) -> (0) %%end: %endmacro diff --git a/evm/src/cpu/kernel/asm/mpt/read.asm b/evm/src/cpu/kernel/asm/mpt/read.asm index dae97336..d375bedc 100644 --- a/evm/src/cpu/kernel/asm/mpt/read.asm +++ b/evm/src/cpu/kernel/asm/mpt/read.asm @@ -1,6 +1,6 @@ -// Given an address, return a pointer to the associated (length-prefixed) -// account data, which consists of four words (nonce, balance, storage_root, -// code_hash), in the state trie. Returns 0 if the address is not found. +// Given an address, return a pointer to the associated account data, which +// consists of four words (nonce, balance, storage_root, code_hash), in the +// state trie. Returns null if the address is not found. global mpt_read_state_trie: // stack: addr, retdest // The key is the hash of the address. Since KECCAK_GENERAL takes input from @@ -24,7 +24,7 @@ mpt_read_state_trie_after_mstore: // - the key, as a U256 // - the number of nibbles in the key (should start at 64) // -// This function returns a pointer to the length-prefixed leaf, or 0 if the key is not found. +// This function returns a pointer to the value, or 0 if the key is not found. global mpt_read: // stack: node_ptr, num_nibbles, key, retdest DUP1 @@ -77,15 +77,6 @@ mpt_read_branch_end_of_key: %add_const(16) // skip over the 16 child nodes // stack: value_ptr_ptr, retdest %mload_trie_data - // stack: value_len_ptr, retdest - DUP1 %mload_trie_data - // stack: value_len, value_len_ptr, retdest - %jumpi(mpt_read_branch_found_value) - // This branch node contains no value, so return null. - %stack (value_len_ptr, retdest) -> (retdest, 0) -mpt_read_branch_found_value: - // stack: value_len_ptr, retdest - %increment // stack: value_ptr, retdest SWAP1 JUMP diff --git a/evm/src/cpu/kernel/tests/mpt/insert.rs b/evm/src/cpu/kernel/tests/mpt/insert.rs index 469ad1e4..5310d431 100644 --- a/evm/src/cpu/kernel/tests/mpt/insert.rs +++ b/evm/src/cpu/kernel/tests/mpt/insert.rs @@ -157,7 +157,6 @@ fn test_state_trie(state_trie: PartialTrie, k: Nibbles, v: Vec) -> Result<() let value_ptr = trie_data.len(); let account: AccountRlp = rlp::decode(&v).expect("Decoding failed"); let account_data = account.to_vec(); - trie_data.push(account_data.len().into()); trie_data.extend(account_data); let trie_data_len = trie_data.len().into(); interpreter.set_global_metadata_field(GlobalMetadata::TrieDataSize, trie_data_len); diff --git a/evm/src/cpu/kernel/tests/mpt/load.rs b/evm/src/cpu/kernel/tests/mpt/load.rs index 0572458d..b7b3b108 100644 --- a/evm/src/cpu/kernel/tests/mpt/load.rs +++ b/evm/src/cpu/kernel/tests/mpt/load.rs @@ -79,7 +79,6 @@ fn load_all_mpts_leaf() -> Result<()> { 3.into(), 0xABC.into(), 5.into(), // value ptr - 4.into(), // value length test_account_1().nonce, test_account_1().balance, test_account_1().storage_root.into_uint(), @@ -200,7 +199,6 @@ fn load_all_mpts_ext_to_leaf() -> Result<()> { 3.into(), // 3 nibbles 0xDEF.into(), // key part 9.into(), // value pointer - 4.into(), // value length test_account_1().nonce, test_account_1().balance, test_account_1().storage_root.into_uint(), diff --git a/evm/src/cpu/kernel/tests/mpt/read.rs b/evm/src/cpu/kernel/tests/mpt/read.rs index 06d89ff6..c45a6b60 100644 --- a/evm/src/cpu/kernel/tests/mpt/read.rs +++ b/evm/src/cpu/kernel/tests/mpt/read.rs @@ -44,12 +44,11 @@ fn mpt_read() -> Result<()> { assert_eq!(interpreter.stack().len(), 1); let result_ptr = interpreter.stack()[0].as_usize(); - let result = &interpreter.get_trie_data()[result_ptr..][..5]; - assert_eq!(result[0], 4.into()); - assert_eq!(result[1], account.nonce); - assert_eq!(result[2], account.balance); - assert_eq!(result[3], account.storage_root.into_uint()); - assert_eq!(result[4], account.code_hash.into_uint()); + let result = &interpreter.get_trie_data()[result_ptr..][..4]; + assert_eq!(result[0], account.nonce); + assert_eq!(result[1], account.balance); + assert_eq!(result[2], account.storage_root.into_uint()); + assert_eq!(result[3], account.code_hash.into_uint()); Ok(()) }