rustchain-client 0.1.0

HTTP client library for the RustChain Proof-of-Antiquity blockchain API. Query node health, epochs, miners, wallets, attestations, and governance proposals.
Documentation

rustchain-client

A Rust HTTP client library for the RustChain Proof-of-Antiquity blockchain API.

RustChain is the first blockchain that rewards vintage hardware (PowerPC G4, IBM POWER8, Pentium 4, etc.) for being old — not fast. This crate provides a typed, async Rust client for querying the RustChain node API.

Features

  • Node Health — check node status, uptime, version, and peer count
  • Epoch Info — get current epoch number, duration, reward pool, and attestation count
  • Miners — list active miners with hardware architecture and antiquity multipliers
  • Wallet Balance — check any wallet's RTC balance and earnings history
  • Attestation — submit hardware fingerprint attestations
  • Governance — list proposals, get details, and submit signed votes
  • Agent Economy — list open jobs from the RIP-302 Agent Economy marketplace
  • Self-signed certs — supports nodes using self-signed TLS certificates
  • No OpenSSL — uses rustls for TLS, works on all platforms without system dependencies

Quick Start

Add to your Cargo.toml:

[dependencies]
rustchain-client = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }

Example: Check Node Health and List Miners

use rustchain_client::RustChainClient;

#[tokio::main]
async fn main() -> Result<(), rustchain_client::Error> {
    // Connect to the main RustChain node
    let client = RustChainClient::new("https://rustchain.org")?;

    // Check node health
    let health = client.health().await?;
    println!("Status: {}", health.status);
    if let Some(v) = &health.version {
        println!("Version: {}", v);
    }

    // Get current epoch
    let epoch = client.epoch().await?;
    println!("Epoch: {} (reward pool: {:?} RTC)", epoch.epoch, epoch.reward_pool);

    // List active miners
    let miners = client.miners().await?;
    for miner in &miners {
        println!(
            "  {}{} ({}×)",
            miner.wallet,
            miner.architecture.as_deref().unwrap_or("unknown"),
            miner.multiplier.unwrap_or(1.0)
        );
    }

    Ok(())
}

Example: Check Wallet Balance

use rustchain_client::RustChainClient;

# async fn example() -> Result<(), rustchain_client::Error> {
let client = RustChainClient::new("https://rustchain.org")?;
let balance = client.wallet_balance("nox-ventures").await?;
println!("Balance: {} RTC", balance.balance);
# Ok(())
# }

Example: List Agent Economy Jobs

use rustchain_client::RustChainClient;

# async fn example() -> Result<(), rustchain_client::Error> {
let client = RustChainClient::new("https://50.28.86.131")?;
let jobs = client.agent_jobs().await?;
println!("Open jobs: {}", jobs.jobs.len());
for job in &jobs.jobs {
    println!("  {}{:?} RTC", job.job_id, job.reward_rtc);
}
# Ok(())
# }

Example: List Governance Proposals

use rustchain_client::RustChainClient;

# async fn example() -> Result<(), rustchain_client::Error> {
let client = RustChainClient::new("https://rustchain.org")?;
let proposals = client.proposals().await?;
for p in &proposals {
    println!("#{}: {} ({})", p.id, p.title, p.status.as_deref().unwrap_or("unknown"));
}
# Ok(())
# }

API Coverage

Endpoint Method Function
/health GET health()
/epoch GET epoch()
/api/miners GET miners()
/wallet/balance GET wallet_balance(wallet)
/attest/submit POST submit_attestation(attestation)
/governance/proposals GET proposals()
/governance/proposal/{id} GET proposal(id)
/governance/vote POST vote(vote)
/agent/jobs GET agent_jobs()

Node URLs

Node URL Notes
Primary https://rustchain.org Main node + explorer
Direct IP https://50.28.86.131 Same node, direct IP
Ergo Anchor https://50.28.86.153 Ergo anchoring node

License

MIT — see LICENSE for details.

Links