Skip to content

Getting Total Supply of Group Tokens Available

Read-only example to fetch group token balances/supply from RPC tables.

use circles_rpc::{QueryMethods, RpcClient};
use circles_types::{OrderBy, QueryParams};
use reqwest::Url;
 
#[derive(Debug, Clone, serde::Deserialize)]
struct GroupSupplyRow {
    owner: String,
    token: String,
    balance: String, // or U256 if parsing as number
}
 
#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let client = RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
    let queries = QueryMethods::new(client);
 
    let rows: Vec<GroupSupplyRow> = queries
        .circles_query(QueryParams {
            namespace: "circles".into(),
            table: "tokenBalances".into(),
            columns: vec!["owner".into(), "token".into(), "balance".into()],
            filter: vec![FilterPredicate::equals("owner".into(), "0xGroupAddressHere").into()],
            order: vec![OrderBy::desc("balance".into())],
            limit: Some(50),
        })
        .await?;
 
    for row in rows.iter().take(5) {
        println!("group {} token {} balance {}", row.owner, row.token, row.balance);
    }
 
    Ok(())
}