Aleo Rust SDK
A Rust SDK for interacting with the Aleo blockchain — account management, program loading, local execution with zero-knowledge proof generation, network querying, transaction broadcasting, and live Merkle path fetching for private transfers (via Provable API v2).
Why this SDK? The official ProvableHQ/aleo-rust has been archived and is no longer maintained. This SDK provides an up-to-date implementation using snarkVM 4.10.0 and the current Aleo testnet endpoints.
Table of Contents
- Packages
- Features
- Architecture
- Installation
- Quick Start
- Examples
- Roadmap
- CLI Tools
- Related Projects
- Development
- Pre-commit Quality Gates
- Contributing
- License
Packages
| Package | crates.io | docs.rs | Description |
|---|---|---|---|
| aleo-rust-sdk | crates.io | docs.rs | Meta-package — all modules below |
| aleo-rust-sdk (account) | — | docs | Key chain: PrivateKey → ViewKey → ComputeKey → Address |
| aleo-rust-sdk (program) | — | docs | Program loading, parsing, inspection |
| aleo-rust-sdk (execution) | — | docs | Authorize, execute, prove, package transactions |
| aleo-rust-sdk (network) | — | docs | v2 JSON-RPC + REST HTTP client + ProvableQuery (live state path) |
| aleo-rust-sdk (record) | — | docs | Record discovery, decryption, and coin selection |
| aleo-rust-sdk (client) | — | docs | High-level AleoClient orchestrator |
The CLI tool aleo-cli is a separate crate that consumes this SDK.
Features
| Category | Feature |
|---|---|
| 🔑 Account Management | Generate, import, and derive Aleo accounts (PrivateKey, ViewKey, ComputeKey, Address). Full key derivation chain. |
| 📦 Program Loading | Fetch programs from the network via REST API, parse .aleo source files, inspect function/mapping definitions. |
| ⚡ Local Execution | Authorize and execute Aleo program transitions locally without broadcasting — ideal for dry-runs and testing. |
| 🔐 Proof Generation | Generate zero-knowledge proofs (Varuna V2) for local execution. Fee proving with V0 fee keys for testnet. |
| 🌐 Network Queries | Query block height, state root, program source, and mapping values via REST + JSON-RPC. |
| 🔗 Live State Paths (v0.5.0+) | ProvableQuery fetches real Merkle paths from Provable API v2 (api.provable.com/v2/testnet/statePath/{commitment}) — no dummy queries, no 502 errors. |
| 📋 Record Management | Fetch, decrypt, and filter private credits.aleo records by owner. Scan record ciphertexts across block ranges. |
| 🚀 Transaction Broadcasting | Submit serialized transactions to the network and poll for confirmation. |
| 🏗️ High-level Client | AleoClient orchestrates the full lifecycle: account → program → execute → prove → broadcast. |
Architecture
┌─────────────────────────────────────────────────────┐
│ AleoClient │
│ (high-level orchestrator — account, program, │
│ execute, prove, broadcast in one place) │
├──────────┬──────────┬──────────┬──────────────────────┤
│ account │ program │ execution│ network │
│ │ │ │ │ │
│ │ │ │ │ AleoHttpClient │
│ PK → VK │ parse │ auth │ ├─ REST (v2) │
│ CK → ADDR│ inspect │ execute │ ├─ JSON-RPC │
│ │ │ from_net │ prove │ ├─ ProvableQuery │
│ ▼ │ ▼ │ ▼ │ ▼ │
├──────────┴──────────┴──────────┴──────────────────────┤
│ record │
│ AleoRecord · RecordScanner · RecordManager · CoinSel │
├────────────────────────────────────────────────────────┤
│ snarkVM 4.10.0 (Process<TestnetV0>) │
│ reqwest (async HTTP) — tokio runtime │
└──────────────────────────────────────────────────────┘
v0.5.0+ new: ProvableQuery (in the network layer) replaces the dummy FixedStateRootQuery. It fetches live Merkle state paths from api.provable.com/v2/testnet/statePath/{commitment} using ureq (sync HTTP), caches the global_state_root() from the response, and returns it in current_state_root() — ensuring the state root used for verification matches the root the Merkle path was built against.
Installation
Add to your Cargo.toml:
[]
= "0.5.0"
= { = "1", = ["full"] }
Requirements:
- Rust 1.85+
- snarkVM 4.10.0 (automatically resolved)
- For proving: ~16 GB RAM recommended
Quick Start
Query testnet (no account needed)
use AleoClient;
async
Generate an account and fetch balance
use ;
use TestRng;
async
Public transfer (simple string inputs)
use AleoClient;
use ;
use FromStr;
async
Private transfer (with record decryption)
For private transfers, you must provide decrypted record values rather than raw &str arguments. Use execute_and_broadcast_with_values (v0.5.0+) to pass pre-parsed Vec<Value>:
use AleoClient;
use ;
use FromStr;
async
The CLI tool handles this automatically — see the aleo-cli transfer --mode private command below.
Examples
| Example | Source | Description |
|---|---|---|
testnet_query |
examples/testnet_query.rs | Query testnet: block height, state root, program info (no key needed) |
testnet_transfer |
examples/testnet_transfer.rs | Full pipeline: authorize → execute → prove → broadcast credits transfer |
simple_execute |
examples/simple_execute.rs | Minimal workflow: load program, execute locally (dry-run) |
Run an example:
# Query testnet state (no private key required)
# Full transfer (requires PRIVATE_KEY env var)
# Local dry-run execution
Roadmap
Planned features (in order of priority):
- WASM support — compile SDK for browser/Node.js via
wasm-pack - Transaction history — fetch and decode historical transactions
- Program deployment helper — streamline program ID and edition handling
- Mainnet support — add mainnet configuration alongside testnet
- Record merging — join multiple small records into a single larger record
- Batch transfers — send multiple transfers in one transaction
- Type-safe program bindings — generate Rust structs from Aleo program mappings
CLI Tools
The aleo-cli command-line tool is built on top of this SDK:
# Install
# Query testnet status
# Check account balance
# Generate a new Aleo account
# Send a public transfer
# Send a private transfer (v0.4.0+)
# Deploy a program
# Execute and broadcast
# Verify a transaction on-chain
# Deep ZK proof verification
Related Projects
| Project | Description |
|---|---|
| ProvableHQ/snarkVM | Zero-knowledge VM for the Aleo blockchain (this SDK's core dependency) |
| ProvableHQ/snarkOS | Decentralized OS for ZK applications — Aleo node software |
| ProvableHQ/sdk | Official JavaScript/TypeScript SDK for Aleo (NPM: @provablehq/sdk) |
| Provable API v2 docs | REST API reference — block queries, state paths, transaction data |
| qiaopengjun5162/aleo-cli | Aleo CLI tool built on this SDK |
| AleoNet/workshop | Starter guide to building ZK applications on Aleo |
| Aleo developer docs | Official Aleo developer documentation |
Development
# Build
# Test
# Lint
# Generate docs
# Full check suite
Pre-commit Quality Gates
This project uses pre-commit to enforce code quality on every commit:
# Install hooks (one-time after clone)
# Or run all checks manually
The following 12 checks run automatically before each commit:
| # | Hook | What it checks |
|---|---|---|
| 1 | fix-byte-order-marker | BOM encoding |
| 2 | check-case-conflict | Case-sensitive filename conflicts |
| 3 | check-merge-conflict | Unresolved merge markers |
| 4 | check-symlinks | Broken symlinks |
| 5 | check-yaml | YAML syntax validity |
| 6 | end-of-file-fixer | Files end with newline |
| 7 | mixed-line-ending | Consistent line endings |
| 8 | trailing-whitespace | No trailing whitespace |
| 9 | cargo fmt | Rust formatting (cargo fmt --check) |
| 10 | cargo check | Compilation (cargo check) |
| 11 | cargo clippy | Lint (cargo clippy -- -D warnings) |
| 12 | typos | Spelling errors |
language: system note: All local hooks use language: system (not language: rust), which means they run tools from your system PATH. This ensures the hooks actually execute instead of silently skipping.
History: v0.4.1 and earlier had
language: rustin.pre-commit-config.yaml, which caused all hooks to silently skip (pre-commit tried to install them as crates.io packages). This was fixed in v0.5.0 by switching tolanguage: systemand runningpre-commit install.
Contributing
Contributions are welcome! Please read CONTRIBUTING.md for guidelines on reporting bugs, suggesting features, and submitting code changes.
Before submitting a PR:
- Ensure pre-commit hooks pass (
pre-commit run --all-files) - Check CI passes (GitHub Actions)
- Update CHANGELOG.md following conventional commits
License
Licensed under either MIT License or Apache-2.0 at your option.