Skip to main content

StorageLayout

Struct StorageLayout 

Source
pub struct StorageLayout {
    pub variables: Vec<StorageVariable>,
    pub types: BTreeMap<String, StorageType>,
    pub source: Value,
    pub enum_variants: BTreeMap<String, Vec<String>>,
}
Expand description

The layout of one contract’s storage as solc emitted it.

Fields§

§variables: Vec<StorageVariable>

State variables in declaration order.

§types: BTreeMap<String, StorageType>

Types by solc’s identifier, such as t_uint256 or t_mapping(t_address,t_uint256).

§source: Value

The layout exactly as the compiler wrote it, for handing to a client that decodes slots itself.

§enum_variants: BTreeMap<String, Vec<String>>

The variants of each enum, in declaration order, keyed by the name a type label spells (Shop.Color) and by its bare name (Color). The layout itself only numbers enum values; whoever has the sources fills this in, and a value then decodes as Color.Blue rather than 2.

Implementations§

Source§

impl StorageLayout

Source

pub fn parse(value: &Value) -> SoldbResult<Self>

Parses the <Contract>_storage.json solc writes, or the storageLayout object of standard JSON output.

Source

pub fn variable(&self, label: &str) -> Option<&StorageVariable>

Source

pub fn type_of(&self, type_id: &str) -> Option<&StorageType>

Source

pub fn variable_type( &self, variable: &StorageVariable, ) -> SoldbResult<&StorageType>

The type of a variable, when the layout describes it.

Source

pub fn resolve(&self, path: &str) -> SoldbResult<StorageRef>

Resolves a path to a place in storage: a variable, a mapping entry (m[key]), an array element (a[i]), a struct member (s.member), or any chain of those.

Source

pub fn walk( &self, start: StorageRef, segments: impl IntoIterator<Item = PathSegment>, ) -> SoldbResult<StorageRef>

Follows segments from start: a mapping entry ([key]), an array element ([i]), a struct member (.member), or any chain of those. This is how a path continues from a place that is not a state variable, such as a storage pointer held by a local variable.

Source

pub fn decode( &self, reference: &StorageRef, read: &dyn Fn(&Word) -> Option<Word>, ) -> Result<DecodedStorage, Word>

Decodes the value at reference, reading each storage word it needs through read. Err names the first slot whose word was not available.

Trait Implementations§

Source§

impl Clone for StorageLayout

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StorageLayout

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for StorageLayout

Source§

impl PartialEq for StorageLayout

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for StorageLayout

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.