pub struct TemporaryStore<'backing> { /* private fields */ }
Implementations§
Source§impl<'backing> TemporaryStore<'backing>
impl<'backing> TemporaryStore<'backing>
Sourcepub fn new(
store: &'backing dyn BackingStore,
input_objects: InputObjects,
tx_digest: TransactionDigest,
protocol_config: &ProtocolConfig,
) -> Self
pub fn new( store: &'backing dyn BackingStore, input_objects: InputObjects, tx_digest: TransactionDigest, protocol_config: &ProtocolConfig, ) -> Self
Creates a new store associated with an authority store, and populates it with initial objects.
pub fn objects(&self) -> &BTreeMap<ObjectID, Object>
pub fn update_object_version_and_prev_tx(&mut self)
Sourcepub fn into_inner(self) -> InnerTemporaryStore
pub fn into_inner(self) -> InnerTemporaryStore
Break up the structure and return its internal stores (objects, active_inputs, written, deleted)
pub fn to_effects( self, shared_object_refs: Vec<SharedInput>, transaction_digest: &TransactionDigest, transaction_dependencies: Vec<TransactionDigest>, gas_cost_summary: GasCostSummary, status: ExecutionStatus, gas_charger: &mut GasCharger, epoch: EpochId, ) -> (InnerTemporaryStore, TransactionEffects)
pub fn write_object(&mut self, object: Object, kind: WriteKind)
pub fn delete_object(&mut self, id: &ObjectID, kind: DeleteKindWithOldVersion)
pub fn drop_writes(&mut self)
pub fn log_event(&mut self, event: Event)
pub fn read_object(&self, id: &ObjectID) -> Option<&Object>
pub fn apply_object_changes( &mut self, changes: BTreeMap<ObjectID, ObjectChange>, )
pub fn save_loaded_runtime_objects( &mut self, loaded_runtime_objects: BTreeMap<ObjectID, DynamicallyLoadedObjectMetadata>, )
pub fn estimate_effects_size_upperbound(&self) -> usize
pub fn written_objects_size(&self) -> usize
Sourcepub fn conserve_unmetered_storage_rebate(
&mut self,
unmetered_storage_rebate: u64,
)
pub fn conserve_unmetered_storage_rebate( &mut self, unmetered_storage_rebate: u64, )
If there are unmetered storage rebate (due to system transaction), we put them into the storage rebate of 0x5 object.
Source§impl TemporaryStore<'_>
impl TemporaryStore<'_>
pub fn check_ownership_invariants( &self, sender: &SuiAddress, gas_charger: &mut GasCharger, is_epoch_change: bool, ) -> SuiResult<()>
Source§impl TemporaryStore<'_>
impl TemporaryStore<'_>
pub fn advance_epoch_safe_mode( &mut self, params: &AdvanceEpochParams, protocol_config: &ProtocolConfig, )
Source§impl TemporaryStore<'_>
impl TemporaryStore<'_>
Sourcepub fn check_sui_conserved(
&self,
gas_summary: &GasCostSummary,
advance_epoch_gas_summary: Option<(u64, u64)>,
layout_resolver: &mut impl LayoutResolver,
do_expensive_checks: bool,
) -> Result<(), ExecutionError>
pub fn check_sui_conserved( &self, gas_summary: &GasCostSummary, advance_epoch_gas_summary: Option<(u64, u64)>, layout_resolver: &mut impl LayoutResolver, do_expensive_checks: bool, ) -> Result<(), ExecutionError>
Check that this transaction neither creates nor destroys SUI. This should hold for all txes except the epoch change tx, which mints staking rewards equal to the gas fees burned in the previous epoch. Specifically, this checks two key invariants about storage fees and storage rebate:
- all SUI in storage rebate fields of input objects should flow either to the transaction storage rebate, or the transaction non-refundable storage rebate
- all SUI charged for storage should flow into the storage rebate field of some output object
If do_expensive_checks
is true, this will also check a third invariant:
- all SUI in input objects (including coins etc in the Move part of an object) should flow either to an output object, or be burned as part of computation fees or non-refundable storage rebate
This function is intended to be called after we have charged for gas + applied the storage
rebate to the gas object, but before we have updated object versions. If
do_expensive_checks
is false, this function will only check conservation of object storage
rea epoch_fees
and epoch_rebates
are only set for advance epoch transactions. The
advance epoch transaction would mint epoch_fees
amount of SUI, and burn epoch_rebates
amount of SUI. We need these information for conservation check.
Trait Implementations§
Source§impl BackingPackageStore for TemporaryStore<'_>
impl BackingPackageStore for TemporaryStore<'_>
fn get_package_object( &self, package_id: &ObjectID, ) -> SuiResult<Option<PackageObject>>
Source§impl ChildObjectResolver for TemporaryStore<'_>
impl ChildObjectResolver for TemporaryStore<'_>
Source§fn read_child_object(
&self,
parent: &ObjectID,
child: &ObjectID,
child_version_upper_bound: SequenceNumber,
) -> SuiResult<Option<Object>>
fn read_child_object( &self, parent: &ObjectID, child: &ObjectID, child_version_upper_bound: SequenceNumber, ) -> SuiResult<Option<Object>>
child
must have an ObjectOwner
ownership equal to owner
.Source§fn get_object_received_at_version(
&self,
owner: &ObjectID,
receiving_object_id: &ObjectID,
receive_object_at_version: SequenceNumber,
epoch_id: EpochId,
) -> SuiResult<Option<Object>>
fn get_object_received_at_version( &self, owner: &ObjectID, receiving_object_id: &ObjectID, receive_object_at_version: SequenceNumber, epoch_id: EpochId, ) -> SuiResult<Option<Object>>
receiving_object_id
must have an AddressOwner
ownership equal to owner
.
get_object_received_at_version
must be the exact version at which the object will be received,
and it cannot have been previously received at that version. NB: An object not existing at
that version, and not having valid access to the object will be treated exactly the same
and Ok(None)
must be returned.Source§impl ParentSync for TemporaryStore<'_>
impl ParentSync for TemporaryStore<'_>
Source§fn get_latest_parent_entry_ref_deprecated(
&self,
object_id: ObjectID,
) -> Option<ObjectRef>
fn get_latest_parent_entry_ref_deprecated( &self, object_id: ObjectID, ) -> Option<ObjectRef>
Source§impl ResourceResolver for TemporaryStore<'_>
impl ResourceResolver for TemporaryStore<'_>
Source§impl Storage for TemporaryStore<'_>
impl Storage for TemporaryStore<'_>
fn reset(&mut self)
fn read_object(&self, id: &ObjectID) -> Option<&Object>
fn record_execution_results(&mut self, results: ExecutionResults)
fn save_loaded_runtime_objects( &mut self, loaded_runtime_objects: BTreeMap<ObjectID, DynamicallyLoadedObjectMetadata>, )
fn save_wrapped_object_containers( &mut self, _wrapped_object_containers: BTreeMap<ObjectID, ObjectID>, )
Source§fn check_coin_deny_list(
&self,
_written_objects: &BTreeMap<ObjectID, Object>,
) -> DenyListResult
fn check_coin_deny_list( &self, _written_objects: &BTreeMap<ObjectID, Object>, ) -> DenyListResult
Auto Trait Implementations§
impl<'backing> !Freeze for TemporaryStore<'backing>
impl<'backing> !RefUnwindSafe for TemporaryStore<'backing>
impl<'backing> !Send for TemporaryStore<'backing>
impl<'backing> !Sync for TemporaryStore<'backing>
impl<'backing> Unpin for TemporaryStore<'backing>
impl<'backing> !UnwindSafe for TemporaryStore<'backing>
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self
to type T
. The semantics of numeric casting with the as
operator are followed, so <T as As>::as_::<U>
can be used in the same way as T as U
for numeric conversions. Read more§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> Conv for T
impl<T> Conv for T
Source§impl<T> ExecutionState for Twhere
T: StorageView + SuiResolver,
impl<T> ExecutionState for Twhere
T: StorageView + SuiResolver,
fn as_sui_resolver(&self) -> &dyn SuiResolver<Error = SuiError>
fn as_child_resolver(&self) -> &dyn ChildObjectResolver
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a Request
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered
].§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> SuiResolver for Twhere
T: ResourceResolver<Error = SuiError> + BackingPackageStore,
impl<T> SuiResolver for Twhere
T: ResourceResolver<Error = SuiError> + BackingPackageStore,
fn as_backing_package_store(&self) -> &dyn BackingPackageStore
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.