pub struct LinkedDataStore<'a> {
    pub linkage: &'a RootedLinkage,
    pub store: &'a dyn PackageStore,
}Expand description
A LinkedDataStore is a wrapper around a PackageStore (i.e., a package store where
we can also resolve types to defining IDs) along with a specific linkage. These two together
allow us to resolve modules and types in a way that is consistent with the linkage provided
and allow us to then pass this into the VM. Until we have a linkage set it is not possible to
construct a valid DataStore for execution in the VM as it needs to be able to resolve modules
under a specific linkage.
Fields§
§linkage: &'a RootedLinkage§store: &'a dyn PackageStoreImplementations§
Source§impl<'a> LinkedDataStore<'a>
 
impl<'a> LinkedDataStore<'a>
pub fn new(linkage: &'a RootedLinkage, store: &'a dyn PackageStore) -> Self
Trait Implementations§
Source§impl DataStore for &LinkedDataStore<'_>
 
impl DataStore for &LinkedDataStore<'_>
Source§fn link_context(&self) -> PartialVMResult<AccountAddress>
 
fn link_context(&self) -> PartialVMResult<AccountAddress>
The link context identifies the mapping from runtime 
ModuleIds to the ModuleIds in
storage that they are loaded from as returned by relocate.  Implementors of DataStore
are required to keep the link context stable for the duration of
Interpreter::execute_main.Source§fn relocate(&self, module_id: &ModuleId) -> PartialVMResult<ModuleId>
 
fn relocate(&self, module_id: &ModuleId) -> PartialVMResult<ModuleId>
Translate the runtime 
module_id to the on-chain ModuleId that it should be loaded from.Source§fn defining_module(
    &self,
    module_id: &ModuleId,
    struct_: &IdentStr,
) -> PartialVMResult<ModuleId>
 
fn defining_module( &self, module_id: &ModuleId, struct_: &IdentStr, ) -> PartialVMResult<ModuleId>
Translate the runtime fully-qualified struct name to the on-chain 
ModuleId that originally
defined that type.Source§fn load_module(&self, module_id: &ModuleId) -> VMResult<Vec<u8>>
 
fn load_module(&self, module_id: &ModuleId) -> VMResult<Vec<u8>>
Get the serialized format of a 
CompiledModule given a ModuleId.Source§impl DataStore for LinkedDataStore<'_>
 
impl DataStore for LinkedDataStore<'_>
Source§fn link_context(&self) -> PartialVMResult<AccountAddress>
 
fn link_context(&self) -> PartialVMResult<AccountAddress>
The link context identifies the mapping from runtime 
ModuleIds to the ModuleIds in
storage that they are loaded from as returned by relocate.  Implementors of DataStore
are required to keep the link context stable for the duration of
Interpreter::execute_main.Source§fn relocate(&self, module_id: &ModuleId) -> PartialVMResult<ModuleId>
 
fn relocate(&self, module_id: &ModuleId) -> PartialVMResult<ModuleId>
Translate the runtime 
module_id to the on-chain ModuleId that it should be loaded from.Source§fn defining_module(
    &self,
    module_id: &ModuleId,
    struct_: &IdentStr,
) -> PartialVMResult<ModuleId>
 
fn defining_module( &self, module_id: &ModuleId, struct_: &IdentStr, ) -> PartialVMResult<ModuleId>
Translate the runtime fully-qualified struct name to the on-chain 
ModuleId that originally
defined that type.Source§fn load_module(&self, module_id: &ModuleId) -> VMResult<Vec<u8>>
 
fn load_module(&self, module_id: &ModuleId) -> VMResult<Vec<u8>>
Get the serialized format of a 
CompiledModule given a ModuleId.Source§impl LinkageResolver for LinkedDataStore<'_>
 
impl LinkageResolver for LinkedDataStore<'_>
type Error = SuiError
Source§fn link_context(&self) -> AccountAddress
 
fn link_context(&self) -> AccountAddress
The link context identifies the mapping from runtime 
ModuleIds to the ModuleIds in
storage that they are loaded from as returned by relocate.Source§fn relocate(&self, module_id: &ModuleId) -> Result<ModuleId, Self::Error>
 
fn relocate(&self, module_id: &ModuleId) -> Result<ModuleId, Self::Error>
Translate the runtime 
module_id to the on-chain ModuleId that it should be loaded from.Source§fn defining_module(
    &self,
    runtime_id: &ModuleId,
    struct_: &IdentStr,
) -> Result<ModuleId, Self::Error>
 
fn defining_module( &self, runtime_id: &ModuleId, struct_: &IdentStr, ) -> Result<ModuleId, Self::Error>
Translate the runtime fully-qualified struct name to the on-chain 
ModuleId that originally
defined that type.Auto Trait Implementations§
impl<'a> Freeze for LinkedDataStore<'a>
impl<'a> !RefUnwindSafe for LinkedDataStore<'a>
impl<'a> !Send for LinkedDataStore<'a>
impl<'a> !Sync for LinkedDataStore<'a>
impl<'a> Unpin for LinkedDataStore<'a>
impl<'a> !UnwindSafe for LinkedDataStore<'a>
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>,
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 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
Mutably borrows from an owned value. Read more
§impl<T> Conv for T
 
impl<T> Conv for T
§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,
Causes 
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,
Causes 
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,
Causes 
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,
Causes 
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,
Causes 
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,
Causes 
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,
Causes 
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,
Causes 
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,
Formats each item in a sequence. Read more
§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>
Wrap the input message 
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>
Wrap the input message 
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>,
Applies the layer to a service and wraps it in [
Layered].§impl<E, T> MoveResolver for T
 
impl<E, T> MoveResolver for T
§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,
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) -> Rwhere
    R: 'a,
 
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    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) -> Rwhere
    R: 'a,
 
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    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
 
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
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
 
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
 
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows 
self, then passes self.deref() into the pipe function.§impl<T> PolicyExt for Twhere
    T: ?Sized,
 
impl<T> PolicyExt for Twhere
    T: ?Sized,
§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
Immutable access to the 
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
Mutable access to the 
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
Immutable access to the 
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
Mutable access to the 
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
Immutable access to the 
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
Mutable access to the 
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
Calls 
.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
Calls 
.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
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
 
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
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
 
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
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
 
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
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
 
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls 
.tap_deref() only in debug builds, and is erased in release
builds.