Polymarket vs Kalshi: On-Chain CLOB vs Regulated Exchange
Polymarket vs Kalshi architecture compared: on-chain USDC CLOB vs CFTC-regulated exchange, and what each means for prediction market bots.
{"excerpt":"Polymarket vs Kalshi architecture compared: on-chain USDC CLOB vs CFTC-regulated exchange, and what each means for prediction market bots.","tags":["Polymarket","Kalshi","prediction markets","CLOB","trading bots"],"cover":"nodes","content":"Polymarket settles trades on Polygon through a hybrid CLOB where matching happens off-chain but every fill is a signed, on-chain transaction against the Conditional Tokens Framework. Kalshi settles trades on a centralized ledger inside a CFTC-regulated exchange, the same regulatory category as CME or ICE. Both let you bet on discrete events — will the Fed cut in September, will a bill pass — but the plumbing underneath is close to unrecognizable, and that plumbing decides what kind of bot you can actually run.\n\nIf you're building automated strategies for either venue, the architecture isn't a footnote. It determines your custody risk, your latency ceiling, your legal exposure, and whether a strategy that prints on one platform is even expressible on the other.\n\n## How Polymarket actually settles a trade\n\nPolymarket outcome shares are ERC-1155 tokens minted through Gnosis's Conditional Tokens Framework (CTF). A market like "Will X happen by December 31" splits USDC collateral into YES and NO tokens that always sum to $1 at resolution. The order book itself is off-chain — Polymarket runs a centralized matching engine for speed — but every order is an EIP-712 signed message, and every fill gets settled by a smart contract call on Polygon. You're not trusting Polymarket's database with your funds between trades; your position is a token in your own wallet the moment a match happens.\n\nResolution is handled by UMA's optimistic oracle. Someone proposes an outcome, there's a challenge window (typically two hours, longer if disputed), and if nobody bonds against it the outcome finalizes. If someone disputes, it escalates to UMA token holder voting. This is the part traders underestimate: ambiguous market wording has caused real disputes, and a bot holding a position into resolution needs to model oracle risk, not just price risk.\n\nA minimal signed order looks like this conceptually:\n\njavascript\nconst order = {\n maker: wallet.address,\n tokenId: conditionalTokenId,\n makerAmount: usdcAmount,\n takerAmount: shareAmount,\n side: 0, // BUY\n expiration: Math.floor(Date.now() / 1000) + 3600,\n nonce: await getNonce(wallet.address),\n};\nconst signature = await wallet._signTypedData(domain, types, order);\n// POST to Polymarket's CLOB API, matched off-chain, settled on Polygon\n\n\nGas is cheap on Polygon, but you still eat block time (roughly 2 seconds) plus API matching latency, and during volatile resolution windows the off-chain matcher can queue orders in ways a pure on-chain CLOB wouldn't.\n\n## How Kalshi actually settles a trade\n\nKalshi is a Designated Contract Market and Derivatives Clearing Organization under CFTC oversight. There's no token, no wallet, no smart contract. You fund a cash account via ACH or wire, KYC is mandatory, and Kalshi itself is the central counterparty — every YES contract you buy is matched against a NO seller through Kalshi's internal order book, cleared and reported like any regulated derivatives exchange. Settlement in USD is instant on Kalshi's ledger; withdrawal to your bank takes normal ACH timelines.\n\nThe API is a straightforward REST/WebSocket setup, no signing beyond standard auth headers, no gas, no on-chain confirmation to wait on. Latency is dominated by Kalshi's own matching engine and your network hop to their servers, not by a public blockchain's block interval. For a bot builder that's a genuinely different latency profile — more comparable to trading on a traditional exchange API than to anything DeFi-native.\n\nResolution is determined by Kalshi against its own contract terms and, where applicable, a named data source (BLS, Fed statements, election authorities), with Kalshi as the final arbiter subject to CFTC rules. No oracle dispute game, no token voting — but also no recourse outside Kalshi's own settlement process and regulatory complaint channels.\n\n## The comparison\n\n| Dimension | Polymarket | Kalshi |\n|---|---|---|\n| Regulatory status | Offshore, unregulated for US retail | CFTC-regulated DCM/DCO |\n| Custody | Self-custody, on-chain tokens | Kalshi holds cash balance |\n| Settlement | USDC on Polygon, CTF tokens | USD on internal ledger |\n| Matching | Off-chain engine, on-chain settlement | Fully centralized order book |\n| Resolution | UMA optimistic oracle, disputable | Kalshi determination, regulated |\n| Access | Global, geofenced from US retail | US-focused, full KYC |
| Fees | Small on-chain gas + spread | Maker/taker fees, contract-based |\n| API latency floor | ~2s Polygon block time + matching | Sub-100ms typical, no chain wait |\n| Bot custody risk | Wallet key management | Counterparty/platform risk |\n\n## What this means for your bot\n\nOn Polymarket, your edge cases are blockchain edge cases: nonce management, gas spikes during Polygon congestion, RPC reliability, and making sure your signer doesn't submit a stale order after a fast-moving resolution. The off-chain-matching-with-on-chain-settlement split is architecturally similar to how Jupiter routes against Raydium pools — a fast off-chain layer deciding the trade, a slower on-chain layer making it final — and the same lessons about staleness and confirmation lag apply. Teams used to landing time-sensitive Solana trades with Jito bundles will find Polygon's model comparatively forgiving, but you still need to handle reorgs and failed transactions gracefully, and reviewing your CTF integration and order-signing logic through a smart contract audit is not optional if real capital sits behind it.\n\nOn Kalshi, your edge cases are exchange-API edge cases: rate limits, session auth expiry, and the fact that a strategy needs to survive KYC and account-level compliance checks rather than just a funded wallet. Streaming Kalshi's order book over WebSocket has more in common with the tradeoffs we cover comparing Yellowstone gRPC against standard Solana WebSocket RPC than with anything on Polymarket — you're optimizing message throughput and reconnect logic, not gas or block confirmations. Market-making either venue also borrows directly from the inventory and quote-skew logic used in a Hyperliquid market maker setup, just without perpetual funding rates to manage.\n\n### Which to pick when\n\nBuild on Polymarket if you want programmatic, permissionless access, are comfortable managing a hot wallet and on-chain risk, and your users or capital aren't restricted to the US. It's the better fit for global arbitrage bots, cross-market hedging against other on-chain venues, and anyone who wants composability — your position is a token you can move, wrap, or use as collateral elsewhere.\n\nBuild on Kalshi if you need regulatory clarity, US-based capital, or institutional counterparties who won't touch an offshore token-settled venue. It's the better fit for compliance-sensitive funds, anyone integrating with existing brokerage-style infrastructure, and strategies where sub-100ms API latency matters more than composability.\n\nIf you're weighing which architecture actually fits your strategy and risk tolerance before you write a line of bot code, a strategy consultation will save you from building on the wrong rail twice."}
Need a bot like this built?
We design, build and run trading bots on Solana, Hyperliquid and Polymarket.
Start a projectMore from the blog
Public vs Paid RPC: How to Run a Fair Benchmark
A fair comparison of public and paid RPC endpoints must account for quotas, workload, freshness and support guarantees.
Read articleRPC Benchmark Percentiles Explained: p50, p95 and p99
Why averages hide the latency spikes that break trading bots, wallets and production blockchain applications.
Read articleHyperliquid REST vs WebSocket Benchmark: What to Measure
A benchmark plan for Hyperliquid market data that separates request latency from streaming freshness and recovery.
Read article