sui_adapter_v0::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, tx_digest: TransactionDigest, protocol_config: &ProtocolConfig, ) -> 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 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)

Source

pub fn write_object(&mut self, object: Object, kind: WriteKind)

Source

pub fn delete_object(&mut self, id: &ObjectID, kind: DeleteKindWithOldVersion)

Source

pub fn drop_writes(&mut self)

Source

pub fn log_event(&mut self, event: Event)

Source

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

Source

pub fn apply_object_changes( &mut self, changes: BTreeMap<ObjectID, ObjectChange>, )

Source

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

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.

Source§

impl TemporaryStore<'_>

Source

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

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

  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

If do_expensive_checks is true, this will also check a third invariant:

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

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 reset(&mut self)

Source§

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

Source§

fn record_execution_results(&mut self, results: ExecutionResults)

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,