mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
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:
88
Cargo.lock
generated
88
Cargo.lock
generated
@ -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"
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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,
|
||||
}
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 = [
|
||||
|
||||
@ -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) => {
|
||||
|
||||
@ -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) => {
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user