predict-sdk 0.1.0

Rust SDK for Predict.fun prediction market - order building, EIP-712 signing, and real-time WebSocket data
Documentation
# 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