Example Bots
read_markets — Read-Only Market Discovery
cargo run --example read_marketsuse strike_sdk::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt::init();
let client = StrikeClient::new(StrikeConfig::bsc_mainnet()).build()?;
// Fetch markets from indexer
let markets = client.indexer().get_markets().await?;
println!("found {} markets", markets.len());
for market in &markets {
println!(
" factory {} | orderbook {:?} | status: {} | expiry: {} | batch_interval: {}s",
market.factory_market_id,
market.orderbook_market_id,
market.status,
market.expiry_time,
market.batch_interval,
);
}
// Read on-chain state
let active_count = client.markets().active_market_count().await?;
println!("active markets: {active_count}");
// Get orderbook for first active market using the tradable OrderBook ID
let active_markets: Vec<_> = markets.iter().filter(|m| m.status == "active").collect();
if let Some(market) = active_markets.first() {
let market_id = market.tradable_market_id()?;
let ob = client.indexer().get_orderbook(market_id).await?;
println!("\norderbook for factory market {} (ob {}):", market.factory_market_id, market_id);
for level in &ob.bids {
println!(" bid: tick {} | {} lots", level.tick, level.lots);
}
for level in &ob.asks {
println!(" ask: tick {} | {} lots", level.tick, level.lots);
}
}
Ok(())
}redeem_backlog_check — Find Redeemable Positions Before Redemption
place_orders — Full Trading Lifecycle
active_market_quote — Find the Active Market and Quote It
atomic_requote — Replace Existing Quotes in One Transaction
track_order_lifecycle — Accepted/Live vs Filled
stream_events — Event-Driven Architecture
simple_bot — Minimal Market Maker Skeleton
Pattern
Why it matters
Tips for Building a Real Bot
Last updated