sui_rpc_store/reader/
child_resolver.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! [`ChildObjectResolver`] adapter.
5//!
6//! `ChildObjectResolver` 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::ChildObjectResolver;
25
26use crate::reader::RpcStoreReader;
27
28impl<R: Reader + Send + Sync> ChildObjectResolver for RpcStoreReader<R> {
29    fn read_child_object(
30        &self,
31        _parent: &ObjectID,
32        _child: &ObjectID,
33        _child_version_upper_bound: SequenceNumber,
34    ) -> SuiResult<Option<Object>> {
35        Ok(None)
36    }
37
38    fn get_object_received_at_version(
39        &self,
40        _owner: &ObjectID,
41        _receiving_object_id: &ObjectID,
42        _receive_object_at_version: SequenceNumber,
43        _epoch_id: EpochId,
44    ) -> SuiResult<Option<Object>> {
45        Ok(None)
46    }
47}