chore: update revm to v3.0.0 (#1248)

Co-authored-by: Francisco Krause Arnim <fkrausear@gmail.com>
Co-authored-by: lambdaclass-user <github@lambdaclass.com>
This commit is contained in:
rakita
2023-02-10 20:56:59 +01:00
committed by GitHub
parent b731bb9bb3
commit 23848df73a
15 changed files with 139 additions and 154 deletions

88
Cargo.lock generated
View File

@ -4098,7 +4098,7 @@ dependencies = [
"modular-bitfield",
"proptest",
"proptest-derive",
"revm-interpreter",
"revm-primitives",
"serde",
"test-fuzz",
]
@ -4333,6 +4333,7 @@ dependencies = [
"reth-network-api",
"reth-primitives",
"reth-rpc-types",
"revm-primitives",
"secp256k1 0.24.3",
"thiserror",
"tokio",
@ -4521,7 +4522,7 @@ dependencies = [
"reth-codecs",
"reth-rlp",
"reth-rlp-derive",
"revm-interpreter",
"revm-primitives",
"secp256k1 0.24.3",
"serde",
"serde_json",
@ -4578,7 +4579,7 @@ dependencies = [
"rand 0.8.5",
"reth-rlp",
"reth-rlp-derive",
"revm-interpreter",
"revm-primitives",
"rlp",
"secp256k1 0.24.3",
"smol_str",
@ -4808,23 +4809,52 @@ dependencies = [
[[package]]
name = "revm"
version = "2.3.1"
source = "git+https://github.com/bluealloy/revm?rev=a05fb262d87c78ee52d400e6c0f4708d4c527f32#a05fb262d87c78ee52d400e6c0f4708d4c527f32"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "284747ad0324ed0e805dcf8f412e2beccb7a547fbd84f0607865001b8719c515"
dependencies = [
"auto_impl 1.0.1",
"bytes",
"hashbrown 0.13.2",
"hex",
"revm-interpreter",
"revm-precompiles",
"revm-precompile",
]
[[package]]
name = "revm-interpreter"
version = "3.0.0"
source = "git+https://github.com/bluealloy/revm?rev=a05fb262d87c78ee52d400e6c0f4708d4c527f32#a05fb262d87c78ee52d400e6c0f4708d4c527f32"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db1b86f1d21d1852b40ec8ac9b6d31ac8a7c000875155809d41ce68f6369dc56"
dependencies = [
"derive_more",
"enumn",
"revm-primitives",
"sha3",
]
[[package]]
name = "revm-precompile"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66837781605c6dcb7f07ad87604eeab3119dae9149d69d8839073dd6f188673d"
dependencies = [
"k256",
"num",
"once_cell",
"revm-primitives",
"ripemd",
"secp256k1 0.26.0",
"sha2 0.10.6",
"sha3",
"substrate-bn",
]
[[package]]
name = "revm-primitives"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad165d3f69e4d14405d82c6625864ee48c162dcebdf170322e6dd80398226a9e"
dependencies = [
"arbitrary",
"auto_impl 1.0.1",
"bytes",
"derive_more",
"enumn",
@ -4840,24 +4870,6 @@ dependencies = [
"sha3",
]
[[package]]
name = "revm-precompiles"
version = "1.1.2"
source = "git+https://github.com/bluealloy/revm?rev=a05fb262d87c78ee52d400e6c0f4708d4c527f32#a05fb262d87c78ee52d400e6c0f4708d4c527f32"
dependencies = [
"bytes",
"hashbrown 0.13.2",
"k256",
"num",
"once_cell",
"ripemd",
"ruint",
"secp256k1 0.25.0",
"sha2 0.10.6",
"sha3",
"substrate-bn",
]
[[package]]
name = "rfc6979"
version = "0.3.1"
@ -5139,15 +5151,6 @@ dependencies = [
"serde",
]
[[package]]
name = "secp256k1"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "550fc3b723a478be77bf74718947cdcdd75144d508aaa70f0a320036905df2a8"
dependencies = [
"secp256k1-sys 0.7.0",
]
[[package]]
name = "secp256k1"
version = "0.26.0"
@ -5167,15 +5170,6 @@ dependencies = [
"cc",
]
[[package]]
name = "secp256k1-sys"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8058e28ae464daf5ac14c5c0f78110b58616e796c4e4e28cfcca38fdb13d8f22"
dependencies = [
"cc",
]
[[package]]
name = "secp256k1-sys"
version = "0.8.0"

View File

@ -14,8 +14,7 @@ reth-rlp = { path = "../rlp" }
reth-db = { path = "../storage/db" }
reth-provider = { path = "../storage/provider" }
revm = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32" }
revm = { version = "3.0.0"}
# remove from reth and reexport from revm
hashbrown = "0.13"

View File

@ -10,29 +10,29 @@ pub const WEI_3ETH: u128 = 3000000000000000000u128;
pub const WEI_5ETH: u128 = 5000000000000000000u128;
/// return revm_spec from spec configuration.
pub fn revm_spec(chain_spec: &ChainSpec, block: Head) -> revm::SpecId {
pub fn revm_spec(chain_spec: &ChainSpec, block: Head) -> revm::primitives::SpecId {
if chain_spec.fork(Hardfork::Shanghai).active_at_head(&block) {
revm::MERGE_EOF
revm::primitives::MERGE_EOF
} else if chain_spec.fork(Hardfork::Paris).active_at_head(&block) {
revm::MERGE
revm::primitives::MERGE
} else if chain_spec.fork(Hardfork::London).active_at_head(&block) {
revm::LONDON
revm::primitives::LONDON
} else if chain_spec.fork(Hardfork::Berlin).active_at_head(&block) {
revm::BERLIN
revm::primitives::BERLIN
} else if chain_spec.fork(Hardfork::Istanbul).active_at_head(&block) {
revm::ISTANBUL
revm::primitives::ISTANBUL
} else if chain_spec.fork(Hardfork::Petersburg).active_at_head(&block) {
revm::PETERSBURG
revm::primitives::PETERSBURG
} else if chain_spec.fork(Hardfork::Byzantium).active_at_head(&block) {
revm::BYZANTIUM
revm::primitives::BYZANTIUM
} else if chain_spec.fork(Hardfork::SpuriousDragon).active_at_head(&block) {
revm::SPURIOUS_DRAGON
revm::primitives::SPURIOUS_DRAGON
} else if chain_spec.fork(Hardfork::Tangerine).active_at_head(&block) {
revm::TANGERINE
revm::primitives::TANGERINE
} else if chain_spec.fork(Hardfork::Homestead).active_at_head(&block) {
revm::HOMESTEAD
revm::primitives::HOMESTEAD
} else if chain_spec.fork(Hardfork::Frontier).active_at_head(&block) {
revm::FRONTIER
revm::primitives::FRONTIER
} else {
panic!("wrong configuration")
}
@ -46,49 +46,49 @@ mod tests {
fn test_to_revm_spec() {
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().paris_activated().build(), Head::default()),
revm::MERGE
revm::primitives::MERGE
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().london_activated().build(), Head::default()),
revm::LONDON
revm::primitives::LONDON
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().berlin_activated().build(), Head::default()),
revm::BERLIN
revm::primitives::BERLIN
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().istanbul_activated().build(), Head::default()),
revm::ISTANBUL
revm::primitives::ISTANBUL
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().petersburg_activated().build(), Head::default()),
revm::PETERSBURG
revm::primitives::PETERSBURG
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().byzantium_activated().build(), Head::default()),
revm::BYZANTIUM
revm::primitives::BYZANTIUM
);
assert_eq!(
revm_spec(
&ChainSpecBuilder::mainnet().spurious_dragon_activated().build(),
Head::default()
),
revm::SPURIOUS_DRAGON
revm::primitives::SPURIOUS_DRAGON
);
assert_eq!(
revm_spec(
&ChainSpecBuilder::mainnet().tangerine_whistle_activated().build(),
Head::default()
),
revm::TANGERINE
revm::primitives::TANGERINE
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().homestead_activated().build(), Head::default()),
revm::HOMESTEAD
revm::primitives::HOMESTEAD
);
assert_eq!(
revm_spec(&ChainSpecBuilder::mainnet().frontier_activated().build(), Head::default()),
revm::FRONTIER
revm::primitives::FRONTIER
);
}
@ -102,7 +102,7 @@ mod tests {
..Default::default()
}
),
revm::MERGE
revm::primitives::MERGE
);
// TTD trumps the block number
assert_eq!(
@ -114,43 +114,43 @@ mod tests {
..Default::default()
}
),
revm::MERGE
revm::primitives::MERGE
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 15537394 - 10, ..Default::default() }),
revm::LONDON
revm::primitives::LONDON
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 12244000 + 10, ..Default::default() }),
revm::BERLIN
revm::primitives::BERLIN
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 12244000 - 10, ..Default::default() }),
revm::ISTANBUL
revm::primitives::ISTANBUL
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 7280000 + 10, ..Default::default() }),
revm::PETERSBURG
revm::primitives::PETERSBURG
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 7280000 - 10, ..Default::default() }),
revm::BYZANTIUM
revm::primitives::BYZANTIUM
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 2675000 + 10, ..Default::default() }),
revm::SPURIOUS_DRAGON
revm::primitives::SPURIOUS_DRAGON
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 2675000 - 10, ..Default::default() }),
revm::TANGERINE
revm::primitives::TANGERINE
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 1150000 + 10, ..Default::default() }),
revm::HOMESTEAD
revm::primitives::HOMESTEAD
);
assert_eq!(
revm_spec(&MAINNET, Head { number: 1150000 - 10, ..Default::default() }),
revm::FRONTIER
revm::primitives::FRONTIER
);
}
}

