pub struct Storage {
pub footprint: Footprint,
pub map: StorageMap,
/* private fields */
}
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
§map: StorageMap
Implementations§
Source§impl Storage
impl Storage
Sourcepub fn check_supported_ledger_entry_type(
le: &LedgerEntry,
) -> Result<(), HostError>
pub fn check_supported_ledger_entry_type( le: &LedgerEntry, ) -> Result<(), HostError>
Only a subset of Stellar’s XDR ledger key or entry types are supported by Soroban: accounts, trustlines, contract code and data. The rest are never used by stellar-core when interacting with the Soroban host, nor does the Soroban host ever generate any. Therefore the storage system will reject them with ScErrorCode::InternalError if they ever occur.
Sourcepub fn check_supported_ledger_key_type(lk: &LedgerKey) -> Result<(), HostError>
pub fn check_supported_ledger_key_type(lk: &LedgerKey) -> Result<(), HostError>
Only a subset of Stellar’s XDR ledger key or entry types are supported by Soroban: accounts, trustlines, contract code and data. The rest are never used by stellar-core when interacting with the Soroban host, nor does the Soroban host ever generate any. Therefore the storage system will reject them with ScErrorCode::InternalError if they ever occur.
Sourcepub fn with_enforcing_footprint_and_map(
footprint: Footprint,
map: StorageMap,
) -> Self
pub fn with_enforcing_footprint_and_map( footprint: Footprint, map: StorageMap, ) -> Self
Sourcepub fn with_recording_footprint(src: Rc<dyn SnapshotSource>) -> Self
pub fn with_recording_footprint(src: Rc<dyn SnapshotSource>) -> Self
Constructs a new Storage in [FootprintMode::Recording] using a given SnapshotSource.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Storage
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W), b: &(T, U, V, W), ) -> Result<Ordering, <C as Compare<(T, U, V, W)>>::Error>
Source§impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W, X), b: &(T, U, V, W, X), ) -> Result<Ordering, <C as Compare<(T, U, V, W, X)>>::Error>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more