Skip to content

Managing Group Membership

The Rust SDK does not currently expose a single high-level “group invite” facade matching the app language, but it does expose the concrete membership and admin primitives behind those flows.

Read helpers:

  • Sdk::group_members(group, limit, sort_order)
  • Sdk::group_holders(group, limit)
  • lower-level groupMemberships and groups query access via circles-rpc

Write/admin helpers on BaseGroupAvatar:

  • trust_add / trust_remove
  • trust_add_batch_with_conditions
  • set_membership_condition
  • set_owner, set_service, set_fee_collection

Example: trust a batch of members with condition checks

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 group = address!("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    let alice = address!("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
    let bob = address!("cccccccccccccccccccccccccccccccccccccccc");
 
    if let Avatar::Group(base_group) = sdk.get_avatar(group).await? {
        let submitted = base_group
            .trust_add_batch_with_conditions(&[alice, bob], 4_102_444_800)
            .await?;
        println!("submitted {} tx(s)", submitted.len());
    }
 
    Ok(())
}