From 9a9e79ca1fcfda323b72fdf27af8b5e7cf6366bb Mon Sep 17 00:00:00 2001 From: Roshan Date: Mon, 8 Jul 2024 21:54:51 +0800 Subject: [PATCH 1/4] chore: fix system account issue and hertz storage patch issue on testnet --- crates/bsc/evm/src/execute.rs | 9 +- crates/bsc/evm/src/patch_hertz.rs | 972 +++++++++++++--------- crates/bsc/evm/src/post_execution.rs | 20 +- crates/optimism/evm/src/execute.rs | 19 +- crates/stages/stages/src/stages/bodies.rs | 3 +- 5 files changed, 585 insertions(+), 438 deletions(-) diff --git a/crates/bsc/evm/src/execute.rs b/crates/bsc/evm/src/execute.rs index 186edc5c0..dd82be26e 100644 --- a/crates/bsc/evm/src/execute.rs +++ b/crates/bsc/evm/src/execute.rs @@ -34,7 +34,7 @@ use revm_primitives::{ BlockEnv, CfgEnvWithHandlerCfg, EnvWithHandlerCfg, ResultAndState, TransactTo, }; use std::{collections::HashMap, num::NonZeroUsize, sync::Arc, time::Instant}; -use tracing::log::debug; +use tracing::debug; const SNAP_CACHE_NUM: usize = 2048; @@ -188,8 +188,8 @@ where .into()); } - self.patch_mainnet(&block.header, transaction, evm.db_mut()); - self.patch_chapel(&block.header, transaction, evm.db_mut()); + self.patch_mainnet_before_tx(&block.header, transaction, evm.db_mut()); + self.patch_chapel_before_tx(&block.header, transaction, evm.db_mut()); EvmConfig::fill_tx_env(evm.tx_mut(), transaction, *sender); @@ -204,6 +204,9 @@ where evm.db_mut().commit(state); + self.patch_mainnet_after_tx(&block.header, transaction, evm.db_mut()); + self.patch_chapel_after_tx(&block.header, transaction, evm.db_mut()); + // append gas used cumulative_gas_used += result.gas_used(); diff --git a/crates/bsc/evm/src/patch_hertz.rs b/crates/bsc/evm/src/patch_hertz.rs index c4b866209..55658e45d 100644 --- a/crates/bsc/evm/src/patch_hertz.rs +++ b/crates/bsc/evm/src/patch_hertz.rs @@ -1,20 +1,492 @@ use crate::execute::BscEvmExecutor; +use lazy_static::lazy_static; use reth_errors::ProviderError; use reth_evm::ConfigureEvm; use reth_primitives::{address, b256, Address, Header, TransactionSigned, B256, U256}; -use reth_revm::{ - db::{states::CacheAccount, AccountStatus::Destroyed}, - State, -}; +use reth_revm::{db::states::StorageSlot, State}; use revm_primitives::db::Database; use std::{collections::HashMap, str::FromStr}; -use tracing::log::trace; +use tracing::trace; + +struct StoragePatch { + block_hash: B256, + tx_hash: B256, + address: Address, + storage: HashMap, +} + +lazy_static! { + static ref MAINNET_PATCHES_BEFORE_TX: Vec = vec![ + // patch 1: BlockNum 33851236, txIndex 90 + StoragePatch { + block_hash: b256!( + "022296e50021d7225b75f3873e7bc5a2bf6376a08079b4368f9dee81946d623b" + ), + tx_hash: b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), + address: address!("00000000001f8b68515EfB546542397d3293CCfd"), + storage: HashMap::from([ + ( + U256::from_str( + "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ]), + }, + ]; + static ref MAINNET_PATCHES_AFTER_TX: Vec = vec![ + // patch 1: BlockNum 33851236, txIndex 90 + StoragePatch { + block_hash: b256!( + "022296e50021d7225b75f3873e7bc5a2bf6376a08079b4368f9dee81946d623b" + ), + tx_hash: b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), + address: address!("00000000001f8b68515EfB546542397d3293CCfd"), + storage: HashMap::from([ + ( + U256::from_str( + "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", + ) + .unwrap(), + U256::ZERO, + ), + ( + U256::from_str( + "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", + ) + .unwrap(), + U256::ZERO, + ), + ]), + }, + ]; + static ref CHAPEL_PATCHES_BEFORE_TX: Vec = vec![ + // patch 1: BlockNum 35547779, txIndex 196 + StoragePatch { + block_hash: b256!( + "1237cb09a7d08c187a78e777853b70be28a41bb188c5341987408623c1a4f4aa" + ), + tx_hash: b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), + address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000f6a7831804efd2cd0a", + ) + .unwrap(), + )]), + }, + // patch 2: BlockNum 35548081, txIndex 486 + StoragePatch { + block_hash: b256!( + "cdd38b3681c8f3f1da5569a893231466ab35f47d58ba85dbd7d9217f304983bf" + ), + tx_hash: b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), + address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000114be8ecea72b64003", + ) + .unwrap(), + )]), + }, + ]; + static ref CHAPEL_PATCHES_AFTER_TX: Vec = vec![ + // patch 1: BlockNum 35547779, txIndex 196 + StoragePatch { + block_hash: b256!("1237cb09a7d08c187a78e777853b70be28a41bb188c5341987408623c1a4f4aa"), + tx_hash: b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), + address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::ZERO, + )]), + }, + // patch 2: BlockNum 35548081, txIndex 486 + StoragePatch { + block_hash: b256!("cdd38b3681c8f3f1da5569a893231466ab35f47d58ba85dbd7d9217f304983bf"), + tx_hash: b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), + address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::ZERO, + )]), + }, + ]; +} impl BscEvmExecutor where EvmConfig: ConfigureEvm, { - pub(crate) fn patch_mainnet( + pub(crate) fn patch_mainnet_before_tx( &self, header: &Header, transaction: &TransactionSigned, @@ -22,359 +494,21 @@ where ) where DB: Database, { - let patches = vec![ - // patch 1: BlockNum 33851236, txIndex 89(patch before tx 89) - ( - b256!("022296e50021d7225b75f3873e7bc5a2bf6376a08079b4368f9dee81946d623b"), - b256!("7eba4edc7c1806d6ee1691d43513838931de5c94f9da56ec865721b402f775b0"), - address!("00000000001f8b68515EfB546542397d3293CCfd"), - HashMap::from([ - ( - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - U256::from_str( - "0x00000000000000000000000052db206170b430da8223651d28830e56ba3cdc04", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000002", - ) - .unwrap(), - U256::from_str( - "0x000000000000000000000000bb45f138499734bf5c0948d490c65903676ea1de", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x65c95177950b486c2071bf2304da1427b9136564150fb97266ffb318b03a71cc", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x245e58a02bec784ccbdb9e022a84af83227a4125a22a5e68fcc596c7e436434e", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x1c4534c86090a60a9120f34c7b15254913c00bda3d4b276d6edb65c9f48a913f", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000004", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000019", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1b4", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000000", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1b5", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000000", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1b6", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000000", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000005", - ) - .unwrap(), - U256::from_str( - "0x00000000000000000000000000000000000000000000000000000000000fc248", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000006", - ) - .unwrap(), - U256::from_str( - "0x00000000000000000000000000000000000000000000000000000000000fc132", - ) - .unwrap(), - ), - ]), - ), - // patch 2: BlockNum 33851236, txIndex 90(patch before tx 90) - ( - b256!("022296e50021d7225b75f3873e7bc5a2bf6376a08079b4368f9dee81946d623b"), - b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), - address!("00000000001f8b68515EfB546542397d3293CCfd"), - HashMap::from([ - ( - U256::from_str( - "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ]), - ), - ]; + if let Some(patch) = MAINNET_PATCHES_BEFORE_TX.iter().find(|patch| { + patch.block_hash == header.hash_slow() && + patch.tx_hash == transaction.recalculate_hash() + }) { + trace!( + "patch evm state for mainnet at block {:?} tx {:?}", + patch.block_hash, + patch.tx_hash + ); - apply_patch(header, transaction, state, patches); + apply_patch(state, patch.address, &patch.storage); + } } - pub(crate) fn patch_chapel( + pub(crate) fn patch_chapel_before_tx( &self, header: &Header, transaction: &TransactionSigned, @@ -382,66 +516,82 @@ where ) where DB: Database, { - let patches = vec![ - // patch 1: BlockNum 35547779, txIndex 196(patch before tx 196) - ( - b256!("1237cb09a7d08c187a78e777853b70be28a41bb188c5341987408623c1a4f4aa"), - b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), - address!("89791428868131eb109e42340ad01eb8987526b2"), - HashMap::from([( - U256::from_str( - "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000f6a7831804efd2cd0a", - ) - .unwrap(), - )]), - ), - // patch 2: BlockNum 35548081, txIndex 486(patch before tx 486) - ( - b256!("cdd38b3681c8f3f1da5569a893231466ab35f47d58ba85dbd7d9217f304983bf"), - b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), - address!("89791428868131eb109e42340ad01eb8987526b2"), - HashMap::from([( - U256::from_str( - "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000114be8ecea72b64003", - ) - .unwrap(), - )]), - ), - ]; + if let Some(patch) = CHAPEL_PATCHES_BEFORE_TX.iter().find(|patch| { + patch.block_hash == header.hash_slow() && + patch.tx_hash == transaction.recalculate_hash() + }) { + trace!( + "patch evm state for chapel at block {:?} tx {:?}", + patch.block_hash, + patch.tx_hash + ); - apply_patch(header, transaction, state, patches); + apply_patch(state, patch.address, &patch.storage); + } } -} -fn apply_patch( - header: &Header, - transaction: &TransactionSigned, - state: &mut State, - patches: Vec<(B256, B256, Address, HashMap)>, -) where - DB: Database, -{ - for (block_hash, tx_hash, address, patch) in patches { - if header.hash_slow() == block_hash && transaction.recalculate_hash() == tx_hash { - trace!("patch evm state at block {:?} tx {:?}", block_hash, tx_hash); + pub(crate) fn patch_mainnet_after_tx( + &self, + header: &Header, + transaction: &TransactionSigned, + state: &mut State, + ) where + DB: Database, + { + if let Some(patch) = MAINNET_PATCHES_AFTER_TX.iter().find(|patch| { + patch.block_hash == header.hash_slow() && + patch.tx_hash == transaction.recalculate_hash() + }) { + trace!( + "patch evm state for mainnet at block {:?} tx {:?}", + patch.block_hash, + patch.tx_hash + ); - let account = state.load_cache_account(address).unwrap().clone(); - let (info, mut storage) = account.into_components().0.unwrap(); - patch.into_iter().for_each(|(key, value)| { - storage.insert(key, value); - }); + apply_patch(state, patch.address, &patch.storage); + } + } - let mut account = CacheAccount::new_loaded(info, storage); - account.status = Destroyed; - state.cache.accounts.insert(address, account); + pub(crate) fn patch_chapel_after_tx( + &self, + header: &Header, + transaction: &TransactionSigned, + state: &mut State, + ) where + DB: Database, + { + if let Some(patch) = CHAPEL_PATCHES_AFTER_TX.iter().find(|patch| { + patch.block_hash == header.hash_slow() && + patch.tx_hash == transaction.recalculate_hash() + }) { + trace!( + "patch evm state for chapel at block {:?} tx {:?}", + patch.block_hash, + patch.tx_hash + ); + + apply_patch(state, patch.address, &patch.storage); } } } + +fn apply_patch(state: &mut State, address: Address, storage: &HashMap) +where + DB: Database, +{ + let account = state.load_cache_account(address).unwrap(); + let account_change = account.change( + account.account_info().unwrap_or_default(), + storage + .iter() + .map(|(key, value)| { + ( + *key, + StorageSlot { previous_or_original_value: U256::ZERO, present_value: *value }, + ) + }) + .collect(), + ); + + state.apply_transition(vec![(address, account_change)]); +} diff --git a/crates/bsc/evm/src/post_execution.rs b/crates/bsc/evm/src/post_execution.rs index 42c15a01f..9b32bef88 100644 --- a/crates/bsc/evm/src/post_execution.rs +++ b/crates/bsc/evm/src/post_execution.rs @@ -16,7 +16,7 @@ use reth_provider::ParliaProvider; use reth_revm::bsc::SYSTEM_ADDRESS; use revm_primitives::{db::Database, EnvWithHandlerCfg}; use std::collections::HashMap; -use tracing::log::debug; +use tracing::debug; /// Helper type for the input of post execution. #[allow(clippy::type_complexity)] @@ -269,20 +269,18 @@ where .state .load_cache_account(SYSTEM_ADDRESS) .map_err(|err| BscBlockExecutionError::ProviderInnerError { error: err.into() })?; - let (mut block_reward, transition) = system_account.drain_balance(); - if block_reward == 0 { - if header.number == 1 { - // We have to apply the transition to the system account - // even if the block reward is 0 - // because the system account is initialized in genesis. - self.state.apply_transition(vec![(SYSTEM_ADDRESS, transition)]); - } + + if header.number != 1 && + (system_account.account.is_none() || + system_account.account.as_ref().unwrap().info.balance == U256::ZERO) + { return Ok(()); } + + let (mut block_reward, transition) = system_account.drain_balance(); self.state.apply_transition(vec![(SYSTEM_ADDRESS, transition)]); - let mut balance_increment = HashMap::new(); - balance_increment.insert(validator, block_reward); + let balance_increment = HashMap::from([(validator, block_reward)]); self.state .increment_balances(balance_increment) .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; diff --git a/crates/optimism/evm/src/execute.rs b/crates/optimism/evm/src/execute.rs index 5f57312c7..23b7ee6b8 100644 --- a/crates/optimism/evm/src/execute.rs +++ b/crates/optimism/evm/src/execute.rs @@ -338,10 +338,10 @@ where let governance_token_contract_address = Address::from_str("0x4200000000000000000000000000000000000042").unwrap(); // touch in cache - let mut w_bnb_contract_account = - self.state.load_cache_account(w_bnb_contract_address).unwrap().clone(); - let mut governance_token_account = - self.state.load_cache_account(governance_token_contract_address).unwrap().clone(); + let w_bnb_contract_account = + self.state.load_cache_account(w_bnb_contract_address).unwrap(); + let governance_token_account = + self.state.load_cache_account(governance_token_contract_address).unwrap(); // change the token symbol and token name let w_bnb_contract_change = w_bnb_contract_account.change( w_bnb_contract_account.account_info().unwrap(), HashMap::from([ @@ -360,13 +360,10 @@ where // destroy governance token contract let governance_token_change = governance_token_account.selfdestruct().unwrap(); - if let Some(s) = self.state.transition_state.as_mut() { - let transitions = vec![ - (w_bnb_contract_address, w_bnb_contract_change), - (governance_token_contract_address, governance_token_change), - ]; - s.add_transitions(transitions); - } + self.state.apply_transition(vec![ + (w_bnb_contract_address, w_bnb_contract_change), + (governance_token_contract_address, governance_token_change), + ]); } // increment balances diff --git a/crates/stages/stages/src/stages/bodies.rs b/crates/stages/stages/src/stages/bodies.rs index 13a53aa40..f717622de 100644 --- a/crates/stages/stages/src/stages/bodies.rs +++ b/crates/stages/stages/src/stages/bodies.rs @@ -4,8 +4,6 @@ use std::{ }; use futures_util::TryStreamExt; -use tracing::*; - use reth_db::tables; use reth_db_api::{ cursor::{DbCursorRO, DbCursorRW}, @@ -24,6 +22,7 @@ use reth_stages_api::{ UnwindInput, UnwindOutput, }; use reth_storage_errors::provider::ProviderResult; +use tracing::*; // TODO(onbjerg): Metrics and events (gradual status for e.g. CLI) /// The body stage downloads block bodies. From 390a40a26c9281b676eebb76308f17aafa63215e Mon Sep 17 00:00:00 2001 From: Roshan Date: Mon, 8 Jul 2024 22:34:53 +0800 Subject: [PATCH 2/4] fix CI issues --- crates/optimism/evm/src/execute.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/optimism/evm/src/execute.rs b/crates/optimism/evm/src/execute.rs index 23b7ee6b8..8103f2d12 100644 --- a/crates/optimism/evm/src/execute.rs +++ b/crates/optimism/evm/src/execute.rs @@ -337,11 +337,9 @@ where // GovernanceToken contract address let governance_token_contract_address = Address::from_str("0x4200000000000000000000000000000000000042").unwrap(); - // touch in cache + let w_bnb_contract_account = self.state.load_cache_account(w_bnb_contract_address).unwrap(); - let governance_token_account = - self.state.load_cache_account(governance_token_contract_address).unwrap(); // change the token symbol and token name let w_bnb_contract_change = w_bnb_contract_account.change( w_bnb_contract_account.account_info().unwrap(), HashMap::from([ @@ -357,6 +355,9 @@ where ), ]) ); + + let governance_token_account = + self.state.load_cache_account(governance_token_contract_address).unwrap(); // destroy governance token contract let governance_token_change = governance_token_account.selfdestruct().unwrap(); From 8bd691b558ae91701bad1168689e46123c7afd01 Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 9 Jul 2024 14:30:35 +0800 Subject: [PATCH 3/4] fix review comments --- crates/bsc/evm/src/execute.rs | 8 +- crates/bsc/evm/src/patch_hertz.rs | 1016 +++++++++++++++-------------- 2 files changed, 528 insertions(+), 496 deletions(-) diff --git a/crates/bsc/evm/src/execute.rs b/crates/bsc/evm/src/execute.rs index dd82be26e..4fecd9adc 100644 --- a/crates/bsc/evm/src/execute.rs +++ b/crates/bsc/evm/src/execute.rs @@ -188,8 +188,8 @@ where .into()); } - self.patch_mainnet_before_tx(&block.header, transaction, evm.db_mut()); - self.patch_chapel_before_tx(&block.header, transaction, evm.db_mut()); + self.patch_mainnet_before_tx(transaction, evm.db_mut()); + self.patch_chapel_before_tx(transaction, evm.db_mut()); EvmConfig::fill_tx_env(evm.tx_mut(), transaction, *sender); @@ -204,8 +204,8 @@ where evm.db_mut().commit(state); - self.patch_mainnet_after_tx(&block.header, transaction, evm.db_mut()); - self.patch_chapel_after_tx(&block.header, transaction, evm.db_mut()); + self.patch_mainnet_after_tx(transaction, evm.db_mut()); + self.patch_chapel_after_tx(transaction, evm.db_mut()); // append gas used cumulative_gas_used += result.gas_used(); diff --git a/crates/bsc/evm/src/patch_hertz.rs b/crates/bsc/evm/src/patch_hertz.rs index 55658e45d..d67fe9341 100644 --- a/crates/bsc/evm/src/patch_hertz.rs +++ b/crates/bsc/evm/src/patch_hertz.rs @@ -9,418 +9,511 @@ use std::{collections::HashMap, str::FromStr}; use tracing::trace; struct StoragePatch { - block_hash: B256, - tx_hash: B256, address: Address, storage: HashMap, } lazy_static! { - static ref MAINNET_PATCHES_BEFORE_TX: Vec = vec![ - // patch 1: BlockNum 33851236, txIndex 90 - StoragePatch { - block_hash: b256!( - "022296e50021d7225b75f3873e7bc5a2bf6376a08079b4368f9dee81946d623b" + static ref MAINNET_PATCHES_BEFORE_TX: HashMap = HashMap::from([ + // patch 1: BlockNum 33851236, txIndex 90 + ( + b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), + StoragePatch { + address: address!("00000000001f8b68515EfB546542397d3293CCfd"), + storage: HashMap::from([ + ( + U256::from_str( + "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ]), + } + ) + ]); + static ref MAINNET_PATCHES_AFTER_TX: HashMap = HashMap::from([ + // patch 1: BlockNum 33851236, txIndex 90 + ( + b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), + StoragePatch { + address: address!("00000000001f8b68515EfB546542397d3293CCfd"), + storage: HashMap::from([ + ( + U256::from_str( + "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ( + U256::from_str( + "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000000000000000000001", + ) + .unwrap(), + ), + ]), + } + ) + ]); + static ref CHAPEL_PATCHES_BEFORE_TX: HashMap = HashMap::from([ + // patch 1: BlockNum 35547779, txIndex 196 + ( + b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), + StoragePatch { + address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::ZERO, + )]), + }, ), - tx_hash: b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), - address: address!("00000000001f8b68515EfB546542397d3293CCfd"), - storage: HashMap::from([ - ( - U256::from_str( - "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ( - U256::from_str( - "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000000000000000000001", - ) - .unwrap(), - ), - ]), - }, - ]; - static ref MAINNET_PATCHES_AFTER_TX: Vec = vec![ - // patch 1: BlockNum 33851236, txIndex 90 - StoragePatch { - block_hash: b256!( - "022296e50021d7225b75f3873e7bc5a2bf6376a08079b4368f9dee81946d623b" - ), - tx_hash: b256!("5217324f0711af744fe8e12d73f13fdb11805c8e29c0c095ac747b7e4563e935"), - address: address!("00000000001f8b68515EfB546542397d3293CCfd"), - storage: HashMap::from([ - ( - U256::from_str( - "0xbcfc62ca570bdb58cf9828ac51ae8d7e063a1cc0fa1aee57691220a7cd78b1c8", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x30dce49ce1a4014301bf21aad0ee16893e4dcc4a4e4be8aa10e442dd13259837", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xc0582628d787ee16fe03c8e5b5f5644d3b81989686f8312280b7a1f733145525", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xfca5cf22ff2e8d58aece8e4370cce33cd0144d48d00f40a5841df4a42527694b", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xb189302b37865d2ae522a492ff1f61a5addc1db44acbdcc4b6814c312c815f46", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xfe1f1986775fc2ac905aeaecc7b1aa8b0d6722b852c90e26edacd2dac7382489", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x36052a8ddb27fecd20e2e09da15494a0f2186bf8db36deebbbe701993f8c4aae", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x4959a566d8396b889ff4bc20e18d2497602e01e5c6013af5af7a7c4657ece3e2", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xe0b5aeb100569add952966f803cb67aca86dc6ec8b638f5a49f9e0760efa9a7a", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x632467ad388b91583f956f76488afc42846e283c962cbb215d288033ffc4fb71", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x9ad4e69f52519f7b7b8ee5ae3326d57061b429428ea0c056dd32e7a7102e79a7", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x35e130c7071699eae5288b12374ef157a15e4294e2b3a352160b7c1cd4641d82", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xa0d8279f845f63979dc292228adfa0bda117de27e44d90ac2adcd44465b225e7", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x9a100b70ffda9ed9769becdadca2b2936b217e3da4c9b9817bad30d85eab25ff", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x28d67156746295d901005e2d95ce589e7093decb638f8c132d9971fd0a37e176", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x297c4e115b5df76bcd5a1654b8032661680a1803e30a0774cb42bb01891e6d97", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x5f71b88f1032d27d8866948fc9c49525f3e584bdd52a66de6060a7b1f767326f", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xe6d8ddf6a0bbeb4840f48f0c4ffda9affa4675354bdb7d721235297f5a094f54", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x30ba10aef6238bf19667aaa988b18b72adb4724c016e19eb64bbb52808d1a842", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0x9c6806a4d6a99e4869b9a4aaf80b0a3bf5f5240a1d6032ed82edf0e86f2a2467", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xe8480d613bbf3b979aee2de4487496167735bb73df024d988e1795b3c7fa559a", - ) - .unwrap(), - U256::ZERO, - ), - ( - U256::from_str( - "0xebfaec01f898f7f0e2abdb4b0aee3dfbf5ec2b287b1e92f9b62940f85d5f5bac", - ) - .unwrap(), - U256::ZERO, - ), - ]), - }, - ]; - static ref CHAPEL_PATCHES_BEFORE_TX: Vec = vec![ - // patch 1: BlockNum 35547779, txIndex 196 - StoragePatch { - block_hash: b256!( - "1237cb09a7d08c187a78e777853b70be28a41bb188c5341987408623c1a4f4aa" + // patch 2: BlockNum 35548081, txIndex 486 + ( + b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), + StoragePatch { + address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::from_str( + "0x0000000000000000000000000000000000000000000000114be8ecea72b64003", + ) + .unwrap(), + )]), + }, ), - tx_hash: b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), + ]); + static ref CHAPEL_PATCHES_AFTER_TX: HashMap = HashMap::from([ + // patch 1: BlockNum 35547779, txIndex 196 + ( + b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), + StoragePatch { address: address!("89791428868131eb109e42340ad01eb8987526b2"), storage: HashMap::from([( U256::from_str( @@ -432,54 +525,21 @@ lazy_static! { ) .unwrap(), )]), - }, - // patch 2: BlockNum 35548081, txIndex 486 - StoragePatch { - block_hash: b256!( - "cdd38b3681c8f3f1da5569a893231466ab35f47d58ba85dbd7d9217f304983bf" + }, ), - tx_hash: b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), - address: address!("89791428868131eb109e42340ad01eb8987526b2"), - storage: HashMap::from([( - U256::from_str( - "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", - ) - .unwrap(), - U256::from_str( - "0x0000000000000000000000000000000000000000000000114be8ecea72b64003", - ) - .unwrap(), - )]), - }, - ]; - static ref CHAPEL_PATCHES_AFTER_TX: Vec = vec![ - // patch 1: BlockNum 35547779, txIndex 196 - StoragePatch { - block_hash: b256!("1237cb09a7d08c187a78e777853b70be28a41bb188c5341987408623c1a4f4aa"), - tx_hash: b256!("7ce9a3cf77108fcc85c1e84e88e363e3335eca515dfcf2feb2011729878b13a7"), - address: address!("89791428868131eb109e42340ad01eb8987526b2"), - storage: HashMap::from([( - U256::from_str( - "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", - ) - .unwrap(), - U256::ZERO, - )]), - }, - // patch 2: BlockNum 35548081, txIndex 486 - StoragePatch { - block_hash: b256!("cdd38b3681c8f3f1da5569a893231466ab35f47d58ba85dbd7d9217f304983bf"), - tx_hash: b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), - address: address!("89791428868131eb109e42340ad01eb8987526b2"), - storage: HashMap::from([( - U256::from_str( - "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", - ) - .unwrap(), - U256::ZERO, - )]), - }, - ]; + // patch 2: BlockNum 35548081, txIndex 486 + ( + b256!("e3895eb95605d6b43ceec7876e6ff5d1c903e572bf83a08675cb684c047a695c"), + StoragePatch { address: address!("89791428868131eb109e42340ad01eb8987526b2"), + storage: HashMap::from([( + U256::from_str( + "0xf1e9242398de526b8dd9c25d38e65fbb01926b8940377762d7884b8b0dcdc3b0", + ) + .unwrap(), + U256::ZERO, + )]),}, + ), + ]); } impl BscEvmExecutor @@ -488,21 +548,14 @@ where { pub(crate) fn patch_mainnet_before_tx( &self, - header: &Header, transaction: &TransactionSigned, state: &mut State, ) where DB: Database, { - if let Some(patch) = MAINNET_PATCHES_BEFORE_TX.iter().find(|patch| { - patch.block_hash == header.hash_slow() && - patch.tx_hash == transaction.recalculate_hash() - }) { - trace!( - "patch evm state for mainnet at block {:?} tx {:?}", - patch.block_hash, - patch.tx_hash - ); + let tx_hash = transaction.recalculate_hash(); + if let Some(patch) = MAINNET_PATCHES_BEFORE_TX.get(&tx_hash) { + trace!("patch evm state for mainnet before tx {:?}", tx_hash); apply_patch(state, patch.address, &patch.storage); } @@ -510,21 +563,14 @@ where pub(crate) fn patch_chapel_before_tx( &self, - header: &Header, transaction: &TransactionSigned, state: &mut State, ) where DB: Database, { - if let Some(patch) = CHAPEL_PATCHES_BEFORE_TX.iter().find(|patch| { - patch.block_hash == header.hash_slow() && - patch.tx_hash == transaction.recalculate_hash() - }) { - trace!( - "patch evm state for chapel at block {:?} tx {:?}", - patch.block_hash, - patch.tx_hash - ); + let tx_hash = transaction.recalculate_hash(); + if let Some(patch) = CHAPEL_PATCHES_BEFORE_TX.get(&tx_hash) { + trace!("patch evm state for chapel before tx {:?}", tx_hash); apply_patch(state, patch.address, &patch.storage); } @@ -532,21 +578,14 @@ where pub(crate) fn patch_mainnet_after_tx( &self, - header: &Header, transaction: &TransactionSigned, state: &mut State, ) where DB: Database, { - if let Some(patch) = MAINNET_PATCHES_AFTER_TX.iter().find(|patch| { - patch.block_hash == header.hash_slow() && - patch.tx_hash == transaction.recalculate_hash() - }) { - trace!( - "patch evm state for mainnet at block {:?} tx {:?}", - patch.block_hash, - patch.tx_hash - ); + let tx_hash = transaction.recalculate_hash(); + if let Some(patch) = MAINNET_PATCHES_AFTER_TX.get(&tx_hash) { + trace!("patch evm state for mainnet after tx {:?}", tx_hash); apply_patch(state, patch.address, &patch.storage); } @@ -554,21 +593,14 @@ where pub(crate) fn patch_chapel_after_tx( &self, - header: &Header, transaction: &TransactionSigned, state: &mut State, ) where DB: Database, { - if let Some(patch) = CHAPEL_PATCHES_AFTER_TX.iter().find(|patch| { - patch.block_hash == header.hash_slow() && - patch.tx_hash == transaction.recalculate_hash() - }) { - trace!( - "patch evm state for chapel at block {:?} tx {:?}", - patch.block_hash, - patch.tx_hash - ); + let tx_hash = transaction.recalculate_hash(); + if let Some(patch) = CHAPEL_PATCHES_AFTER_TX.get(&tx_hash) { + trace!("patch evm state for chapel after tx {:?}", tx_hash); apply_patch(state, patch.address, &patch.storage); } From 543e7de7c19b8fc753c2339c19759c2361f98e44 Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 9 Jul 2024 14:49:38 +0800 Subject: [PATCH 4/4] fix CI issues --- crates/bsc/evm/src/patch_hertz.rs | 2 +- crates/net/eth-wire/src/p2pstream.rs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/bsc/evm/src/patch_hertz.rs b/crates/bsc/evm/src/patch_hertz.rs index d67fe9341..a6b2f931a 100644 --- a/crates/bsc/evm/src/patch_hertz.rs +++ b/crates/bsc/evm/src/patch_hertz.rs @@ -2,7 +2,7 @@ use crate::execute::BscEvmExecutor; use lazy_static::lazy_static; use reth_errors::ProviderError; use reth_evm::ConfigureEvm; -use reth_primitives::{address, b256, Address, Header, TransactionSigned, B256, U256}; +use reth_primitives::{address, b256, Address, TransactionSigned, B256, U256}; use reth_revm::{db::states::StorageSlot, State}; use revm_primitives::db::Database; use std::{collections::HashMap, str::FromStr}; diff --git a/crates/net/eth-wire/src/p2pstream.rs b/crates/net/eth-wire/src/p2pstream.rs index 23f106da9..fb80048f0 100644 --- a/crates/net/eth-wire/src/p2pstream.rs +++ b/crates/net/eth-wire/src/p2pstream.rs @@ -478,11 +478,10 @@ where // // It's possible we already tried to RLP decode this, but it was snappy // compressed, so we need to RLP decode it again. - let reason = DisconnectReason::decode(&mut &decompress_buf[1..]).map_err(|err| { + let reason = DisconnectReason::decode(&mut &decompress_buf[1..]).inspect_err(|&err| { debug!( %err, msg=%hex::encode(&decompress_buf[1..]), "Failed to decode disconnect message from peer" ); - err })?; return Poll::Ready(Some(Err(P2PStreamError::Disconnected(reason)))) }