use alloy_primitives::{Address, U256};
use alloy_sol_types::SolCall;
use revm::primitives::{Log, Output};
#[derive(Clone)]
pub struct Transaction {
pub function_selector: [u8; 4],
pub callee: Address,
pub transact_to: Address,
pub args: Vec<u8>,
pub gas_priority_fee: Option<U256>,
pub nonce: Option<u64>,
pub value: U256,
pub checked: bool,
}
impl Transaction {
pub fn new<T: SolCall>(
callee: Address,
contract: Address,
args: T,
gas_priority_fee: Option<U256>,
nonce: Option<u64>,
value: U256,
checked: bool,
) -> Self {
Transaction {
function_selector: T::SELECTOR,
callee,
transact_to: contract,
args: args.abi_encode(),
gas_priority_fee,
nonce,
value,
checked,
}
}
pub fn basic<T: SolCall>(callee: Address, contract: Address, args: T, checked: bool) -> Self {
Transaction {
function_selector: T::SELECTOR,
callee,
transact_to: contract,
args: args.abi_encode(),
gas_priority_fee: None,
nonce: None,
value: U256::ZERO,
checked,
}
}
}
pub struct TransactionResult {
pub success: bool,
pub output: Output,
pub events: Option<Event>,
}
pub struct Event {
pub success: bool,
pub function_selector: [u8; 4],
pub logs: Vec<Log>,
pub step: usize,
pub sequence: usize,
}