From 18ca89f0935132eb1687d891c7d9d112e994e03b Mon Sep 17 00:00:00 2001 From: BGluth Date: Fri, 21 Jul 2023 11:55:59 -0600 Subject: [PATCH] Patched plonky2 to use a patch for eth_trie_utils --- Cargo.toml | 1 + evm/src/cpu/kernel/tests/account_code.rs | 2 +- evm/src/cpu/kernel/tests/balance.rs | 2 +- evm/src/cpu/kernel/tests/mpt/delete.rs | 4 ++-- evm/src/cpu/kernel/tests/mpt/insert.rs | 2 +- evm/src/cpu/kernel/tests/mpt/mod.rs | 14 ++++++++++---- evm/src/generation/mpt.rs | 12 ++++++------ evm/src/generation/outputs.rs | 4 ++-- evm/src/generation/trie_extractor.rs | 14 ++++++++++---- 9 files changed, 34 insertions(+), 21 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3c9eddf0..dc3178e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ incremental = true opt-level = 3 [patch.crates-io] +eth_trie_utils = { git = "https://github.com/mir-protocol/eth_trie_utils.git", rev = "e9ec4ec2aa2ae976b7c699ef40c1ffc716d87ed5" } plonky2_evm = { path = "evm" } plonky2_field = { path = "field" } plonky2_maybe_rayon = { path = "maybe_rayon" } diff --git a/evm/src/cpu/kernel/tests/account_code.rs b/evm/src/cpu/kernel/tests/account_code.rs index da27c703..805fed04 100644 --- a/evm/src/cpu/kernel/tests/account_code.rs +++ b/evm/src/cpu/kernel/tests/account_code.rs @@ -73,7 +73,7 @@ fn prepare_interpreter( interpreter.set_global_metadata_field(GlobalMetadata::TrieDataSize, trie_data_len); interpreter.push(0xDEADBEEFu32.into()); interpreter.push(value_ptr.into()); // value_ptr - interpreter.push(k.packed); // key + interpreter.push(k.try_into_u256().unwrap()); // key interpreter.run()?; assert_eq!( diff --git a/evm/src/cpu/kernel/tests/balance.rs b/evm/src/cpu/kernel/tests/balance.rs index cf9ea74c..049bf9f8 100644 --- a/evm/src/cpu/kernel/tests/balance.rs +++ b/evm/src/cpu/kernel/tests/balance.rs @@ -64,7 +64,7 @@ fn prepare_interpreter( interpreter.set_global_metadata_field(GlobalMetadata::TrieDataSize, trie_data_len); interpreter.push(0xDEADBEEFu32.into()); interpreter.push(value_ptr.into()); // value_ptr - interpreter.push(k.packed); // key + interpreter.push(k.try_into_u256().unwrap()); // key interpreter.run()?; assert_eq!( diff --git a/evm/src/cpu/kernel/tests/mpt/delete.rs b/evm/src/cpu/kernel/tests/mpt/delete.rs index 76f1a049..532a1603 100644 --- a/evm/src/cpu/kernel/tests/mpt/delete.rs +++ b/evm/src/cpu/kernel/tests/mpt/delete.rs @@ -85,7 +85,7 @@ fn test_state_trie( interpreter.set_global_metadata_field(GlobalMetadata::TrieDataSize, trie_data_len); interpreter.push(0xDEADBEEFu32.into()); interpreter.push(value_ptr.into()); // value_ptr - interpreter.push(k.packed); // key + interpreter.push(k.try_into_u256().unwrap()); // key interpreter.run()?; assert_eq!( interpreter.stack().len(), @@ -98,7 +98,7 @@ fn test_state_trie( let state_trie_ptr = interpreter.get_global_metadata_field(GlobalMetadata::StateTrieRoot); interpreter.generation_state.registers.program_counter = mpt_delete; interpreter.push(0xDEADBEEFu32.into()); - interpreter.push(k.packed); + interpreter.push(k.try_into_u256().unwrap()); interpreter.push(64.into()); interpreter.push(state_trie_ptr); interpreter.run()?; diff --git a/evm/src/cpu/kernel/tests/mpt/insert.rs b/evm/src/cpu/kernel/tests/mpt/insert.rs index e6c203e3..f8dbc274 100644 --- a/evm/src/cpu/kernel/tests/mpt/insert.rs +++ b/evm/src/cpu/kernel/tests/mpt/insert.rs @@ -198,7 +198,7 @@ fn test_state_trie( interpreter.set_global_metadata_field(GlobalMetadata::TrieDataSize, trie_data_len); interpreter.push(0xDEADBEEFu32.into()); interpreter.push(value_ptr.into()); // value_ptr - interpreter.push(k.packed); // key + interpreter.push(k.try_into_u256().unwrap()); // key interpreter.run()?; assert_eq!( diff --git a/evm/src/cpu/kernel/tests/mpt/mod.rs b/evm/src/cpu/kernel/tests/mpt/mod.rs index 18982b94..292d064a 100644 --- a/evm/src/cpu/kernel/tests/mpt/mod.rs +++ b/evm/src/cpu/kernel/tests/mpt/mod.rs @@ -13,13 +13,19 @@ mod load; mod read; pub(crate) fn nibbles_64>(v: T) -> Nibbles { - let packed = v.into(); - Nibbles { count: 64, packed } + let packed: U256 = v.into(); + Nibbles { + count: 64, + packed: packed.into(), + } } pub(crate) fn nibbles_count>(v: T, count: usize) -> Nibbles { - let packed = v.into(); - Nibbles { count, packed } + let packed: U256 = v.into(); + Nibbles { + count, + packed: packed.into(), + } } pub(crate) fn test_account_1() -> AccountRlp { diff --git a/evm/src/generation/mpt.rs b/evm/src/generation/mpt.rs index 1bf7bc4f..420984dd 100644 --- a/evm/src/generation/mpt.rs +++ b/evm/src/generation/mpt.rs @@ -3,7 +3,7 @@ use std::ops::Deref; use eth_trie_utils::nibbles::Nibbles; use eth_trie_utils::partial_trie::{HashedPartialTrie, PartialTrie}; -use ethereum_types::{BigEndianHash, H256, U256}; +use ethereum_types::{BigEndianHash, H256, U256, U512}; use keccak_hash::keccak; use rlp_derive::{RlpDecodable, RlpEncodable}; @@ -98,12 +98,12 @@ pub(crate) fn mpt_prover_inputs( } Node::Extension { nibbles, child } => { prover_inputs.push(nibbles.count.into()); - prover_inputs.push(nibbles.packed); + prover_inputs.push(nibbles.try_into_u256().unwrap()); mpt_prover_inputs(child, prover_inputs, parse_value); } Node::Leaf { nibbles, value } => { prover_inputs.push(nibbles.count.into()); - prover_inputs.push(nibbles.packed); + prover_inputs.push(nibbles.try_into_u256().unwrap()); let leaf = parse_value(value); prover_inputs.extend(leaf); } @@ -141,7 +141,7 @@ pub(crate) fn mpt_prover_inputs_state_trie( } Node::Extension { nibbles, child } => { prover_inputs.push(nibbles.count.into()); - prover_inputs.push(nibbles.packed); + prover_inputs.push(nibbles.try_into_u256().unwrap()); let extended_key = key.merge_nibbles(nibbles); mpt_prover_inputs_state_trie( child, @@ -170,7 +170,7 @@ pub(crate) fn mpt_prover_inputs_state_trie( "In TrieInputs, an account's storage_root didn't match the associated storage trie hash"); prover_inputs.push(nibbles.count.into()); - prover_inputs.push(nibbles.packed); + prover_inputs.push(nibbles.try_into_u256().unwrap()); prover_inputs.push(nonce); prover_inputs.push(balance); mpt_prover_inputs(storage_trie, prover_inputs, &parse_storage_value); @@ -187,6 +187,6 @@ fn parse_storage_value(value_rlp: &[u8]) -> Vec { fn empty_nibbles() -> Nibbles { Nibbles { count: 0, - packed: U256::zero(), + packed: U512::zero(), } } diff --git a/evm/src/generation/outputs.rs b/evm/src/generation/outputs.rs index b6da3576..63a86906 100644 --- a/evm/src/generation/outputs.rs +++ b/evm/src/generation/outputs.rs @@ -48,7 +48,7 @@ pub(crate) fn get_outputs(state: &mut GenerationState) -> Generatio state_key_nibbles.count, 64, "Each state key should have 64 nibbles = 256 bits" ); - let state_key_h256 = H256::from_uint(&state_key_nibbles.packed); + let state_key_h256 = H256::from_uint(&state_key_nibbles.try_into_u256().unwrap()); let addr_or_state_key = if let Some(address) = state.state_key_to_address.get(&state_key_h256) { @@ -98,7 +98,7 @@ fn get_storage(state: &GenerationState, storage_ptr: usize) -> Hash storage_key_nibbles.count, 64, "Each storage key should have 64 nibbles = 256 bits" ); - (storage_key_nibbles.packed, value) + (storage_key_nibbles.try_into_u256().unwrap(), value) }) .collect() } diff --git a/evm/src/generation/trie_extractor.rs b/evm/src/generation/trie_extractor.rs index 7c9aceb8..8311f692 100644 --- a/evm/src/generation/trie_extractor.rs +++ b/evm/src/generation/trie_extractor.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use eth_trie_utils::nibbles::Nibbles; -use ethereum_types::{BigEndianHash, H256, U256}; +use ethereum_types::{BigEndianHash, H256, U256, U512}; use crate::cpu::kernel::constants::trie_type::PartialTrieType; use crate::memory::segments::Segment; @@ -39,7 +39,7 @@ pub(crate) fn read_trie( let mut res = HashMap::new(); let empty_nibbles = Nibbles { count: 0, - packed: U256::zero(), + packed: U512::zero(), }; read_trie_helper::(memory, ptr, read_value, empty_nibbles, &mut res); res @@ -75,7 +75,10 @@ pub(crate) fn read_trie_helper( PartialTrieType::Extension => { let count = load(ptr + 1).as_usize(); let packed = load(ptr + 2); - let nibbles = Nibbles { count, packed }; + let nibbles = Nibbles { + count, + packed: packed.into(), + }; let child_ptr = load(ptr + 3).as_usize(); read_trie_helper::( memory, @@ -88,7 +91,10 @@ pub(crate) fn read_trie_helper( PartialTrieType::Leaf => { let count = load(ptr + 1).as_usize(); let packed = load(ptr + 2); - let nibbles = Nibbles { count, packed }; + let nibbles = Nibbles { + count, + packed: packed.into(), + }; let value_ptr = load(ptr + 3).as_usize(); res.insert( prefix.merge_nibbles(&nibbles),