Trait zk_evm_abstractions::vm::Precompile
source · pub trait Precompile: Debug {
type CycleWitness: Clone + Debug;
// Required method
fn execute_precompile<M: Memory>(
&mut self,
monotonic_cycle_counter: u32,
query: LogQuery,
memory: &mut M,
) -> (usize, Option<(Vec<MemoryQuery>, Vec<MemoryQuery>, Vec<Self::CycleWitness>)>);
}
Expand description
Abstraction over precompile implementation. Precompile is usually a closure-forming FSM, so it must output some cycle-like witness
Required Associated Types§
type CycleWitness: Clone + Debug
Required Methods§
sourcefn execute_precompile<M: Memory>(
&mut self,
monotonic_cycle_counter: u32,
query: LogQuery,
memory: &mut M,
) -> (usize, Option<(Vec<MemoryQuery>, Vec<MemoryQuery>, Vec<Self::CycleWitness>)>)
fn execute_precompile<M: Memory>( &mut self, monotonic_cycle_counter: u32, query: LogQuery, memory: &mut M, ) -> (usize, Option<(Vec<MemoryQuery>, Vec<MemoryQuery>, Vec<Self::CycleWitness>)>)
Execute a precompile by using request and access to memory. Output number of cycles needed. May be output
- all memory reads (may be removed later on)
- all memory writes (depending on the implementation we may directly write to
memory
and also remove it) - FSM cycle witness parameters
Object Safety§
This trait is not object safe.