Skip to main content

sui_rpc_store/reader/
child_resolver.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! [`RuntimeObjectResolver`] adapter.
5//!
6//! `RuntimeObjectResolver` is one of the supertrait bounds on
7//! [`sui_types::storage::RpcStateReader`]. Its methods feed the
8//! Move runtime's dynamic-field / receive-object paths. **This
9//! adapter is read-only and does not serve Move execution**: it
10//! returns `Ok(None)` from both methods.
11//!
12//! Callers that need execution-time child-object resolution
13//! (re-running a transaction, simulating dry-runs) should keep
14//! using the validator perpetual store — this adapter is meant
15//! for the read-only RPC surface where child-object lookups never
16//! arise.
17
18use sui_consistent_store::reader::Reader;
19use sui_types::base_types::EpochId;
20use sui_types::base_types::ObjectID;
21use sui_types::base_types::SequenceNumber;
22use sui_types::error::SuiResult;
23use sui_types::object::Object;
24use sui_types::storage::{BackingPackageStore, PackageObject, RuntimeObjectResolver};
25
26use crate::reader::RpcStoreReader;
27
28impl<R: Reader + Send + Sync> BackingPackageStore for RpcStoreReader<R> {
29    fn get_package_object(&self, _package_id: &ObjectID) -> SuiResult<Option<PackageObject>> {
30        Ok(None)
31    }
32}
33
34impl<R: Reader + Send + Sync> RuntimeObjectResolver for RpcStoreReader<R> {
35    fn read_child_object(
36        &self,
37        _parent: &ObjectID,
38        _child: &ObjectID,
39        _child_version_upper_bound: SequenceNumber,
40    ) -> SuiResult<Option<Object>> {
41        Ok(None)
42    }
43
44    fn get_object_received_at_version(
45        &self,
46        _owner: &ObjectID,
47        _receiving_object_id: &ObjectID,
48        _receive_object_at_version: SequenceNumber,
49        _epoch_id: EpochId,
50    ) -> SuiResult<Option<Object>> {
51        Ok(None)
52    }
53}