Skip to main content

RuntimeObjectResolver

Trait RuntimeObjectResolver 

Source
pub trait RuntimeObjectResolver: BackingPackageStore {
    // Required methods
    fn read_child_object(
        &self,
        parent: &ObjectID,
        child: &ObjectID,
        child_version_upper_bound: SequenceNumber,
    ) -> 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>>;

    // Provided method
    fn get_package_at_version(
        &self,
        package_id: &ObjectID,
        package_version: SequenceNumber,
    ) -> Option<MovePackage> { ... }
}
Expand description

An abstraction of the (possibly distributed) store for objects. This API only allows for the retrieval of objects, not any state changes

Required Methods§

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.

Provided Methods§

Source

fn get_package_at_version( &self, package_id: &ObjectID, package_version: SequenceNumber, ) -> Option<MovePackage>

Get’s the package at the given version. Returns Some(package) only if the package_id is a MovePackage with the given package_version. Returns None in all other cases.

Since the has the possibility of doing unsequenced reads of object IDs it is important here that:

  • If the package object does not exist; or
  • If the package object exists but is not a Move package; or
  • If the package object exists and is a Move package, but the version is not the supplied version.

All return the same error.

To be extra careful, we simply return None in all cases unless the object is a package with the exact version supplied, and let the caller decide how to handle it.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<S: RuntimeObjectResolver> RuntimeObjectResolver for &S

Source§

fn read_child_object( &self, parent: &ObjectID, child: &ObjectID, child_version_upper_bound: SequenceNumber, ) -> SuiResult<Option<Object>>

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

Source§

impl<S: RuntimeObjectResolver> RuntimeObjectResolver for &mut S

Source§

fn read_child_object( &self, parent: &ObjectID, child: &ObjectID, child_version_upper_bound: SequenceNumber, ) -> SuiResult<Option<Object>>

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

Source§

impl<S: RuntimeObjectResolver> RuntimeObjectResolver for Arc<S>

Source§

fn read_child_object( &self, parent: &ObjectID, child: &ObjectID, child_version_upper_bound: SequenceNumber, ) -> SuiResult<Option<Object>>

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

Implementors§