From 3948bdb76f129e89b61dd054053038acf279731e Mon Sep 17 00:00:00 2001 From: Qiwei Yang Date: Fri, 3 May 2024 14:59:15 +0800 Subject: [PATCH 1/6] feat: add trace option --- bins/revme/src/cmd/evmrunner.rs | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/bins/revme/src/cmd/evmrunner.rs b/bins/revme/src/cmd/evmrunner.rs index 1414a97054..52e0149bd1 100644 --- a/bins/revme/src/cmd/evmrunner.rs +++ b/bins/revme/src/cmd/evmrunner.rs @@ -1,6 +1,8 @@ use revm::{ db::BenchmarkDB, - primitives::{Address, Bytecode, TransactTo}, + inspector_handle_register, + inspectors::TracerEip3155, + primitives::{Address, Bytecode, Bytes, TransactTo}, Evm, }; use std::io::Error as IoError; @@ -51,6 +53,9 @@ pub struct Cmd { /// Print the state. #[structopt(long)] state: bool, + /// Print the trace. + #[structopt(long)] + trace: bool, } impl Cmd { @@ -67,14 +72,14 @@ impl Cmd { }; let bytecode = hex::decode(bytecode_str.trim()).map_err(|_| Errors::InvalidBytecode)?; - let input = hex::decode(self.input.trim()) + let input: Bytes = hex::decode(self.input.trim()) .map_err(|_| Errors::InvalidInput)? .into(); // BenchmarkDB is dummy state that implements Database trait. // the bytecode is deployed at zero address. let mut evm = Evm::builder() .with_db(BenchmarkDB::new_bytecode(Bytecode::new_raw( - bytecode.into(), + bytecode.clone().into(), ))) .modify_tx_env(|tx| { // execution globals block hash/gas_limit/coinbase/timestamp.. @@ -82,7 +87,7 @@ impl Cmd { .parse() .unwrap(); tx.transact_to = TransactTo::Call(Address::ZERO); - tx.data = input; + tx.data = input.clone(); }) .build(); @@ -99,6 +104,25 @@ impl Cmd { if self.state { println!("State: {:#?}", out.state); } + if self.trace { + println!("Traces:"); + let mut evm = Evm::builder() + .with_db(BenchmarkDB::new_bytecode(Bytecode::new_raw( + bytecode.into(), + ))) + .modify_tx_env(|tx| { + // execution globals block hash/gas_limit/coinbase/timestamp.. + tx.caller = "0x0000000000000000000000000000000000000001" + .parse() + .unwrap(); + tx.transact_to = TransactTo::Call(Address::ZERO); + tx.data = input; + }) + .with_external_context(TracerEip3155::new(Box::new(std::io::stdout()))) + .append_handler_register(inspector_handle_register) + .build(); + let _ = evm.transact(); + } } Ok(()) } From 52455a3b8e6007cf995272f22d143f26063b9d89 Mon Sep 17 00:00:00 2001 From: Qiwei Yang Date: Sat, 4 May 2024 09:25:29 +0800 Subject: [PATCH 2/6] fix: use evm.modify --- bins/revme/src/cmd/evmrunner.rs | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/bins/revme/src/cmd/evmrunner.rs b/bins/revme/src/cmd/evmrunner.rs index 52e0149bd1..ff696485e6 100644 --- a/bins/revme/src/cmd/evmrunner.rs +++ b/bins/revme/src/cmd/evmrunner.rs @@ -2,7 +2,7 @@ use revm::{ db::BenchmarkDB, inspector_handle_register, inspectors::TracerEip3155, - primitives::{Address, Bytecode, Bytes, TransactTo}, + primitives::{Address, Bytecode, TransactTo}, Evm, }; use std::io::Error as IoError; @@ -72,14 +72,14 @@ impl Cmd { }; let bytecode = hex::decode(bytecode_str.trim()).map_err(|_| Errors::InvalidBytecode)?; - let input: Bytes = hex::decode(self.input.trim()) + let input = hex::decode(self.input.trim()) .map_err(|_| Errors::InvalidInput)? .into(); // BenchmarkDB is dummy state that implements Database trait. // the bytecode is deployed at zero address. let mut evm = Evm::builder() .with_db(BenchmarkDB::new_bytecode(Bytecode::new_raw( - bytecode.clone().into(), + bytecode.into(), ))) .modify_tx_env(|tx| { // execution globals block hash/gas_limit/coinbase/timestamp.. @@ -87,7 +87,7 @@ impl Cmd { .parse() .unwrap(); tx.transact_to = TransactTo::Call(Address::ZERO); - tx.data = input.clone(); + tx.data = input; }) .build(); @@ -101,28 +101,20 @@ impl Cmd { } else { let out = evm.transact().map_err(|_| Errors::EVMError)?; println!("Result: {:#?}", out.result); - if self.state { - println!("State: {:#?}", out.state); - } if self.trace { println!("Traces:"); - let mut evm = Evm::builder() - .with_db(BenchmarkDB::new_bytecode(Bytecode::new_raw( - bytecode.into(), + let mut evm = evm + .modify() + .reset_handler_with_external_context(TracerEip3155::new(Box::new( + std::io::stdout(), ))) - .modify_tx_env(|tx| { - // execution globals block hash/gas_limit/coinbase/timestamp.. - tx.caller = "0x0000000000000000000000000000000000000001" - .parse() - .unwrap(); - tx.transact_to = TransactTo::Call(Address::ZERO); - tx.data = input; - }) - .with_external_context(TracerEip3155::new(Box::new(std::io::stdout()))) .append_handler_register(inspector_handle_register) .build(); let _ = evm.transact(); } + if self.state { + println!("State: {:#?}", out.state); + } } Ok(()) } From fbeada85e5d2b204e29180a7b67fd9f7378bb8b9 Mon Sep 17 00:00:00 2001 From: Qiwei Yang Date: Sun, 5 May 2024 08:54:06 +0800 Subject: [PATCH 3/6] fix --- bins/revme/src/cmd/evmrunner.rs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/bins/revme/src/cmd/evmrunner.rs b/bins/revme/src/cmd/evmrunner.rs index ff696485e6..aeac7a66a1 100644 --- a/bins/revme/src/cmd/evmrunner.rs +++ b/bins/revme/src/cmd/evmrunner.rs @@ -98,20 +98,22 @@ impl Cmd { microbench::bench(&bench_options, "Run bytecode", || { let _ = evm.transact().unwrap(); }); + } else if self.trace { + println!("Traces:"); + let mut evm = evm + .modify() + .reset_handler_with_external_context(TracerEip3155::new( + Box::new(std::io::stdout()), + )) + .append_handler_register(inspector_handle_register) + .build(); + + let out = evm.transact().map_err(|_| Errors::EVMError)?; + println!("Result: {:#?}", out.result); } else { let out = evm.transact().map_err(|_| Errors::EVMError)?; println!("Result: {:#?}", out.result); - if self.trace { - println!("Traces:"); - let mut evm = evm - .modify() - .reset_handler_with_external_context(TracerEip3155::new(Box::new( - std::io::stdout(), - ))) - .append_handler_register(inspector_handle_register) - .build(); - let _ = evm.transact(); - } + if self.state { println!("State: {:#?}", out.state); } From 6470ba13909bd3b7627ddc9cdb8c40ed034336ae Mon Sep 17 00:00:00 2001 From: Qiwei Yang Date: Wed, 8 May 2024 11:23:52 +0800 Subject: [PATCH 4/6] refactor --- bins/revme/src/cmd/evmrunner.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/bins/revme/src/cmd/evmrunner.rs b/bins/revme/src/cmd/evmrunner.rs index aeac7a66a1..57cddd0ea6 100644 --- a/bins/revme/src/cmd/evmrunner.rs +++ b/bins/revme/src/cmd/evmrunner.rs @@ -98,8 +98,11 @@ impl Cmd { microbench::bench(&bench_options, "Run bytecode", || { let _ = evm.transact().unwrap(); }); - } else if self.trace { - println!("Traces:"); + + return Ok(()); + } + + let out = if self.trace { let mut evm = evm .modify() .reset_handler_with_external_context(TracerEip3155::new( @@ -108,16 +111,16 @@ impl Cmd { .append_handler_register(inspector_handle_register) .build(); - let out = evm.transact().map_err(|_| Errors::EVMError)?; - println!("Result: {:#?}", out.result); + evm.transact().map_err(|_| Errors::EVMError)? } else { - let out = evm.transact().map_err(|_| Errors::EVMError)?; - println!("Result: {:#?}", out.result); + evm.transact().map_err(|_| Errors::EVMError)? + }; - if self.state { - println!("State: {:#?}", out.state); - } + println!("Result: {:#?}", out.result); + if self.state { + println!("State: {:#?}", out.state); } + Ok(()) } } From c2300ae81d1e52dc2e605dbe64cd183350e9de69 Mon Sep 17 00:00:00 2001 From: rakita Date: Wed, 8 May 2024 11:11:33 +0200 Subject: [PATCH 5/6] Update bins/revme/src/cmd/evmrunner.rs --- bins/revme/src/cmd/evmrunner.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bins/revme/src/cmd/evmrunner.rs b/bins/revme/src/cmd/evmrunner.rs index 57cddd0ea6..06e4a2ddd9 100644 --- a/bins/revme/src/cmd/evmrunner.rs +++ b/bins/revme/src/cmd/evmrunner.rs @@ -113,7 +113,9 @@ impl Cmd { evm.transact().map_err(|_| Errors::EVMError)? } else { - evm.transact().map_err(|_| Errors::EVMError)? + let out = evm.transact().map_err(|_| Errors::EVMError)?; + println!("Result: {:#?}", out.result); + out }; println!("Result: {:#?}", out.result); From 7d749bf3622d17d78e62c1467d3e28607fddec37 Mon Sep 17 00:00:00 2001 From: rakita Date: Wed, 8 May 2024 11:12:06 +0200 Subject: [PATCH 6/6] Update bins/revme/src/cmd/evmrunner.rs --- bins/revme/src/cmd/evmrunner.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/bins/revme/src/cmd/evmrunner.rs b/bins/revme/src/cmd/evmrunner.rs index 06e4a2ddd9..8c93d3182b 100644 --- a/bins/revme/src/cmd/evmrunner.rs +++ b/bins/revme/src/cmd/evmrunner.rs @@ -118,7 +118,6 @@ impl Cmd { out }; - println!("Result: {:#?}", out.result); if self.state { println!("State: {:#?}", out.state); }