实时事件

Event Stream

通过 WebSocket 订阅链上事件:

use strike_sdk::prelude::*;

let client = StrikeClient::new(StrikeConfig::bsc_mainnet()).build()?;

let mut events = client.events().await?;

while let Some(event) = events.next().await {
    match event {
        StrikeEvent::MarketCreated { market_id, strike_price, expiry_time, .. } => {
            println!("new market {market_id} | strike: {strike_price} | expiry: {expiry_time}");
        }
        StrikeEvent::BatchCleared { market_id, batch_id, clearing_tick, matched_lots } => {
            println!("batch cleared | market: {market_id} | tick: {clearing_tick} | matched: {matched_lots}");
        }
        StrikeEvent::OrderSettled { order_id, filled_lots, .. } => {
            println!("order settled | {order_id} | filled: {filled_lots}");
        }
        StrikeEvent::GtcAutoCancelled { order_id, .. } => {
            println!("GTC auto-cancelled | {order_id}");
        }
        _ => {}
    }
}

无需钱包,事件流是只读功能。

Event Types

StrikeEvent 是包含以下 variant 的 enum:

MarketCreated

通过 MarketFactory 创建新市场时触发。

BatchCleared

批量拍卖清算时触发。clearing_tick 是所有成交结算所用的统一价格。matched_lots 是匹配到的总成交量。

OrderSettled

每个订单在批次结算时触发。它会告诉你成交了多少 lots。

GtcAutoCancelled

GTC 订单被自动取消时触发,例如市场 halted 或 deactivated。

OrderPlaced / OrderCancelled

下单和取消时触发。可通过历史扫描获取(见下文),但不会通过实时 WSS stream 推送。

自动重连

EventStream 会自动处理 WSS 断连。连接断开后,它会等待 5 秒并重新连接。重连空档期间触发的事件会丢失;请使用历史扫描恢复这些事件。

Historical Scanning

启动恢复时,例如 bot 重启后需要了解自己的 open orders,可以使用 scan_orders()

这会从 from_block 扫描到最新区块中的 OrderPlacedOrderCancelled 事件,并只返回尚未取消的订单。

典型 Bot 模式

常见模式是将事件流与历史恢复结合:

Last updated