use alloy::primitives::{Address, U256};
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ProbeSpec {
pub label: String,
pub address: Option<Address>,
pub selector: [u8; 4],
}
impl ProbeSpec {
#[must_use]
pub const fn new(label: String, address: Option<Address>, selector: [u8; 4]) -> Self {
Self {
label,
address,
selector,
}
}
}
pub type ProbeSpecs = Vec<ProbeSpec>;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum AssessRule {
#[default]
SumOfDeltas,
ReturnValue,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct AssessOptions {
pub rule: Option<AssessRule>,
pub min_net_profit: U256,
}
impl Default for AssessOptions {
fn default() -> Self {
Self {
rule: Some(AssessRule::SumOfDeltas),
min_net_profit: U256::ZERO,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct FeePolicy {
pub market_percentile: bool,
pub override_priority_fee: u128,
}
impl Default for FeePolicy {
fn default() -> Self {
Self {
market_percentile: true,
override_priority_fee: 0,
}
}
}
impl FeePolicy {
#[must_use]
pub const fn builtin_priority_fee() -> u128 {
1_000_000_000 }
#[must_use]
pub const fn priority_fee(&self) -> u128 {
if self.market_percentile {
Self::builtin_priority_fee()
} else {
self.override_priority_fee
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ExecutionResult {
pub gross_profit: U256,
pub net_profit: U256,
pub gas_used: u64,
pub base_fee_next: u128,
pub priority_fee: u128,
pub passed: bool,
pub deltas: Vec<i128>,
}
impl ExecutionResult {
#[must_use]
pub fn deltas_to_gross(deltas: &[i128]) -> U256 {
let sum: i128 = deltas.iter().sum();
if sum >= 0 {
U256::from(sum.unsigned_abs())
} else {
U256::ZERO
}
}
}