A user-friendly, idiomatic Rust SDK for the Aptos blockchain with feature parity to the TypeScript SDK.
- Full Blockchain Interaction: Connect, explore, and interact with the Aptos blockchain
- Multiple Signature Schemes: Ed25519, Secp256k1, Secp256r1 (P-256), and BLS12-381
- Transaction Building: Fluent builder pattern for constructing transactions
- Account Management: Single-key, multi-sig, and keyless (OIDC) accounts
- Type Safety: Strong Rust type system for Move contract interactions
- Modular Design: Feature flags to include only what you need
crates/aptos-sdk– Main SDK crate with async clients, account management, transaction building, and cryptocrates/aptos-sdk-macros– Procedural macros for type-safe contract bindings
- Rust toolchain 1.90+ (tracked in
rust-toolchain.toml) - Access to an Aptos fullnode REST endpoint (mainnet/testnet/devnet/localnet)
Add to your Cargo.toml:
[dependencies]
aptos-sdk = { git = "https://github.com/aptos-labs/aptos-rust-sdk", package = "aptos-sdk" }Basic usage:
use aptos_sdk::{Aptos, AptosConfig};
use aptos_sdk::account::{Account, Ed25519Account};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Connect to testnet
let aptos = Aptos::new(AptosConfig::testnet())?;
// Create a new account
let account = Ed25519Account::generate();
println!("Address: {}", account.address());
// Check balance
let balance = aptos.get_balance(account.address()).await?;
println!("Balance: {} octas", balance);
Ok(())
}| Feature | Default | Description |
|---|---|---|
ed25519 |
✓ | Ed25519 signature scheme |
secp256k1 |
✓ | Secp256k1 ECDSA signatures |
secp256r1 |
✓ | Secp256r1 (P-256) ECDSA signatures |
mnemonic |
✓ | BIP-39 mnemonic phrase support for key derivation |
indexer |
✓ | GraphQL indexer client |
faucet |
✓ | Faucet integration for testnets |
bls |
BLS12-381 signatures | |
keyless |
OIDC-based keyless authentication | |
macros |
Procedural macros for type-safe contract bindings | |
full |
Enable all features |
For the smallest possible binary:
[dependencies]
aptos-sdk = { git = "https://github.com/aptos-labs/aptos-rust-sdk", package = "aptos-sdk", default-features = false, features = ["ed25519"] }For all features:
[dependencies]
aptos-sdk = { git = "https://github.com/aptos-labs/aptos-rust-sdk", package = "aptos-sdk", features = ["full"] }See the crates/aptos-sdk/examples/ directory for complete working examples:
transfer.rs- Basic APT transferview_function.rs- Read-only view function callstransaction_data.rs- Working with transaction data
entry_function.rs- Entry function transaction buildingscript_transaction.rs- Script-based transactionssponsored_transaction.rs- Fee payer (sponsored) transactionsmulti_agent.rs- Multi-signer transactionstransaction_waiting.rs- Transaction waiting strategiesadvanced_transactions.rs- Complex transaction combinations
multi_key_account.rs- Multi-key (mixed signature) accountsmulti_sig_account.rs- MultiEd25519 threshold accountsmultisig_v2.rs- On-chain multisig (governance) accounts
deploy_module.rs- Deploy a Move modulecall_contract.rs- Call contract entry functionsread_contract_state.rs- Read contract statenft_operations.rs- NFT/Digital Asset interactionscodegen.rs- Contract binding generationcontract_bindings.rs- Using generated type-safe bindings
# Build with default features (ed25519 + secp256k1)
cargo build -p aptos-sdk
# Build with all features
cargo build -p aptos-sdk --all-features
# Release build
cargo build -p aptos-sdk --release# Run unit tests
cargo test -p aptos-sdk
# Run tests with all features
cargo test -p aptos-sdk --all-features
# Run E2E tests (requires localnet)
aptos node run-localnet --with-faucet
cargo test -p aptos-sdk --features "e2e" -- --ignored# Run clippy
cargo clippy -p aptos-sdk --all-features -- -D warnings
# Format code
cargo fmt
# Check formatting
cargo fmt -- --checkApache-2.0