An open API service indexing awesome lists of open source software.

https://github.com/aptos-labs/aptos-rust-sdk

Aptos Rust SDK
https://github.com/aptos-labs/aptos-rust-sdk

aptos aptos-sdk sdk-rust

Last synced: 3 months ago
JSON representation

Aptos Rust SDK

Awesome Lists containing this project

README

          

# Aptos Rust SDK

A user-friendly, idiomatic Rust SDK for the Aptos blockchain with feature parity to the TypeScript SDK.

## Features

- **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

## Workspace Layout

- `crates/aptos-sdk` – Main SDK crate with async clients, account management, transaction building, and crypto
- `crates/aptos-sdk-macros` – Procedural macros for type-safe contract bindings

## Prerequisites

- Rust toolchain 1.90+ (tracked in `rust-toolchain.toml`)
- Access to an Aptos fullnode REST endpoint (mainnet/testnet/devnet/localnet)

## Quick Start

Add to your `Cargo.toml`:

```toml
[dependencies]
aptos-sdk = { git = "https://github.com/aptos-labs/aptos-rust-sdk", package = "aptos-sdk" }
```

Basic usage:

```rust
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 Flags

| 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 |

### Minimal Build

For the smallest possible binary:

```toml
[dependencies]
aptos-sdk = { git = "https://github.com/aptos-labs/aptos-rust-sdk", package = "aptos-sdk", default-features = false, features = ["ed25519"] }
```

### Full Build

For all features:

```toml
[dependencies]
aptos-sdk = { git = "https://github.com/aptos-labs/aptos-rust-sdk", package = "aptos-sdk", features = ["full"] }
```

## Examples

See the [`crates/aptos-sdk/examples/`](crates/aptos-sdk/examples/) directory for complete working examples:

### Basic Operations
- [`transfer.rs`](crates/aptos-sdk/examples/transfer.rs) - Basic APT transfer
- [`view_function.rs`](crates/aptos-sdk/examples/view_function.rs) - Read-only view function calls
- [`transaction_data.rs`](crates/aptos-sdk/examples/transaction_data.rs) - Working with transaction data

### Advanced Transactions
- [`entry_function.rs`](crates/aptos-sdk/examples/entry_function.rs) - Entry function transaction building
- [`script_transaction.rs`](crates/aptos-sdk/examples/script_transaction.rs) - Script-based transactions
- [`sponsored_transaction.rs`](crates/aptos-sdk/examples/sponsored_transaction.rs) - Fee payer (sponsored) transactions
- [`multi_agent.rs`](crates/aptos-sdk/examples/multi_agent.rs) - Multi-signer transactions
- [`transaction_waiting.rs`](crates/aptos-sdk/examples/transaction_waiting.rs) - Transaction waiting strategies
- [`advanced_transactions.rs`](crates/aptos-sdk/examples/advanced_transactions.rs) - Complex transaction combinations

### Account Types
- [`multi_key_account.rs`](crates/aptos-sdk/examples/multi_key_account.rs) - Multi-key (mixed signature) accounts
- [`multi_sig_account.rs`](crates/aptos-sdk/examples/multi_sig_account.rs) - MultiEd25519 threshold accounts
- [`multisig_v2.rs`](crates/aptos-sdk/examples/multisig_v2.rs) - On-chain multisig (governance) accounts

### Smart Contracts
- [`deploy_module.rs`](crates/aptos-sdk/examples/deploy_module.rs) - Deploy a Move module
- [`call_contract.rs`](crates/aptos-sdk/examples/call_contract.rs) - Call contract entry functions
- [`read_contract_state.rs`](crates/aptos-sdk/examples/read_contract_state.rs) - Read contract state
- [`nft_operations.rs`](crates/aptos-sdk/examples/nft_operations.rs) - NFT/Digital Asset interactions
- [`codegen.rs`](crates/aptos-sdk/examples/codegen.rs) - Contract binding generation
- [`contract_bindings.rs`](crates/aptos-sdk/examples/contract_bindings.rs) - Using generated type-safe bindings

## Development

### Building

```bash
# 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
```

### Testing

```bash
# 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
```

### Linting and Formatting

```bash
# Run clippy
cargo clippy -p aptos-sdk --all-features -- -D warnings

# Format code
cargo fmt

# Check formatting
cargo fmt -- --check
```

## Resources

- [Aptos Developer Documentation](https://aptos.dev)
- [TypeScript SDK](https://github.com/aptos-labs/aptos-ts-sdk)

## License

Apache-2.0