revm_context_interface/
local.rs

1//! Local context trait [`LocalContextTr`] and related types.
2use core::{
3    cell::{Ref, RefCell},
4    ops::Range,
5};
6use primitives::{Bytes, B256};
7use std::{rc::Rc, vec::Vec};
8
9/// Local context used for caching initcode from Initcode transactions.
10pub trait LocalContextTr {
11    /// Get the local context
12    fn insert_initcodes(&mut self, initcodes: &[Bytes]);
13    /// Get validated initcode by hash. if initcode is not validated it is assumed
14    /// that validation is going to be performed inside this function.
15    fn get_validated_initcode(&mut self, hash: B256) -> Option<Bytes>;
16    /// Interpreter shared memory buffer. A reused memory buffer for calls.
17    fn shared_memory_buffer(&self) -> &Rc<RefCell<Vec<u8>>>;
18    /// Slice of the shared memory buffer returns None if range is not valid or buffer can't be borrowed.
19    fn shared_memory_buffer_slice(&self, range: Range<usize>) -> Option<Ref<'_, [u8]>> {
20        let buffer = self.shared_memory_buffer();
21        buffer.borrow().get(range.clone())?;
22        Some(Ref::map(buffer.borrow(), |b| {
23            b.get(range).unwrap_or_default()
24        }))
25    }
26    /// Clear the local context.
27    fn clear(&mut self);
28}