polynode 0.13.9

Rust SDK for the PolyNode API — real-time Polymarket data
Documentation
use super::types::{StorageEstimate, WatchlistFile};

const MAX_BACKFILL_PER_ENTITY: u64 = 3000;
const AVG_BYTES_PER_ROW: u64 = 720;
const AVG_LIVE_TRADES_PER_WALLET_PER_DAY: u64 = 10;
const AVG_LIVE_TRADES_PER_MARKET_PER_DAY: u64 = 30;
const AVG_LIVE_TRADES_PER_TOKEN_PER_DAY: u64 = 15;

pub fn estimate_storage(watchlist: &WatchlistFile, ttl_days: u32) -> StorageEstimate {
    let wallet_count = watchlist.wallets.len();
    let market_count = watchlist.markets.len();
    let token_count = watchlist.tokens.len();
    let entity_count = (wallet_count + market_count + token_count) as u64;

    let backfill_trades = entity_count * MAX_BACKFILL_PER_ENTITY;
    let live_trades = wallet_count as u64 * AVG_LIVE_TRADES_PER_WALLET_PER_DAY * ttl_days as u64
        + market_count as u64 * AVG_LIVE_TRADES_PER_MARKET_PER_DAY * ttl_days as u64
        + token_count as u64 * AVG_LIVE_TRADES_PER_TOKEN_PER_DAY * ttl_days as u64;

    let estimated_trades = backfill_trades + live_trades;
    let estimated_size_mb =
        (estimated_trades * AVG_BYTES_PER_ROW + 1024 * 1024 - 1) / (1024 * 1024);

    StorageEstimate {
        estimated_trades,
        estimated_size_mb,
        ttl_days,
        wallet_count,
        market_count,
        token_count,
    }
}