From 39b680dedc35479769de7ae162f9a50b2c579207 Mon Sep 17 00:00:00 2001 From: Tony Ke Date: Thu, 24 Aug 2023 19:18:34 +0800 Subject: [PATCH] add value parameter to Inspector::selfdestruct --- crates/revm/src/evm_impl.rs | 8 +++++--- crates/revm/src/inspector.rs | 4 ++-- crates/revm/src/inspector/customprinter.rs | 11 +++++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/crates/revm/src/evm_impl.rs b/crates/revm/src/evm_impl.rs index d759af5dd2..fd4685de69 100644 --- a/crates/revm/src/evm_impl.rs +++ b/crates/revm/src/evm_impl.rs @@ -212,7 +212,7 @@ impl<'a, GSPEC: Spec, DB: Database, const INSPECT: bool> Transact }, SuccessOrHalt::Halt(reason) => ExecutionResult::Halt { reason, gas_used }, SuccessOrHalt::FatalExternalError => { - return Err(EVMError::Database(self.data.error.take().unwrap())) + return Err(EVMError::Database(self.data.error.take().unwrap())); } SuccessOrHalt::InternalContinue => { panic!("Internal return flags should remain internal {exit_reason:?}") @@ -393,7 +393,7 @@ impl<'a, GSPEC: Spec, DB: Database, const INSPECT: bool> EVMImpl<'a, GSPEC, DB, created_address: None, gas, return_value: Bytes::new(), - }) + }); } }; @@ -825,7 +825,9 @@ impl<'a, GSPEC: Spec, DB: Database + 'a, const INSPECT: bool> Host fn selfdestruct(&mut self, address: B160, target: B160) -> Option { if INSPECT { - self.inspector.selfdestruct(address, target); + let acc = self.data.journaled_state.state.get(&address).unwrap(); + self.inspector + .selfdestruct(address, target, acc.info.balance); } self.data .journaled_state diff --git a/crates/revm/src/inspector.rs b/crates/revm/src/inspector.rs index cb6d7b5c7e..9d0671953f 100644 --- a/crates/revm/src/inspector.rs +++ b/crates/revm/src/inspector.rs @@ -1,6 +1,6 @@ use crate::evm_impl::EVMData; use crate::interpreter::{CallInputs, CreateInputs, Gas, InstructionResult, Interpreter}; -use crate::primitives::{db::Database, Bytes, B160, B256}; +use crate::primitives::{db::Database, Bytes, B160, B256, U256}; use auto_impl::auto_impl; @@ -136,5 +136,5 @@ pub trait Inspector { } /// Called when a contract has been self-destructed with funds transferred to target. - fn selfdestruct(&mut self, _contract: B160, _target: B160) {} + fn selfdestruct(&mut self, _contract: B160, _target: B160, _value: U256) {} } diff --git a/crates/revm/src/inspector/customprinter.rs b/crates/revm/src/inspector/customprinter.rs index 0d028fecf7..ba69bdf249 100644 --- a/crates/revm/src/inspector/customprinter.rs +++ b/crates/revm/src/inspector/customprinter.rs @@ -2,7 +2,7 @@ //! It is a great tool if some debugging is needed. //! use crate::interpreter::{opcode, CallInputs, CreateInputs, Gas, InstructionResult, Interpreter}; -use crate::primitives::{hex, Bytes, B160}; +use crate::primitives::{hex, Bytes, B160, U256}; use crate::{inspectors::GasInspector, Database, EVMData, Inspector}; #[derive(Clone, Default)] pub struct CustomPrintTracer { @@ -89,7 +89,7 @@ impl Inspector for CustomPrintTracer { inputs: &mut CallInputs, ) -> (InstructionResult, Gas, Bytes) { println!( - "SM CALL: {:?},context:{:?}, is_static:{:?}, transfer:{:?}, input_size:{:?}", + "SM CALL: {:?}, context:{:?}, is_static:{:?}, transfer:{:?}, input_size:{:?}", inputs.contract, inputs.context, inputs.is_static, @@ -115,8 +115,11 @@ impl Inspector for CustomPrintTracer { (InstructionResult::Continue, None, Gas::new(0), Bytes::new()) } - fn selfdestruct(&mut self, contract: B160, target: B160) { - println!("SELFDESTRUCT on {contract:?} refund target: {target:?}"); + fn selfdestruct(&mut self, contract: B160, target: B160, value: U256) { + println!( + "SELFDESTRUCT: contract: {:?}, refund target: {:?}, value {:?}", + contract, target, value + ); } }