sui_jsonrpc/api/
indexer.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use jsonrpsee::proc_macros::rpc;
5use sui_sdk_types::{Address, Digest};
6
7use crate::msgs::{
8    DynamicFieldName,
9    DynamicFieldPage,
10    EventFilter,
11    EventID,
12    EventPage,
13    ObjectsPage,
14    Page,
15    SuiEvent,
16    SuiObjectResponse,
17    SuiObjectResponseQuery,
18    SuiTransactionBlockEffects,
19    SuiTransactionBlockResponseQuery,
20    TransactionBlocksPage,
21    TransactionFilter,
22};
23
24#[rpc(client, namespace = "suix")]
25pub trait IndexerApi {
26    /// Return the list of objects owned by an address.
27    /// Note that if the address owns more than `QUERY_MAX_RESULT_LIMIT` objects,
28    /// the pagination is not accurate, because previous page may have been updated when
29    /// the next page is fetched.
30    /// Please use suix_queryObjects if this is a concern.
31    #[method(name = "getOwnedObjects")]
32    async fn get_owned_objects(
33        &self,
34        address: Address,
35        query: Option<SuiObjectResponseQuery>,
36        cursor: Option<Address>,
37        limit: Option<usize>,
38    ) -> RpcResult<ObjectsPage>;
39
40    /// Return list of transactions for a specified query criteria.
41    #[method(name = "queryTransactionBlocks")]
42    async fn query_transaction_blocks(
43        &self,
44        query: SuiTransactionBlockResponseQuery,
45        cursor: Option<Digest>,
46        limit: Option<usize>,
47        descending_order: Option<bool>,
48    ) -> RpcResult<TransactionBlocksPage>;
49
50    /// Return list of events for a specified query criteria.
51    #[method(name = "queryEvents")]
52    async fn query_events(
53        &self,
54        query: EventFilter,
55        cursor: Option<EventID>,
56        limit: Option<usize>,
57        descending_order: Option<bool>,
58    ) -> RpcResult<EventPage>;
59
60    /// Subscribe to a stream of Sui event
61    #[subscription(name = "subscribeEvent", item = SuiEvent)]
62    fn subscribe_event(&self, filter: EventFilter);
63
64    /// Subscribe to a stream of Sui transaction effects
65    #[subscription(name = "subscribeTransaction", item = SuiTransactionBlockEffects)]
66    fn subscribe_transaction(&self, filter: TransactionFilter);
67
68    /// Return the list of dynamic field objects owned by an object.
69    #[method(name = "getDynamicFields")]
70    async fn get_dynamic_fields(
71        &self,
72        parent_object_id: Address,
73        cursor: Option<Address>,
74        limit: Option<usize>,
75    ) -> RpcResult<DynamicFieldPage>;
76
77    /// Return the dynamic field object information for a specified object
78    #[method(name = "getDynamicFieldObject")]
79    async fn get_dynamic_field_object(
80        &self,
81        parent_object_id: Address,
82        name: DynamicFieldName,
83    ) -> RpcResult<SuiObjectResponse>;
84
85    /// Return the resolved address given resolver and name
86    #[method(name = "resolveNameServiceAddress")]
87    async fn resolve_name_service_address(&self, name: String) -> RpcResult<Option<Address>>;
88
89    /// Return the resolved names given address,
90    /// if multiple names are resolved, the first one is the primary name.
91    #[method(name = "resolveNameServiceNames")]
92    async fn resolve_name_service_names(
93        &self,
94        address: Address,
95        cursor: Option<Address>,
96        limit: Option<usize>,
97    ) -> RpcResult<Page<String, Address>>;
98}