# rootchain-rs
[](https://crates.io/crates/rootchain-rs)
[](../../LICENSE)
> **The primary Rust SDK for interacting with the RootChain network.**
`rootchain-rs` provides a high-level async client for building Rust applications that communicate with RootChain nodes: wallets, bots, indexers, relayers, and tooling.
---
## What's Inside
| `client` | JSON-RPC async client for communicating with a RootChain node (`getBalance`, `sendTransaction`, `getBlock`, etc.) |
| `wallet` | `Wallet` type for key management, BIP-39 mnemonic support, AES-256-GCM encrypted storage, and transaction signing |
| `contract` | Typed `Contract` wrapper for encoding/decoding ABI calls to RootChain WASM contracts |
| `error` | Unified `SdkError` type covering RPC, signing, and serialization errors |
---
## Installation
```toml
[dependencies]
rootchain-rs = "1.0.2"
tokio = { version = "1", features = ["full"] }
```
---
## Usage
### Connecting to a Node
```rust
use rootchain_rs::client::RootchainClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = RootchainClient::new("http://localhost:8545");
let balance = client.get_balance("0xabc...").await?;
println!("Balance: {} µROOT", balance.balance);
let block = client.get_block(1000).await?;
println!("Block hash: {}", block.header.merkle_root);
Ok(())
}
```
### Wallet Management
```rust
use rootchain_rs::wallet::Wallet;
// Create a new wallet from a BIP-39 mnemonic
let wallet = Wallet::from_mnemonic("word1 word2 ... word24")?;
let address = wallet.address();
// Sign and send a transfer
let client = RootchainClient::new("http://localhost:8545");
let tx_hash = wallet.send_transfer(&client, &recipient, 1_000_000u128, 1.0.228).await?;
```
### Contract Interaction
```rust
use rootchain_rs::contract::Contract;
let contract = Contract::at("0xcontract_address...");
// Encode a method call (method ID + bincode payload)
let payload = contract.encode_call(1u32, &my_args)?;
// Submit via wallet
let tx_hash = wallet.call_contract(&client, &contract, payload).await?;
```
---
## High-Precision Balances
All balance fields use `u128` internally to support the full 18-decimal precision of ROOT tokens (1 ROOT = 1,000,000 µROOT). Balances are safely serialized as decimal strings over JSON.
```rust
let balance: u128 = 1_000_000_000_000u128; // 1,000,000 ROOT
```
---
## License
MIT — See [LICENSE](../../LICENSE) for details.