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.

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§