From 1356b2d35c55689a69cbeeb13fdc65b3712192d6 Mon Sep 17 00:00:00 2001 From: raz0r Date: Mon, 10 Jun 2024 11:50:22 +0300 Subject: [PATCH 1/3] setUp(): set env.block.number from fork --- src/evm/contract_utils.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/evm/contract_utils.rs b/src/evm/contract_utils.rs index a88d75f2..6c0a9c1e 100644 --- a/src/evm/contract_utils.rs +++ b/src/evm/contract_utils.rs @@ -1241,6 +1241,11 @@ impl ContractLoader { } } + evm_executor.host.env.block.number = EVMU256::from( + u64::from_str_radix( + &onchain_middleware.as_ref().unwrap().endpoint.block_number.trim_start_matches("0x"), + 16).unwrap()); + SetupData { evmstate: new_vm_state, env: evm_executor.host.env.clone(), From 01610783f3ad668b83e7d9a371e9ca428f5d354c Mon Sep 17 00:00:00 2001 From: raz0r Date: Mon, 10 Jun 2024 11:49:25 +0300 Subject: [PATCH 2/3] setUp(): use evmole to get abi from targetContract --- src/evm/contract_utils.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/evm/contract_utils.rs b/src/evm/contract_utils.rs index 6c0a9c1e..8418fd01 100644 --- a/src/evm/contract_utils.rs +++ b/src/evm/contract_utils.rs @@ -20,16 +20,13 @@ use glob::glob; use itertools::Itertools; use libafl::{schedulers::StdScheduler, state::HasMetadata}; use libafl_bolts::AsSlice; +use regex::Regex; use revm_primitives::{bitvec::vec, Bytecode, Env}; use serde_json::Value; use crate::{ evm::{ - middlewares::middleware::MiddlewareType, - tokens::constant_pair::ConstantPairMetadata, - types::{fixed_address, generate_random_address, EVMAddress, EVMFuzzState}, - vm::{IN_DEPLOY, SETCODE_ONLY}, - PRESET_WETH, + middlewares::middleware::MiddlewareType, onchain::abi_decompiler::fetch_abi_evmole, tokens::constant_pair::ConstantPairMetadata, types::{fixed_address, generate_random_address, EVMAddress, EVMFuzzState}, vm::{IN_DEPLOY, SETCODE_ONLY}, PRESET_WETH }, generic_vm::vm_executor::GenericVM, state::{FuzzState, HasCaller}, @@ -870,7 +867,10 @@ impl ContractLoader { error!("Failed to get code for contract at address {:?}", addr); continue; } - let abi = Self::parse_abi_str(&onchain_config.fetch_abi(addr).unwrap()); + let abi = match onchain_config.fetch_abi(addr) { + Some(abi_str) => Self::parse_abi_str(&abi_str), + None => fetch_abi_evmole(code.clone()), + }; contracts.push(ContractInfo { name: format!("{}", addr), From 26e403503064c27a2ada0bc307d9dce9b36e299a Mon Sep 17 00:00:00 2001 From: raz0r Date: Mon, 10 Jun 2024 12:23:27 +0300 Subject: [PATCH 3/3] fix fmt --- src/evm/contract_utils.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/evm/contract_utils.rs b/src/evm/contract_utils.rs index 8418fd01..3a3358ba 100644 --- a/src/evm/contract_utils.rs +++ b/src/evm/contract_utils.rs @@ -26,7 +26,12 @@ use serde_json::Value; use crate::{ evm::{ - middlewares::middleware::MiddlewareType, onchain::abi_decompiler::fetch_abi_evmole, tokens::constant_pair::ConstantPairMetadata, types::{fixed_address, generate_random_address, EVMAddress, EVMFuzzState}, vm::{IN_DEPLOY, SETCODE_ONLY}, PRESET_WETH + middlewares::middleware::MiddlewareType, + onchain::abi_decompiler::fetch_abi_evmole, + tokens::constant_pair::ConstantPairMetadata, + types::{fixed_address, generate_random_address, EVMAddress, EVMFuzzState}, + vm::{IN_DEPLOY, SETCODE_ONLY}, + PRESET_WETH, }, generic_vm::vm_executor::GenericVM, state::{FuzzState, HasCaller}, @@ -1243,8 +1248,16 @@ impl ContractLoader { evm_executor.host.env.block.number = EVMU256::from( u64::from_str_radix( - &onchain_middleware.as_ref().unwrap().endpoint.block_number.trim_start_matches("0x"), - 16).unwrap()); + &onchain_middleware + .as_ref() + .unwrap() + .endpoint + .block_number + .trim_start_matches("0x"), + 16, + ) + .unwrap(), + ); SetupData { evmstate: new_vm_state,