View File

@ -1,6 +1,6 @@
use reth_db::{models::AccountBeforeTx, tables, transaction::DbTxMut, Error as DbError};
use reth_primitives::{Account, Address, Receipt, H256, U256};
use revm::Bytecode;
use revm::primitives::Bytecode;
use std::collections::BTreeMap;
/// Execution Result containing vector of transaction changesets

View File

@ -13,7 +13,10 @@ use reth_primitives::{
};
use reth_provider::StateProvider;
use revm::{
db::AccountState, Account as RevmAccount, AccountInfo, AnalysisKind, Bytecode, Return, SpecId,
db::AccountState,
primitives::{
Account as RevmAccount, AccountInfo, AnalysisKind, Bytecode, ResultAndState, SpecId,
},
EVM,
};
use std::collections::BTreeMap;
@ -25,6 +28,9 @@ where
{
chain_spec: &'a ChainSpec,
evm: EVM<&'a mut SubState<DB>>,
/// Enable revm inspector printer.
/// In execution this will print opcode level traces directly to console.
pub use_printer_tracer: bool,
}
impl<'a, DB> Executor<'a, DB>
@ -34,7 +40,7 @@ where
fn new(chain_spec: &'a ChainSpec, db: &'a mut SubState<DB>) -> Self {
let mut evm = EVM::new();
evm.database(db);
Executor { chain_spec, evm }
Executor { chain_spec, evm, use_printer_tracer: false }
}
fn db(&mut self) -> &mut SubState<DB> {
@ -347,7 +353,7 @@ where
self.init_block_env(header, total_difficulty);
let mut cumulative_gas_used = 0;
// output of verification
// output of execution
let mut changesets = Vec::with_capacity(body.len());
for (transaction, sender) in body.iter().zip(senders.into_iter()) {
@ -365,53 +371,46 @@ where
revm_wrap::fill_tx_env(&mut self.evm.env.tx, transaction, sender);
// Execute transaction.
let out = self.evm.transact();
let out = if self.use_printer_tracer {
// execution with inspector.
let out = self.evm.inspect(revm::inspectors::CustomPrintTracer::default());
// Useful for debugging
// let out = evm.inspect(revm::inspectors::CustomPrintTracer::default());
// tracing::trace!(target:"evm","Executing transaction {:?}, \n:{out:?}: {:?}
// \nENV:{:?}",transaction.hash(),transaction,evm.env);
let (revm::ExecutionResult { exit_reason, gas_used, logs, .. }, state) = out;
// Fatal internal error.
if exit_reason == revm::Return::FatalExternalError {
return Err(Error::ExecutionFatalError)
}
// Success flag was added in `EIP-658: Embedding transaction status code in receipts`.
// TODO for verification (exit_reason): some error should return EVM error as the block
// with that transaction can have consensus error that would make block
// invalid.
let is_success = match exit_reason {
revm::return_ok!() => true,
revm::return_revert!() => false,
_ => false,
// TODO: Handle after bumping to revm v3.0: https://github.com/paradigmxyz/reth/issues/463
// e => return Err(Error::EVMError { error_code: e as u32 }),
tracing::trace!(target:"evm","Executed transaction: {:?},
\nExecution output:{out:?}:
\nTransaction data:{transaction:?}
\nenv data:{:?}",transaction.hash(),self.evm.env);
out
} else {
// main execution.
self.evm.transact()
};
// Add spent gas.
cumulative_gas_used += gas_used;
// cast the error and extract returnables.
let ResultAndState { result, state } = out.map_err(|e| Error::EVM(format!("{e:?}")))?;
// commit state
// commit changes
let (changeset, new_bytecodes) = self.commit_changes(state);
// Transform logs to reth format.
let logs: Vec<Log> = logs.into_iter().map(into_reth_log).collect();
// append gas used
cumulative_gas_used += result.gas_used();
// Push transaction changeset and calculte header bloom filter for receipt.
// cast revm logs to reth logs
let logs: Vec<Log> = result.logs().into_iter().map(into_reth_log).collect();
// Push transaction changeset and calculate header bloom filter for receipt.
changesets.push(TransactionChangeSet {
receipt: Receipt {
tx_type: transaction.tx_type(),
success: is_success,
// Success flag was added in `EIP-658: Embedding transaction status code in
// receipts`.
success: result.is_success(),
cumulative_gas_used,
bloom: logs_bloom(logs.iter()),
logs,
},
changeset,
new_bytecodes,
})
});
}
// Check if gas used matches the value set in header.

View File

@ -1,12 +1,12 @@
use reth_interfaces::Error;
use reth_primitives::{
Account, Address, Header, Log, Transaction, TransactionKind, TransactionSigned, TxEip1559,
TxEip2930, TxLegacy, H160, H256, KECCAK_EMPTY, U256,
Account, Address, Header, Log as RethLog, Transaction, TransactionKind, TransactionSigned,
TxEip1559, TxEip2930, TxLegacy, H160, H256, KECCAK_EMPTY, U256,
};
use reth_provider::StateProvider;
use revm::{
db::{CacheDB, DatabaseRef},
BlockEnv, TransactTo, TxEnv,
primitives::{AccountInfo, BlockEnv, Bytecode, Log, TransactTo, TxEnv},
};
/// SubState of database. Uses revm internal cache with binding to reth StateProvider trait.
@ -40,8 +40,8 @@ impl<DB: StateProvider> State<DB> {
impl<DB: StateProvider> DatabaseRef for State<DB> {
type Error = Error;
fn basic(&self, address: H160) -> Result<Option<revm::AccountInfo>, Self::Error> {
Ok(self.0.basic_account(address)?.map(|account| revm::AccountInfo {
fn basic(&self, address: H160) -> Result<Option<AccountInfo>, Self::Error> {
Ok(self.0.basic_account(address)?.map(|account| AccountInfo {
balance: account.balance,
nonce: account.nonce,
code_hash: account.bytecode_hash.unwrap_or(KECCAK_EMPTY),
@ -49,9 +49,9 @@ impl<DB: StateProvider> DatabaseRef for State<DB> {
}))
}
fn code_by_hash(&self, code_hash: H256) -> Result<revm::Bytecode, Self::Error> {
fn code_by_hash(&self, code_hash: H256) -> Result<Bytecode, Self::Error> {
let bytecode = self.0.bytecode_by_hash(code_hash)?.unwrap_or_default();
Ok(revm::Bytecode::new_raw(bytecode.0))
Ok(Bytecode::new_raw(bytecode.0))
}
fn storage(&self, address: H160, index: U256) -> Result<U256, Self::Error> {
@ -180,8 +180,8 @@ pub fn fill_tx_env(tx_env: &mut TxEnv, transaction: &TransactionSigned, sender:
}
}
/// Check equality between [`reth_primitives::Log`] and [`revm::Log`]
pub fn is_log_equal(revm_log: &revm::Log, reth_log: &reth_primitives::Log) -> bool {
/// Check equality between [`reth_primitives::Log`] and [`revm::primitives::Log`]
pub fn is_log_equal(revm_log: &Log, reth_log: &reth_primitives::Log) -> bool {
revm_log.topics.len() == reth_log.topics.len() &&
revm_log.address.0 == reth_log.address.0 &&
revm_log.data == reth_log.data.0 &&
@ -192,18 +192,18 @@ pub fn is_log_equal(revm_log: &revm::Log, reth_log: &reth_primitives::Log) -> bo
.any(|(revm_topic, reth_topic)| revm_topic.0 != reth_topic.0)
}
/// Into reth primitive [Log] from [revm::Log].
pub fn into_reth_log(log: revm::Log) -> Log {
Log {
/// Into reth primitive [Log] from [revm::primitives::Log].
pub fn into_reth_log(log: Log) -> RethLog {
RethLog {
address: H160(log.address.0),
topics: log.topics.into_iter().map(|h| H256(h.0)).collect(),
data: log.data.into(),
}
}
/// Create reth primitive [Account] from [revm::AccountInfo].
/// Create reth primitive [Account] from [revm::primitives::AccountInfo].
/// Check if revm bytecode hash is [KECCAK_EMPTY] and put None to reth [Account]
pub fn to_reth_acc(revm_acc: &revm::AccountInfo) -> Account {
pub fn to_reth_acc(revm_acc: &AccountInfo) -> Account {
let code_hash = revm_acc.code_hash;
Account {
balance: revm_acc.balance,

View File

@ -11,6 +11,7 @@ reth-codecs = { path = "../storage/codecs" }
reth-primitives = { path = "../primitives" }
reth-rpc-types = { path = "../rpc/rpc-types" }
reth-network-api = { path = "../net/network-api"}
revm-primitives = "1.0"
async-trait = "0.1.57"
thiserror = "1.0.37"
auto_impl = "1.0"

View File

@ -25,6 +25,8 @@ pub trait BlockExecutor<T> {
#[allow(missing_docs)]
#[derive(Error, Debug, Clone, PartialEq, Eq)]
pub enum Error {
#[error("EVM reported invalid transaction:{0}")]
EVM(String),
#[error("Example of error.")]
VerificationFailed,
#[error("Fatal internal error")]
@ -50,8 +52,6 @@ pub enum Error {
},
#[error("Block gas used {got} is different from expected gas used {expected}.")]
BlockGasUsed { got: u64, expected: u64 },
#[error("Revm error {error_code}")]
EVMError { error_code: u32 },
#[error("Provider error")]
ProviderError,
}

View File

@ -17,9 +17,7 @@ reth-rlp = { path = "../rlp", features = [
reth-rlp-derive = { path = "../rlp/rlp-derive" }
reth-codecs = { version = "0.1.0", path = "../storage/codecs" }
revm-interpreter = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32", features = [
"serde",
] }
revm-primitives = { version="1.0.0", features = ["serde"] }
# ethereum
ethers-core = { git = "https://github.com/gakonst/ethers-rs", default-features = false }
@ -73,11 +71,7 @@ serde_json = "1.0"
hex-literal = "0.3"
test-fuzz = "3.0.4"
rand = "0.8"
revm-interpreter = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32", features = [
"serde",
"arbitrary",
] }
revm-primitives = "1.0.0"
arbitrary = { version = "1.1.7", features = ["derive"] }
proptest = { version = "1.0" }
proptest-derive = "0.3"
@ -90,7 +84,7 @@ criterion = "0.4.0"
[features]
default = []
arbitrary = [
"revm-interpreter/arbitrary",
"revm-primitives/arbitrary",
"dep:arbitrary",
"dep:proptest",
"dep:proptest-derive",

View File

@ -89,7 +89,7 @@ pub use ethers_core::{
types::{BigEndianHash, H128, H64, U64},
utils as rpc_utils,
};
pub use revm_interpreter::{ruint::aliases::U128, B160 as H160, B256 as H256, U256};
pub use revm_primitives::{ruint::aliases::U128, B160 as H160, B256 as H256, U256};
#[doc(hidden)]
mod __reexport {

View File

@ -15,8 +15,8 @@ smol_str = { version = "0.1", default-features = false, optional = true }
enr = { version = "0.7", default-features = false, optional = true }
rlp = { version = "0.5.2", default-features = false, optional = true }
ethereum-types = { version = "0.14", features = ["codec"], optional = true }
revm-primitives = {version = "1.0.0", features = ["serde"] }
reth-rlp-derive = { version = "0.1", path = "./rlp-derive", optional = true }
revm-interpreter = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32", features = [] }
[dev-dependencies]
reth-rlp = { path = ".", package = "reth-rlp", features = [

View File

@ -252,7 +252,7 @@ decode_integer!(ethnum::U256);
mod ethereum_types_support {
use super::*;
use ethereum_types::*;
use revm_interpreter::{ruint::aliases::U128 as RU128, B160, B256, U256 as RU256};
use revm_primitives::{ruint::aliases::U128 as RU128, B160, B256, U256 as RU256};
macro_rules! fixed_hash_impl {
($t:ty) => {

View File

@ -240,7 +240,7 @@ mod ethereum_types_support {
use super::*;
use ethereum_types::*;
use revm_interpreter::{ruint::aliases::U128 as RU128, B160, B256, U256 as RU256};
use revm_primitives::{ruint::aliases::U128 as RU128, B160, B256, U256 as RU256};
macro_rules! fixed_hash_impl {
($t:ty) => {

View File

@ -13,7 +13,7 @@ scale = ["codecs-derive/scale"]
postcard = ["codecs-derive/postcard"]
no_codec = ["codecs-derive/no_codec"]
arbitrary = [
"revm-interpreter/arbitrary",
"revm-primitives/arbitrary",
"dep:arbitrary",
"dep:proptest",
"dep:proptest-derive",
@ -23,9 +23,7 @@ arbitrary = [
[dependencies]
bytes = "1.2.1"
codecs-derive = { version = "0.1.0", path = "./derive", default-features = false }
revm-interpreter = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32", features = [
"serde",
] }
revm-primitives = { version = "1.0.0", features = ["serde"] }
# arbitrary utils
arbitrary = { version = "1.1.7", features = ["derive"], optional = true }
@ -33,9 +31,9 @@ proptest = { version = "1.0", optional = true }
proptest-derive = { version = "0.3", optional = true }
[dev-dependencies]
revm-interpreter = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32", features = [
revm-primitives = {version = "1.0.0", features = [
"serde",
"arbitrary",
"arbitrary"
] }
serde = "1.0"

View File

@ -1,6 +1,6 @@
use bytes::{Buf, Bytes};
pub use codecs_derive::*;
use revm_interpreter::{B160 as H160, B256 as H256, U256};
use revm_primitives::{B160 as H160, B256 as H256, U256};
/// Trait that implements the `Compact` codec.
///
@ -273,7 +273,7 @@ impl Compact for bool {
#[cfg(test)]
mod tests {
use super::*;
use revm_interpreter::B160;
use revm_primitives::B160;
pub type Address = B160;