pub struct Storage {
    pub footprint: Footprint,
    pub mode: FootprintMode,
    pub map: StorageMap,
}
Expand description

A special-purpose map from LedgerKeys to LedgerEntrys. Represents a transactional batch of contract IO from and to durable storage, while partitioning that IO between concurrently executing groups of contracts through the use of IO Footprints.

Specifically: access to each LedgerKey is mediated by the Footprint, which may be in either FootprintMode::Recording or FootprintMode::Enforcing mode.

FootprintMode::Recording mode is used to calculate Footprints during “preflight” execution of a contract. Once calculated, a recorded Footprint can be provided to “real” execution, which always runs in FootprintMode::Enforcing mode and enforces partitioned access.

Fields§

§footprint: Footprint§mode: FootprintMode§map: StorageMap

Implementations§

source§

impl Storage

source

pub fn with_enforcing_footprint_and_map( footprint: Footprint, map: StorageMap ) -> Self

Constructs a new Storage in FootprintMode::Enforcing using a given Footprint and a storage map populated with all the keys listed in the Footprint.

source

pub fn with_recording_footprint(src: Rc<dyn SnapshotSource>) -> Self

Constructs a new Storage in FootprintMode::Recording using a given SnapshotSource.

source

pub fn get( &mut self, key: &Rc<LedgerKey>, budget: &Budget ) -> Result<Rc<LedgerEntry>, HostError>

Attempts to retrieve the LedgerEntry associated with a given LedgerKey in the Storage, returning an error if the key is not found.

In FootprintMode::Recording mode, records the read LedgerKey in the Footprint as AccessType::ReadOnly (unless already recorded as AccessType::ReadWrite) and reads through to the underlying SnapshotSource, if the LedgerKey has not yet been loaded.

In FootprintMode::Enforcing mode, succeeds only if the read LedgerKey has been declared in the Footprint.

source

pub fn put( &mut self, key: &Rc<LedgerKey>, val: &Rc<LedgerEntry>, expiration_ledger: Option<u32>, budget: &Budget ) -> Result<(), HostError>

Attempts to write to the LedgerEntry associated with a given LedgerKey in the Storage.

In FootprintMode::Recording mode, records the written LedgerKey in the Footprint as AccessType::ReadWrite.

In FootprintMode::Enforcing mode, succeeds only if the written LedgerKey has been declared in the Footprint as AccessType::ReadWrite.

source

pub fn del( &mut self, key: &Rc<LedgerKey>, budget: &Budget ) -> Result<(), HostError>

Attempts to delete the LedgerEntry associated with a given LedgerKey in the Storage.

In FootprintMode::Recording mode, records the deleted LedgerKey in the Footprint as AccessType::ReadWrite.

In FootprintMode::Enforcing mode, succeeds only if the deleted LedgerKey has been declared in the Footprint as AccessType::ReadWrite.

source

pub fn has( &mut self, key: &Rc<LedgerKey>, budget: &Budget ) -> Result<bool, HostError>

Attempts to determine the presence of a LedgerEntry associated with a given LedgerKey in the Storage, returning Ok(true) if an entry with the key exists and Ok(false) if it does not.

In FootprintMode::Recording mode, records the access and reads-through to the underlying SnapshotSource.

In FootprintMode::Enforcing mode, succeeds only if the access has been declared in the Footprint.

source

pub fn bump( &mut self, host: &Host, key: Rc<LedgerKey>, low_expiration_watermark: u32, high_expiration_watermark: u32 ) -> Result<(), HostError>

Bumps key to live for at least bump_by_ledgers from now (not counting the current ledger).

This operation is only defined within a host as it relies on ledger state.

This operation does not modify any ledger entries, but does change the internal storage

Trait Implementations§

source§

impl Clone for Storage

source§

fn clone(&self) -> Storage

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Default for Storage

source§

fn default() -> Storage

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Storage

§

impl !Send for Storage

§

impl !Sync for Storage

§

impl Unpin for Storage

§

impl !UnwindSafe for Storage

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T, C> Compare<&T> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare(&self, a: &&T, b: &&T) -> Result<Ordering, <C as Compare<&T>>::Error>

source§

impl<T, U, E, C> Compare<(T, U)> for Cwhere C: Compare<T, Error = E, Error = E> + Compare<U>,

§

type Error = E

source§

fn compare( &self, a: &(T, U), b: &(T, U) ) -> Result<Ordering, <C as Compare<(T, U)>>::Error>

source§

impl<T, U, V, E, C> Compare<(T, U, V)> for Cwhere C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,

§

type Error = E

source§

fn compare( &self, a: &(T, U, V), b: &(T, U, V) ) -> Result<Ordering, <C as Compare<(T, U, V)>>::Error>

source§

impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for Cwhere C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,

source§

impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for Cwhere C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,

source§

impl<T, C> Compare<Box<T, Global>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Box<T, Global>, b: &Box<T, Global> ) -> Result<Ordering, <C as Compare<Box<T, Global>>>::Error>

source§

impl<T, C> Compare<Option<T>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Option<T>, b: &Option<T> ) -> Result<Ordering, <C as Compare<Option<T>>>::Error>

source§

impl<T, C> Compare<Rc<T, Global>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Rc<T, Global>, b: &Rc<T, Global> ) -> Result<Ordering, <C as Compare<Rc<T, Global>>>::Error>

source§

impl<T, C> Compare<Vec<T, Global>> for Cwhere C: Compare<T>,

§

type Error = <C as Compare<T>>::Error

source§

fn compare( &self, a: &Vec<T, Global>, b: &Vec<T, Global> ) -> Result<Ordering, <C as Compare<Vec<T, Global>>>::Error>

§

impl<T> Downcast for Twhere T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

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

§

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.
source§

impl<E, T, U> TryIntoVal<E, T> for Uwhere E: Env, T: TryFromVal<E, U>,

§

type Error = <T as TryFromVal<E, U>>::Error

source§

fn try_into_val(&self, env: &E) -> Result<T, <U as TryIntoVal<E, T>>::Error>

§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V