# predict-sdk
Rust SDK for [Predict.fun](https://predict.fun) prediction market on BNB Chain.
## Features
- **Order Building** - Create and sign orders with EIP-712
- **WebSocket** - Real-time orderbook, prices, and wallet events
- **GraphQL** - Query markets, positions, and historical data
- **On-chain** - Direct contract interactions
## Installation
```toml
[dependencies]
predict-sdk = "0.1"
```
## Quick Start
### Create and Sign an Order
```rust
use predict_sdk::{PredictClient, OrderBuilder, Side, ChainId};
use alloy::signers::local::PrivateKeySigner;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let signer: PrivateKeySigner = "your_private_key".parse()?;
let client = PredictClient::new(ChainId::BscMainnet, signer);
// Build and sign an order
let signed_order = OrderBuilder::new()
.market_id(123)
.side(Side::Buy)
.price("0.50".parse()?)
.quantity("10.0".parse()?)
.build(&client)
.await?;
// Submit the order
let result = client.place_order(signed_order).await?;
println!("Order placed: {:?}", result);
Ok(())
}
```
### WebSocket Orderbook Stream
```rust
use predict_sdk::websocket::PredictWebSocket;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let ws = PredictWebSocket::new("wss://ws.predict.fun/ws".to_string());
let mut stream = ws.connect().await?;
// Subscribe to orderbook updates
ws.subscribe_orderbook(123).await?;
// Process messages
while let Some(msg) = stream.next().await {
println!("{:?}", msg?);
}
Ok(())
}
```
### Wallet Events
```rust
use predict_sdk::websocket::{PredictWebSocket, parse_wallet_event};
// Subscribe to wallet events (requires JWT from authenticate())
ws.subscribe_wallet_events(&jwt).await?;
while let Some(msg) = stream.next().await {
if let Ok(WsMessage::PushMessage(push)) = msg {
if push.is_wallet_event() {
let event = parse_wallet_event(&push)?;
match event {
PredictWalletEvent::OrderAccepted { order_id, .. } => {
println!("Order {} accepted", order_id);
}
PredictWalletEvent::OrderTransactionSuccess { tx_hash, .. } => {
println!("Order filled: {:?}", tx_hash);
}
_ => {}
}
}
}
}
```
## Modules
- `client` - Main API client
- `order_builder` - Order construction and EIP-712 signing
- `websocket` - Real-time WebSocket streaming
- `graphql` - GraphQL queries for market data
- `onchain` - Blockchain contract interactions
- `types` - Core types (Order, Side, ChainId, etc.)
## License
MIT