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,
receiving_objects: Vec<ObjectRef>,
tx_digest: TransactionDigest,
protocol_config: &'backing ProtocolConfig,
cur_epoch: EpochId,
) -> Self
pub fn new( store: &'backing dyn BackingStore, input_objects: InputObjects, receiving_objects: Vec<ObjectRef>, tx_digest: TransactionDigest, protocol_config: &'backing ProtocolConfig, cur_epoch: EpochId, ) -> 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 into_effects( self, shared_object_refs: Vec<SharedInput>, transaction_digest: &TransactionDigest, transaction_dependencies: BTreeSet<TransactionDigest>, gas_cost_summary: GasCostSummary, status: ExecutionStatus, gas_charger: &mut GasCharger, epoch: EpochId, ) -> (InnerTemporaryStore, TransactionEffects)
Sourcepub fn mutate_input_object(&mut self, object: Object)
pub fn mutate_input_object(&mut self, object: Object)
Mutate a mutable input object. This is used to mutate input objects outside of PT execution.
Sourcepub fn mutate_child_object(&mut self, old_object: Object, new_object: Object)
pub fn mutate_child_object(&mut self, old_object: Object, new_object: Object)
Mutate a child object outside of PT. This should be used extremely rarely. Currently it’s only used by advance_epoch_safe_mode because it’s all native without PT. This should almost never be used otherwise.
Sourcepub fn upgrade_system_package(&mut self, package: Object)
pub fn upgrade_system_package(&mut self, package: Object)
Upgrade system package during epoch change. This requires special treatment since the system package to be upgraded is not in the input objects. We could probably fix above to make it less special.
Sourcepub fn create_object(&mut self, object: Object)
pub fn create_object(&mut self, object: Object)
Crate a new objcet. This is used to create objects outside of PT execution.
Sourcepub fn delete_input_object(&mut self, id: &ObjectID)
pub fn delete_input_object(&mut self, id: &ObjectID)
Delete a mutable input object. This is used to delete input objects outside of PT execution.
pub fn drop_writes(&mut self)
pub fn read_object(&self, id: &ObjectID) -> Option<&Object>
pub fn save_loaded_runtime_objects( &mut self, loaded_runtime_objects: BTreeMap<ObjectID, DynamicallyLoadedObjectMetadata>, )
pub fn save_wrapped_object_containers( &mut self, wrapped_object_containers: BTreeMap<ObjectID, ObjectID>, )
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. TODO: This will not work for potential future new system transactions if 0x5 is not in the input. We should fix this.
Source§impl TemporaryStore<'_>
impl TemporaryStore<'_>
pub fn check_ownership_invariants( &self, sender: &SuiAddress, gas_charger: &mut GasCharger, mutable_inputs: &HashSet<ObjectID>, is_epoch_change: bool, ) -> SuiResult<()>
Source§impl TemporaryStore<'_>
impl TemporaryStore<'_>
pub fn check_execution_results_consistency(&self) -> Result<(), ExecutionError>
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,
simple_conservation_checks: bool,
gas_summary: &GasCostSummary,
) -> Result<(), ExecutionError>
pub fn check_sui_conserved( &self, simple_conservation_checks: bool, gas_summary: &GasCostSummary, ) -> 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
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.
Sourcepub fn check_sui_conserved_expensive(
&self,
gas_summary: &GasCostSummary,
advance_epoch_gas_summary: Option<(u64, u64)>,
layout_resolver: &mut impl LayoutResolver,
) -> Result<(), ExecutionError>
pub fn check_sui_conserved_expensive( &self, gas_summary: &GasCostSummary, advance_epoch_gas_summary: Option<(u64, u64)>, layout_resolver: &mut impl LayoutResolver, ) -> Result<(), ExecutionError>
Check that this transaction neither creates nor destroys SUI.
This more expensive check will check a third invariant on top of the 2 performed
by check_sui_conserved
above:
- 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. The
advance epoch transaction would mint epoch_fees
amount of SUI, and burn epoch_rebates
amount of SUI. We need these information for this 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<'_>
Source§fn record_execution_results(&mut self, results: ExecutionResults)
fn record_execution_results(&mut self, results: ExecutionResults)
Take execution results v2, and translate it back to be compatible with effects v1.
fn reset(&mut self)
fn read_object(&self, id: &ObjectID) -> Option<&Object>
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.