sui_adapter_latest::temporary_store

Struct TemporaryStore

Source
pub struct TemporaryStore<'backing> { /* private fields */ }

Implementations§

Source§

impl<'backing> TemporaryStore<'backing>

Source

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.

Source

pub fn objects(&self) -> &BTreeMap<ObjectID, Object>

Source

pub fn update_object_version_and_prev_tx(&mut self)

Source

pub fn into_inner(self) -> InnerTemporaryStore

Break up the structure and return its internal stores (objects, active_inputs, written, deleted)

Source

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)

Source

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.

Source

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.

Source

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.

Source

pub fn create_object(&mut self, object: Object)

Crate a new objcet. This is used to create objects outside of PT execution.

Source

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.

Source

pub fn drop_writes(&mut self)

Source

pub fn read_object(&self, id: &ObjectID) -> Option<&Object>

Source

pub fn save_loaded_runtime_objects( &mut self, loaded_runtime_objects: BTreeMap<ObjectID, DynamicallyLoadedObjectMetadata>, )

Source

pub fn save_wrapped_object_containers( &mut self, wrapped_object_containers: BTreeMap<ObjectID, ObjectID>, )

Source

pub fn estimate_effects_size_upperbound(&self) -> usize

Source

pub fn written_objects_size(&self) -> usize

Source

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<'_>

Source

pub fn check_ownership_invariants( &self, sender: &SuiAddress, gas_charger: &mut GasCharger, mutable_inputs: &HashSet<ObjectID>, is_epoch_change: bool, ) -> SuiResult<()>

Source§

impl TemporaryStore<'_>

Source

pub fn check_execution_results_consistency(&self) -> Result<(), ExecutionError>

Source§

impl TemporaryStore<'_>

Source

pub fn advance_epoch_safe_mode( &mut self, params: &AdvanceEpochParams, protocol_config: &ProtocolConfig, )

Source§

impl TemporaryStore<'_>

Source

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:

  1. all SUI in storage rebate fields of input objects should flow either to the transaction storage rebate, or the transaction non-refundable storage rebate
  2. 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.

Source

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<'_>

Source§

fn get_package_object( &self, package_id: &ObjectID, ) -> SuiResult<Option<PackageObject>>

Source§

impl ChildObjectResolver for TemporaryStore<'_>

Source§

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>>

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<'_>

Source§

fn get_latest_parent_entry_ref_deprecated( &self, _object_id: ObjectID, ) -> Option<ObjectRef>

This function is only called by older protocol versions. It creates an explicit dependency to tombstones, which is not desired.
Source§

impl ResourceResolver for TemporaryStore<'_>

Source§

type Error = SuiError

Source§

fn get_resource( &self, address: &AccountAddress, struct_tag: &StructTag, ) -> Result<Option<Vec<u8>>, Self::Error>

Source§

impl Storage for TemporaryStore<'_>

Source§

fn record_execution_results(&mut self, results: ExecutionResults)

Take execution results v2, and translate it back to be compatible with effects v1.

Source§

fn reset(&mut self)

Source§

fn read_object(&self, id: &ObjectID) -> Option<&Object>

Source§

fn save_loaded_runtime_objects( &mut self, loaded_runtime_objects: BTreeMap<ObjectID, DynamicallyLoadedObjectMetadata>, )

Source§

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

Check coin denylist during execution, and the number of non-gas-coin owners.

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§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<U> As for U

§

fn as_<T>(self) -> T
where T: CastFrom<U>,

Casts 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 T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> ExecutionState for T
where T: StorageView + SuiResolver,

Source§

fn as_sui_resolver(&self) -> &dyn SuiResolver<Error = SuiError>

Source§

fn as_child_resolver(&self) -> &dyn ChildObjectResolver

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a Request
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SuiResolver for T
where T: ResourceResolver<Error = SuiError> + BackingPackageStore,

Source§

fn as_backing_package_store(&self) -> &dyn BackingPackageStore

§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

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

Source§

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

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T

§

impl<T> StorageView for T
where T: Storage + ParentSync + ChildObjectResolver,

§

impl<T> TypeLayoutStore for T
where T: BackingPackageStore,