Quickstart Guide for Circles SDK (Rust)
The recommended entrypoint is circles-sdk. Start with Sdk::new(config, None)
for read flows, then attach a runner when you want on-chain execution.
Install crates
Add the SDK and a Tokio runtime to your Cargo.toml:
[dependencies]
circles-sdk = "0.1.1"
alloy-primitives = "1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }Minimal read example
use alloy_primitives::address;
use circles_sdk::{Avatar, Sdk, config};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let sdk = Sdk::new(config::gnosis_mainnet(), None)?;
let avatar = address!("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
let info = sdk.avatar_info(avatar).await?;
println!("avatar type: {:?}", info.avatar_type);
if let Avatar::Human(human) = sdk.get_avatar(avatar).await? {
let balances = human.balances(false, true).await?;
println!("balance rows: {}", balances.len());
}
Ok(())
}Adding a runner for writes
Attach a runner when you want to execute prepared transactions instead of only planning them.
use std::sync::Arc;
use alloy_primitives::{U256, address};
use circles_sdk::{Avatar, EoaContractRunner, Sdk, config};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let runner = Arc::new(
EoaContractRunner::connect(
"https://rpc.aboutcircles.com/",
"0xYOUR_PRIVATE_KEY",
)
.await?,
);
let sdk = Sdk::new(config::gnosis_mainnet(), Some(runner))?;
let from = address!("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
let to = address!("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
if let Avatar::Human(human) = sdk.get_avatar(from).await? {
let prepared = human
.plan_direct_transfer(
to,
U256::from(1_000_000_000_000_000_000u128),
None,
None,
)
.await?;
println!("prepared {} tx(s)", prepared.len());
// Swap to `direct_transfer(...)` when you want to submit immediately.
}
Ok(())
}Runner options
EoaContractRunner: native direct execution from a private keySafeContractRunner: existing single-owner Safe executionSafeExecutionBuilder: prepares canonical Safe payload/hash for a browser or another external signing host