use super::*;
#[derive(Debug, Clone)]
pub(crate) enum Instruction {
AddAccount {
address: eAddress,
outcome_sender: OutcomeSender,
},
BlockUpdate {
block_number: eU256,
block_timestamp: eU256,
outcome_sender: OutcomeSender,
},
Call {
tx_env: TxEnv,
outcome_sender: OutcomeSender,
},
Cheatcode {
cheatcode: Cheatcodes,
outcome_sender: OutcomeSender,
},
Query {
environment_data: EnvironmentData,
outcome_sender: OutcomeSender,
},
SetGasPrice {
gas_price: eU256,
outcome_sender: OutcomeSender,
},
Stop(OutcomeSender),
Transaction {
tx_env: TxEnv,
outcome_sender: OutcomeSender,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub(crate) enum Outcome {
AddAccountCompleted,
BlockUpdateCompleted(ReceiptData),
CheatcodeReturn(CheatcodesReturn),
CallCompleted(ExecutionResult),
SetGasPriceCompleted,
TransactionCompleted(ExecutionResult, ReceiptData),
QueryReturn(String),
StopCompleted(ArbiterDB),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[allow(clippy::large_enum_variant)]
pub(crate) enum EnvironmentData {
BlockNumber,
BlockTimestamp,
GasPrice,
Balance(eAddress),
TransactionCount(eAddress),
Logs {
filter: Filter,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ReceiptData {
pub block_number: U64,
pub transaction_index: U64,
pub cumulative_gas_per_block: eU256,
}
#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum Cheatcodes {
Deal {
address: eAddress,
amount: eU256,
},
Load {
account: eAddress,
key: H256,
block: Option<ethers::types::BlockId>,
},
Store {
account: ethers::types::Address,
key: ethers::types::H256,
value: ethers::types::H256,
},
Access {
address: ethers::types::Address,
},
}
#[derive(Debug, Clone, Default, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum AccountStateSerializable {
NotExisting,
Touched,
StorageCleared,
#[default]
None,
}
#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CheatcodesReturn {
Load {
value: U256,
},
Store,
Deal,
Access {
info: AccountInfo,
account_state: AccountStateSerializable,
storage: HashMap<U256, U256>,
},
}