sui_transaction_builder/
lib.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Transaction building API for the [Sui] blockchain.
5//!
6//! This crate provides [`TransactionBuilder`], for constructing user transactions or PTBs
7//! (programmable transaction blocks). Inputs and commands are added incrementally, and the builder
8//! resolves them into a finalized [`Transaction`](sui_sdk_types::Transaction).
9//!
10//! [Sui]: https://sui.io
11//!
12//! # Feature flags
13//!
14//! - `intents` *(enabled by default)*: Enables high-level transaction intents (e.g.,
15//!   [`CoinWithBalance`](intent::CoinWithBalance)) and the async [`TransactionBuilder::build`]
16//!   method that resolves intents and gas via an RPC client.
17//!
18//! # Example
19//!
20//! Build a simple SUI transfer transaction offline using [`TransactionBuilder::try_build`]:
21//!
22//! ```
23//! use sui_sdk_types::Address;
24//! use sui_sdk_types::Digest;
25//! use sui_transaction_builder::ObjectInput;
26//! use sui_transaction_builder::TransactionBuilder;
27//!
28//! let mut tx = TransactionBuilder::new();
29//!
30//! // Split 1 SUI from the gas coin
31//! let amount = tx.pure(&1_000_000_000u64);
32//! let gas = tx.gas();
33//! let coins = tx.split_coins(gas, vec![amount]);
34//!
35//! // Transfer to recipient
36//! let recipient = tx.pure(&Address::ZERO);
37//! tx.transfer_objects(coins, recipient);
38//!
39//! // Set required metadata
40//! tx.set_sender(Address::ZERO);
41//! tx.set_gas_budget(500_000_000);
42//! tx.set_gas_price(1000);
43//! tx.add_gas_objects([ObjectInput::owned(Address::ZERO, 1, Digest::ZERO)]);
44//!
45//! let transaction = tx.try_build().expect("build should succeed");
46//! ```
47
48#![cfg_attr(doc_cfg, feature(doc_cfg))]
49
50mod builder;
51mod error;
52#[cfg(feature = "intents")]
53#[cfg_attr(doc_cfg, doc(cfg(feature = "intents")))]
54pub mod intent;
55
56pub use builder::Argument;
57pub use builder::Function;
58pub use builder::ObjectInput;
59pub use builder::TransactionBuilder;
60pub use error::Error;