Subscribing to Avatar Events
Rust event fetching/decoding. HTTP is available now; websocket streaming is behind the circles-rpc ws feature.
HTTP fetch and parse
use circles_rpc::{EventsMethods, RpcClient};
use reqwest::Url;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
let events = EventsMethods::new(client);
let parsed = events
.circles_events(None, /* from_block */ 0, /* to_block */ None, None)
.await?;
for evt in parsed.iter().take(5) {
println!("event type: {:?}", evt.event_type);
}
Ok(())
}Websocket streaming (optional)
Enable the ws feature for circles-rpc in Cargo.toml:
circles-rpc = { version = "0.1", features = ["ws"] }Then subscribe:
use circles_rpc::{EventsMethods, RpcClient};
use reqwest::Url;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Requires ws feature and a websocket endpoint
let client = RpcClient::ws(Url::parse("wss://rpc.aboutcircles.com/ws")?).await?;
let events = EventsMethods::new(client);
let filter = serde_json::json!({ "addresses": [] }); // adjust filters as needed
let mut sub = events.subscribe_parsed_events(filter).await?;
while let Some(evt) = sub.next().await {
let evt = evt?;
println!("streamed event: {:?}", evt.event_type);
}
Ok(())
}Decoding details
CirclesEventwrapsCirclesEventTypeplus the raw data map.- If an event type isn’t mapped yet, it is parsed as
CirclesEventType::CrcUnknownEvent(no frames are dropped). - Heartbeat/empty frames from some providers are ignored in the streaming helper.