Skip to content

Query Circles Profiles

Read-only profile queries using circles_query.

List profiles by name prefix:

use circles_rpc::{QueryMethods, RpcClient};
use circles_types::{FilterPredicate, OrderBy, QueryParams};
use reqwest::Url;
use serde::Deserialize;
 
#[derive(Debug, Clone, Deserialize)]
struct ProfileRow {
    avatar: String,
    name: Option<String>,
    description: Option<String>,
}
 
#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let client = RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
    let queries = QueryMethods::new(client);
 
    let params = QueryParams {
        namespace: "circles".into(),
        table: "profiles".into(),
        columns: vec!["avatar".into(), "name".into(), "description".into()],
        filter: vec![FilterPredicate::like("name".into(), "Al%".into()).into()],
        order: vec![OrderBy::asc("avatar".into())],
        limit: Some(25),
    };
 
    let rows: Vec<ProfileRow> = queries.circles_query(params).await?;
    println!("found {} profiles", rows.len());
    Ok(())
}

Lookup a specific avatar:

let params = QueryParams {
    namespace: "circles".into(),
    table: "profiles".into(),
    columns: vec!["avatar".into(), "name".into(), "description".into()],
    filter: vec![FilterPredicate::equals(
        "avatar".into(),
        "0x1234567890123456789012345678901234567890",
    )
    .into()],
    order: vec![],
    limit: Some(1),
};

Profile updates are runner-dependent and will be added once writes are supported.