Skip to content

Manage Trust Connections

Trust reads work without a runner. Trust writes use the typed avatar wrappers and submit HubV2::trust calls through your configured runner.

What exists today:

  • trust_relations, aggregated_trust_relations, trusts, trusted_by, mutual_trusts, is_trusting, and is_trusted_by
  • trust_add(&[...], expiry) and trust_remove(&[...]) on human avatars
  • equivalent trust helpers on organisation and group avatars

Example: add a trust edge from a human avatar

use std::sync::Arc;
 
use alloy_primitives::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 me = address!("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    let other = address!("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
 
    if let Avatar::Human(human) = sdk.get_avatar(me).await? {
        let submitted = human.trust_add(&[other], 4_102_444_800).await?;
        println!("submitted {} tx(s)", submitted.len());
    }
 
    Ok(())
}