Trait PrecompileProvider

Source
pub trait PrecompileProvider<CTX: ContextTr> {
    type Output;

    // Required methods
    fn set_spec(&mut self, spec: <CTX::Cfg as Cfg>::Spec) -> bool;
    fn run(
        &mut self,
        context: &mut CTX,
        address: &Address,
        inputs: &InputsImpl,
        is_static: bool,
        gas_limit: u64,
    ) -> Result<Option<Self::Output>, String>;
    fn warm_addresses(&self) -> Box<impl Iterator<Item = Address>>;
    fn contains(&self, address: &Address) -> bool;
}

Required Associated Types§

Required Methods§

Source

fn set_spec(&mut self, spec: <CTX::Cfg as Cfg>::Spec) -> bool

Sets the spec id and returns true if the spec id was changed. Initial call to set_spec will always return true.

Returned booling will determine if precompile addresses should be injected into the journal.

Source

fn run( &mut self, context: &mut CTX, address: &Address, inputs: &InputsImpl, is_static: bool, gas_limit: u64, ) -> Result<Option<Self::Output>, String>

Run the precompile.

Source

fn warm_addresses(&self) -> Box<impl Iterator<Item = Address>>

Get the warm addresses.

Source

fn contains(&self, address: &Address) -> bool

Check if the address is a precompile.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a, CTX: ContextTr, T: 'a + PrecompileProvider<CTX> + ?Sized> PrecompileProvider<CTX> for &'a mut T

Source§

type Output = <T as PrecompileProvider<CTX>>::Output

Source§

fn set_spec(&mut self, spec: <CTX::Cfg as Cfg>::Spec) -> bool

Source§

fn run( &mut self, context: &mut CTX, address: &Address, inputs: &InputsImpl, is_static: bool, gas_limit: u64, ) -> Result<Option<Self::Output>, String>

Source§

fn warm_addresses(&self) -> Box<impl Iterator<Item = Address>>

Source§

fn contains(&self, address: &Address) -> bool

Source§

impl<CTX: ContextTr, T: PrecompileProvider<CTX> + ?Sized> PrecompileProvider<CTX> for Box<T>

Source§

type Output = <T as PrecompileProvider<CTX>>::Output

Source§

fn set_spec(&mut self, spec: <CTX::Cfg as Cfg>::Spec) -> bool

Source§

fn run( &mut self, context: &mut CTX, address: &Address, inputs: &InputsImpl, is_static: bool, gas_limit: u64, ) -> Result<Option<Self::Output>, String>

Source§

fn warm_addresses(&self) -> Box<impl Iterator<Item = Address>>

Source§

fn contains(&self, address: &Address) -> bool

Implementors§

Source§

impl<CTX: ContextTr> PrecompileProvider<CTX> for EthPrecompiles

Source§

type Output = InterpreterResult