From 698413b56ff77c40e558925842b72bb730020e61 Mon Sep 17 00:00:00 2001 From: 0xaatif Date: Wed, 13 Nov 2024 13:36:28 +0000 Subject: [PATCH] refactor: remove compat crate --- Cargo.lock | 14 ++------ Cargo.toml | 3 -- compat/Cargo.toml | 14 -------- compat/src/lib.rs | 69 -------------------------------------- zero/Cargo.toml | 4 +-- zero/src/rpc/mod.rs | 23 +++++++++---- zero/src/rpc/native/txn.rs | 46 ++++++++++++------------- 7 files changed, 42 insertions(+), 131 deletions(-) delete mode 100644 compat/Cargo.toml delete mode 100644 compat/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 643429656..2c78e2031 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -86,9 +86,9 @@ dependencies = [ [[package]] name = "alloy-compat" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6216c5ab5502a6824ec87a7bcd5c52ca14137f00b37dea3ab321a1656ff46383" +checksum = "1bdc9136288101eb70d3b6baf9781ad810589fde773e356c5efa92cce3b9c6da" dependencies = [ "alloy-primitives", "ethereum-types", @@ -1332,14 +1332,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "compat" -version = "0.1.0" -dependencies = [ - "alloy", - "primitive-types 0.12.2", -] - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -5910,7 +5902,6 @@ dependencies = [ "axum", "cfg-if", "clap", - "compat", "directories", "dotenvy", "evm_arithmetization", @@ -5929,7 +5920,6 @@ dependencies = [ "paladin-core", "plonky2", "plonky2_maybe_rayon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "primitive-types 0.12.2", "rlp", "ruint", "serde", diff --git a/Cargo.toml b/Cargo.toml index f8c6be0f7..cadf0a13a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,6 @@ [workspace] members = [ "common", - "compat", "evm_arithmetization", "mpt_trie", "proc_macro", @@ -21,7 +20,6 @@ keywords = ["cryptography", "STARK", "plonky2", "ethereum", "zk"] categories = ["cryptography::cryptocurrencies"] [workspace.dependencies] -__compat_primitive_types = { version = "0.12.2", package = "primitive-types" } alloy = { version = '0.3.0', default-features = false, features = [ "consensus", "reqwest", @@ -105,7 +103,6 @@ url = "2.5.2" winnow = "0.6.13" # local dependencies -compat = { path = "compat" } evm_arithmetization = { path = "evm_arithmetization", version = "0.4.0", default-features = false } mpt_trie = { path = "mpt_trie", version = "0.4.1" } smt_trie = { path = "smt_trie", version = "0.1.1" } diff --git a/compat/Cargo.toml b/compat/Cargo.toml deleted file mode 100644 index 7c7ce2238..000000000 --- a/compat/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "compat" -version = "0.1.0" -publish = false # TODO(): https://github.com/0xPolygonZero/zk_evm/issues/314 find a better place for this -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true - -[dependencies] -__compat_primitive_types.workspace = true -alloy.workspace = true diff --git a/compat/src/lib.rs b/compat/src/lib.rs deleted file mode 100644 index e83eb6eaf..000000000 --- a/compat/src/lib.rs +++ /dev/null @@ -1,69 +0,0 @@ -/// A trait to convert between alloy and ethereum types. -pub trait Compat { - /// Convert the type to another type - fn compat(self) -> Out; -} - -impl Compat<__compat_primitive_types::H160> for alloy::primitives::Address { - fn compat(self) -> __compat_primitive_types::H160 { - let alloy::primitives::Address(alloy::primitives::FixedBytes(arr)) = self; - __compat_primitive_types::H160(arr) - } -} - -impl Compat<__compat_primitive_types::H256> for alloy::primitives::B256 { - fn compat(self) -> __compat_primitive_types::H256 { - let alloy::primitives::FixedBytes(arr) = self; - __compat_primitive_types::H256(arr) - } -} - -impl Compat<[__compat_primitive_types::U256; 8]> for alloy::primitives::Bloom { - fn compat(self) -> [__compat_primitive_types::U256; 8] { - let alloy::primitives::Bloom(alloy::primitives::FixedBytes(src)) = self; - // have u8 * 256 - // want U256 * 8 - // (no unsafe, no unstable) - let mut chunks = src.chunks_exact(32); - let dst = core::array::from_fn(|_ix| { - // This is a bit spicy because we're going from an uninterpeted array of bytes - // to wide integers, but we trust this `From` impl to do the right thing - __compat_primitive_types::U256::from( - <[u8; 32]>::try_from(chunks.next().unwrap()).unwrap(), - ) - }); - assert_eq!(chunks.len(), 0); - dst - } -} - -impl Compat<__compat_primitive_types::U256> for alloy::primitives::U256 { - fn compat(self) -> __compat_primitive_types::U256 { - __compat_primitive_types::U256(self.into_limbs()) - } -} - -impl Compat>> for Vec { - fn compat(self) -> Vec> { - self.into_iter().map(|x| x.to_vec()).collect() - } -} - -impl Compat for __compat_primitive_types::H160 { - fn compat(self) -> alloy::primitives::Address { - let __compat_primitive_types::H160(arr) = self; - alloy::primitives::Address(alloy::primitives::FixedBytes(arr)) - } -} - -impl Compat for __compat_primitive_types::H256 { - fn compat(self) -> alloy::primitives::StorageKey { - let __compat_primitive_types::H256(arr) = self; - alloy::primitives::FixedBytes(arr) - } -} - -#[test] -fn bloom() { - let _did_not_panic = alloy::primitives::Bloom::ZERO.compat(); -} diff --git a/zero/Cargo.toml b/zero/Cargo.toml index 96d3bdeba..27fd5bdb5 100644 --- a/zero/Cargo.toml +++ b/zero/Cargo.toml @@ -9,15 +9,13 @@ keywords.workspace = true categories.workspace = true [dependencies] -__compat_primitive_types.workspace = true alloy.workspace = true -alloy-compat = "0.1.0" +alloy-compat = "0.1.1" anyhow.workspace = true async-stream.workspace = true axum.workspace = true cfg-if = "1.0.0" clap = { workspace = true, features = ["derive", "string"] } -compat.workspace = true directories = "5.0.1" dotenvy.workspace = true evm_arithmetization.workspace = true diff --git a/zero/src/rpc/mod.rs b/zero/src/rpc/mod.rs index 016c1d242..b972bc501 100644 --- a/zero/src/rpc/mod.rs +++ b/zero/src/rpc/mod.rs @@ -2,16 +2,15 @@ zk_evm_common::check_chain_features!(); use std::sync::Arc; -use __compat_primitive_types::{H256, U256}; use alloy::{ - primitives::{Address, Bytes, FixedBytes, B256}, + primitives::{Address, Bloom, Bytes, FixedBytes, B256, U256}, providers::Provider, rpc::types::eth::{BlockId, BlockTransactionsKind, Withdrawal}, transports::Transport, }; +use alloy_compat::Compat as _; use anyhow::{anyhow, Context as _}; use clap::ValueEnum; -use compat::Compat; use evm_arithmetization::{ proof::{consolidate_hashes, BlockHashes, BlockMetadata}, Field, Hasher, @@ -264,7 +263,17 @@ where .into() }, block_gas_used: target_block.header.gas_used.into(), - block_bloom: target_block.header.logs_bloom.compat(), + block_bloom: { + const CHUNK: usize = 32; + let Bloom(FixedBytes(bytes)) = target_block.header.logs_bloom; + let chunks = bytes.chunks_exact(CHUNK); + assert!(chunks.remainder().is_empty()); + let mut array = [U256::ZERO; 8]; + for (ix, chunk) in chunks.enumerate() { + array[ix] = U256::from_le_bytes::(chunk.try_into().unwrap()); + } + array.map(alloy_compat::Compat::compat) + }, parent_beacon_block_root: if cfg!(feature = "eth_mainnet") { target_block .header @@ -272,7 +281,7 @@ where .context("target block is missing field `parent_beacon_block_root`")? .compat() } else { - H256::zero() + Default::default() }, block_blob_gas_used: if cfg!(feature = "eth_mainnet") { target_block @@ -281,7 +290,7 @@ where .context("target block is missing field `blob_gas_used`")? .into() } else { - U256::zero() + Default::default() }, block_excess_blob_gas: if cfg!(feature = "eth_mainnet") { target_block @@ -290,7 +299,7 @@ where .context("target block is missing field `excess_blob_gas`")? .into() } else { - U256::zero() + Default::default() }, }, b_hashes: BlockHashes { diff --git a/zero/src/rpc/native/txn.rs b/zero/src/rpc/native/txn.rs index 79de06d79..4989c1ab5 100644 --- a/zero/src/rpc/native/txn.rs +++ b/zero/src/rpc/native/txn.rs @@ -1,26 +1,23 @@ use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; -use __compat_primitive_types::{H256, U256}; use alloy::{ - primitives::{keccak256, Address, B256}, + primitives::{keccak256, Address, B256, U256}, providers::{ ext::DebugApi as _, network::{eip2718::Encodable2718, Ethereum, Network}, Provider, }, rpc::types::{ - eth::Transaction, - eth::{AccessList, Block}, + eth::{AccessList, Block, Transaction}, trace::geth::{ - AccountState, DiffMode, GethDebugBuiltInTracerType, GethTrace, PreStateConfig, - PreStateFrame, PreStateMode, + AccountState, DiffMode, GethDebugBuiltInTracerType, GethDebugTracerType, + GethDebugTracingOptions, GethTrace, PreStateConfig, PreStateFrame, PreStateMode, }, - trace::geth::{GethDebugTracerType, GethDebugTracingOptions}, }, transports::Transport, }; +use alloy_compat::Compat; use anyhow::Context as _; -use compat::Compat; use futures::stream::{FuturesOrdered, TryStreamExt}; use trace_decoder::{ContractCodeUsage, TxnInfo, TxnMeta, TxnTrace}; @@ -123,7 +120,7 @@ where } /// Parse the access list data into a hashmap. -fn parse_access_list(access_list: Option<&AccessList>) -> HashMap> { +fn parse_access_list(access_list: Option<&AccessList>) -> HashMap> { let mut result = HashMap::new(); if let Some(access_list) = access_list { @@ -131,7 +128,7 @@ fn parse_access_list(access_list: Option<&AccessList>) -> HashMap) -> HashMap>, + mut access_list: HashMap>, read_trace: PreStateMode, diff_trace: DiffMode, ) -> anyhow::Result<(CodeDb, BTreeMap)> { @@ -166,7 +163,7 @@ async fn process_tx_traces( let pre_state = pre_trace.get(&address); let post_state = post_trace.get(&address); - let balance = post_state.and_then(|x| x.balance.map(Compat::compat)); + let balance = post_state.and_then(|x| x.balance); let (storage_read, storage_written) = process_storage( access_list.remove(&address).unwrap_or_default(), read_state, @@ -178,10 +175,13 @@ async fn process_tx_traces( let self_destructed = process_self_destruct(post_state, pre_state); let result = TxnTrace { - balance, - nonce, - storage_read, - storage_written, + balance: balance.map(Compat::compat), + nonce: nonce.map(Compat::compat), + storage_read: storage_read.into_iter().map(Compat::compat).collect(), + storage_written: storage_written + .into_iter() + .map(|(k, v)| (k.compat(), v.compat())) + .collect(), code_usage: code, self_destructed, }; @@ -200,7 +200,7 @@ fn process_nonce( code_usage: &Option, ) -> Option { post_state - .and_then(|x| x.nonce.map(Into::into)) + .and_then(|x| x.nonce.map(U256::from)) .or_else(|| { if let Some(ContractCodeUsage::Write(_)) = code_usage.as_ref() { Some(U256::from(1)) @@ -239,23 +239,23 @@ fn process_self_destruct( /// Returns the storage read and written for the given account in the /// transaction and updates the storage keys. fn process_storage( - access_list: HashSet<__compat_primitive_types::H256>, + access_list: HashSet, acct_state: Option<&AccountState>, post_acct: Option<&AccountState>, pre_acct: Option<&AccountState>, -) -> (BTreeSet, BTreeMap) { +) -> (BTreeSet, BTreeMap) { let mut storage_read = BTreeSet::from_iter(access_list); storage_read.extend( acct_state .into_iter() - .flat_map(|acct| acct.storage.keys().copied().map(Compat::compat)), + .flat_map(|acct| acct.storage.keys().copied()), ); - let mut storage_written: BTreeMap = post_acct + let mut storage_written: BTreeMap = post_acct .map(|x| { x.storage .iter() - .map(|(k, v)| ((*k).compat(), U256::from_big_endian(&v.0))) + .map(|(k, v)| (*k, U256::from_le_bytes((*v).into()))) .collect() }) .unwrap_or_default(); @@ -263,7 +263,7 @@ fn process_storage( // Add the deleted keys to the storage written if let Some(pre_acct) = pre_acct { for key in pre_acct.storage.keys() { - storage_written.entry((*key).compat()).or_default(); + storage_written.entry(*key).or_default(); } };