mirror of
https://github.com/floor-licker/polyfill-rs.git
synced 2026-08-06 09:17:45 +00:00
4.6 KiB
4.6 KiB
Migration Guide: From polymarket-rs-client to polyfill-rs
This guide helps you migrate from the original polymarket-rs-client to our high-performance polyfill-rs implementation.
Quick Migration (Drop-in Replacement)
1. Update Cargo.toml
Before:
[dependencies]
polymarket-rs-client = "0.x.x"
After:
[dependencies]
polyfill-rs = "0.1.0"
2. Update Imports
Before:
use polymarket_rs_client::{ClobClient, Side, OrderType, OrderArgs};
After:
use polyfill_rs::{ClobClient, Side, OrderType, OrderArgs};
3. Code Remains Identical
All your existing code continues to work without changes:
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Same API, same functionality
let client = ClobClient::new("https://clob.polymarket.com");
let markets = client.get_sampling_markets(None).await?;
// All methods work identically
let order_args = OrderArgs::new("token_id", price, size, Side::BUY);
let order = client.create_order(&order_args, None, None, None).await?;
let result = client.post_order(order, OrderType::GTC).await?;
Ok(())
}
What You Get with polyfill-rs
✅ 100% API Compatibility
- All 49 methods from the original client
- Identical method signatures and return types
- Same authentication and error handling patterns
🚀 Performance Improvements
- Fixed-point arithmetic for order book operations (up to 10x faster)
- Zero-allocation hot paths for high-frequency trading
- Memory-efficient order book management
- Optimized data structures for trading operations
🔥 Additional Features
- WebSocket streaming for real-time market data
- Advanced fill processing and execution tracking
- Comprehensive metrics collection
- Robust reconnection handling for WebSocket connections
Advanced Usage (Optional Enhancements)
If you want to leverage the additional features:
WebSocket Streaming
use polyfill_rs::{WebSocketStream, StreamMessage};
let mut stream = WebSocketStream::new("wss://ws-subscriptions-clob.polymarket.com").await?;
stream.subscribe_to_market("market_id").await?;
while let Some(message) = stream.next().await {
match message? {
StreamMessage::OrderBookUpdate(update) => {
// Handle real-time order book updates
}
StreamMessage::Trade(trade) => {
// Handle trade events
}
_ => {}
}
}
High-Performance Order Book
use polyfill_rs::OrderBookImpl;
// Create order book with configurable depth for memory efficiency
let mut book = OrderBookImpl::new("token_id".to_string(), 100); // 100 levels max
// Fast fixed-point operations
let spread = book.spread_fast(); // Returns Option<u32> (ticks)
let mid = book.mid_fast(); // Returns Option<u32> (ticks)
Fill Processing
use polyfill_rs::{FillEngine, FillProcessor};
let fill_engine = FillEngine::new();
let processor = FillProcessor::new(fill_engine);
// Track order executions with detailed metrics
processor.process_fill(fill_event).await?;
Migration Checklist
- Update
Cargo.tomldependency - Update import statements
- Run tests to verify functionality
- (Optional) Leverage new WebSocket streaming features
- (Optional) Use high-performance order book operations
- (Optional) Implement fill processing for execution tracking
Troubleshooting
Compilation Issues
If you encounter compilation errors:
- Check Rust version: Ensure you're using Rust 1.70+ (same as original client)
- Clear cache: Run
cargo cleanand rebuild - Update dependencies: Run
cargo update
Runtime Differences
The only runtime differences are performance improvements:
- Faster order book operations (transparent to your code)
- Lower memory usage for order book management
- Better error messages with more context
Getting Help
- Check our API documentation
- Review the API Parity Report
- Open an issue on GitHub
Why Migrate?
- Performance: Significant speed improvements for trading operations
- Features: Additional capabilities not available in the original
- Maintenance: Actively maintained with regular updates
- Compatibility: 100% drop-in replacement with zero code changes required
- Future-proof: Built for high-frequency trading environments
The migration is risk-free since the API is identical, but you gain substantial performance benefits and additional features for advanced use cases.