From debeb7361e254c9daa1ad313b03f64e6a9b12059 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Mon, 20 Nov 2023 19:50:21 +0100 Subject: [PATCH 1/2] Compliance fix #6 --- .github/workflows/rust.yml | 1 + jsontests/src/run.rs | 8 +++++++- src/backend/in_memory.rs | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 615634d32..5a1894291 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -38,6 +38,7 @@ jobs: cargo run --release --verbose -p jsontests -- \ jsontests/res/ethtests/GeneralStateTests/stCodeCopyTest/ \ jsontests/res/ethtests/GeneralStateTests/stExample/ \ + jsontests/res/ethtests/GeneralStateTests/stSelfBalance \ jsontests/res/ethtests/GeneralStateTests/stSLoadTest/ \ jsontests/res/ethtests/GeneralStateTests/VMTests/vmArithmeticTest/ \ jsontests/res/ethtests/GeneralStateTests/VMTests/vmBitwiseLogicOperation/ \ diff --git a/jsontests/src/run.rs b/jsontests/src/run.rs index 75a01afaa..eb4bf7331 100644 --- a/jsontests/src/run.rs +++ b/jsontests/src/run.rs @@ -81,7 +81,13 @@ pub fn run_test(_filename: &str, _test_name: &str, test: Test, debug: bool) -> R state, logs: Vec::new(), suicides: Vec::new(), - hots: BTreeSet::new(), + hots: { + let mut hots = BTreeSet::new(); + for i in 1..10 { + hots.insert((u256_to_h256(U256::from(i)).into(), None)); + } + hots + }, }], }; let mut step_backend = run_backend.clone(); diff --git a/src/backend/in_memory.rs b/src/backend/in_memory.rs index c1b8554b8..894d5c6c5 100644 --- a/src/backend/in_memory.rs +++ b/src/backend/in_memory.rs @@ -240,6 +240,10 @@ impl RuntimeBackend for InMemoryBackend { } fn deposit(&mut self, target: H160, value: U256) { + if value == U256::zero() { + return; + } + self.current_layer_mut() .state .entry(target) From 4aa91a806e558f29d75d56f35725eca568826a5f Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Mon, 20 Nov 2023 20:07:59 +0100 Subject: [PATCH 2/2] Fix order of deposit inc_nonce in transact --- src/standard/invoker/mod.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/standard/invoker/mod.rs b/src/standard/invoker/mod.rs index 565208b3c..fa631f8a0 100644 --- a/src/standard/invoker/mod.rs +++ b/src/standard/invoker/mod.rs @@ -132,6 +132,8 @@ where let gas_fee = args.gas_limit().saturating_mul(gas_price); handler.withdrawal(caller, gas_fee)?; + handler.inc_nonce(caller)?; + let address = match &args { TransactArgs::Call { address, .. } => *address, TransactArgs::Create { @@ -230,8 +232,6 @@ where handler.mark_hot(address, None); } - handler.inc_nonce(caller)?; - Ok((invoke, machine)) } TransactArgs::Create { @@ -310,19 +310,19 @@ where let refunded_fee = refunded_gas.saturating_mul(invoke.gas_price); let coinbase_reward = invoke.gas_fee.saturating_sub(refunded_fee); - handler.deposit(invoke.caller, refunded_fee); - handler.deposit(handler.block_coinbase(), coinbase_reward); - - match result { - Ok(exit) => { + match &result { + Ok(_) => { handler.pop_substate(MergeStrategy::Commit); - Ok(exit) } - Err(err) => { + Err(_) => { handler.pop_substate(MergeStrategy::Discard); - Err(err) } } + + handler.deposit(invoke.caller, refunded_fee); + handler.deposit(handler.block_coinbase(), coinbase_reward); + + result } fn enter_substack(