Skip to main content

iota_sdk_grpc_client/
lib.rs

1// Copyright (c) 2026 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4//! gRPC client for IOTA node operations.
5//!
6//! This crate provides a high-level client for interacting with IOTA nodes
7//! via gRPC. It wraps the low-level proto types and provides ergonomic APIs
8//! using SDK types from `iota_types`.
9//!
10//! # Example
11//!
12//! ```no_run
13//! use iota_sdk_grpc_client::{
14//!     Client,
15//!     read_mask_fields::{ObjectReadMask, TransactionReadMask},
16//! };
17//! use iota_types::{ObjectId, TransactionDigest};
18//!
19//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
20//! let client = Client::new_localnet()?;
21//!
22//! // Get a transaction with the default field mask.
23//! // The batched reads return one result per request, so a transaction the
24//! // node cannot serve fails only its own slot.
25//! let digest: TransactionDigest = todo!();
26//! let txs = client
27//!     .get_transactions([digest], TransactionReadMask::default())
28//!     .await?;
29//! for tx in txs.body() {
30//!     match tx {
31//!         Ok(tx) => println!("Transaction digest: {:?}", tx.transaction()?.digest()?),
32//!         Err(e) => eprintln!("could not read transaction: {e}"),
33//!     }
34//! }
35//!
36//! // Get an object with the default field mask.
37//! let object_id: ObjectId = "0x2".parse()?;
38//! let objects = client
39//!     .get_objects([object_id], ObjectReadMask::default())
40//!     .await?;
41//! for object in objects.body() {
42//!     match object {
43//!         Ok(object) => println!("Object version: {:?}", object.object_reference()?.version()),
44//!         Err(e) => eprintln!("could not read object: {e}"),
45//!     }
46//! }
47//! # Ok(())
48//! # }
49//! ```
50
51pub mod api;
52mod transaction_builder_client;
53
54// Re-export all read mask constants (per-method fields)
55pub use api::{
56    // CheckpointResponse per-method masks
57    CHECKPOINT_CONTENTS_BCS,
58    CHECKPOINT_CONTENTS_DIGEST,
59    CHECKPOINT_RESPONSE_CHECKPOINT_DATA,
60    CHECKPOINT_RESPONSE_CONTENTS,
61    CHECKPOINT_RESPONSE_EVENTS,
62    CHECKPOINT_RESPONSE_EXECUTED_TRANSACTIONS,
63    CHECKPOINT_RESPONSE_SIGNATURE,
64    CHECKPOINT_RESPONSE_SIGNED_SUMMARY,
65    CHECKPOINT_RESPONSE_SUMMARY,
66    CHECKPOINT_SUMMARY_BCS,
67    CHECKPOINT_SUMMARY_DIGEST,
68    // Event per-method masks
69    EVENT_BCS,
70    EVENT_BCS_CONTENTS,
71    EVENT_JSON_CONTENTS,
72    EVENT_MODULE,
73    EVENT_PACKAGE_ID,
74    EVENT_SENDER,
75    EVENT_TYPE,
76    // ExecutedTransaction per-method masks
77    EXECUTED_TRANSACTION_CHECKPOINT,
78    EXECUTED_TRANSACTION_EFFECTS,
79    EXECUTED_TRANSACTION_EVENTS,
80    EXECUTED_TRANSACTION_INPUT_OBJECTS,
81    EXECUTED_TRANSACTION_OUTPUT_OBJECTS,
82    EXECUTED_TRANSACTION_SIGNATURES,
83    EXECUTED_TRANSACTION_TIMESTAMP,
84    EXECUTED_TRANSACTION_TRANSACTION,
85    // ExecutionError sub-fields
86    EXECUTION_ERROR_BCS_KIND,
87    EXECUTION_ERROR_COMMAND_INDEX,
88    EXECUTION_ERROR_SOURCE,
89    // Object per-method masks
90    OBJECT_BCS,
91    OBJECT_REFERENCE,
92    // SimulatedTransaction per-method masks
93    SIMULATED_TRANSACTION_EXECUTED_TRANSACTION,
94    SIMULATED_TRANSACTION_EXECUTION_RESULT,
95    SIMULATED_TRANSACTION_SUGGESTED_GAS_PRICE,
96    // Transaction / Effects / Events sub-fields
97    TRANSACTION_BCS,
98    TRANSACTION_DIGEST,
99    TRANSACTION_EFFECTS_BCS,
100    TRANSACTION_EFFECTS_DIGEST,
101    TRANSACTION_EVENTS_BCS,
102    TRANSACTION_EVENTS_DIGEST,
103};
104// Re-export types for convenience
105pub use api::{
106    CheckpointResponse, CheckpointStreamError, CheckpointStreamItem, Error, MetadataEnvelope, Page,
107    ProtocolError, ReadMask, Result, RpcStatus, execution::simulate::SimulateTransactionInput,
108};
109// Re-export all read mask constants (endpoint defaults)
110pub use api::{
111    // Endpoint defaults
112    EXECUTE_TRANSACTIONS_READ_MASK,
113    GET_CHECKPOINT_READ_MASK,
114    GET_EPOCH_READ_MASK,
115    GET_OBJECTS_READ_MASK,
116    GET_SERVICE_INFO_READ_MASK,
117    GET_TRANSACTIONS_READ_MASK,
118    LIST_DYNAMIC_FIELDS_READ_MASK,
119    LIST_OWNED_OBJECTS_READ_MASK,
120    SIMULATE_TRANSACTIONS_READ_MASK,
121};
122// Re-export query builders for convenience
123pub use api::{
124    move_package::package_versions::ListPackageVersionsQuery,
125    state::{
126        coins::GetCoinsQuery, dynamic_fields::ListDynamicFieldsQuery,
127        owned_objects::ListOwnedObjectsQuery,
128    },
129};
130// Re-export typed read mask field enums
131pub use iota_grpc_types::read_mask_fields;
132
133mod client;
134pub use client::{Client, InterceptedChannel};
135
136mod response_ext;
137pub use response_ext::ResponseExt;
138
139mod interceptors;
140pub use interceptors::HeadersInterceptor;