Skip to main content
V2 is not yet live. Polymarket has announced a 2-3 week rollout. The contracts below are deployed on Polygon mainnet but have zero on-chain trading activity. Contract addresses, exchange behavior, and CLOB endpoints could all change before the full migration. Everything on this page is based on what we’ve tested and verified so far. We’ll update it as things develop.
Polymarket is deploying a V2 exchange system on Polygon mainnet. polynode has identified, decoded, and tested against the V2 contracts deployed today. Our settlement stream and trading SDK are built to handle V2 alongside V1. No action is required from existing settlement stream users. When V2 settlements begin on-chain, they will flow through the same WebSocket feed automatically.

What We’ve Verified

Tested against live V2 contracts on Polygon mainnet:
  • V2 settlement decoding verified against real on-chain transactions
  • V2 trade events (OrderFilled, OrdersMatched) decoded from block receipts
  • PolyUSD wrapping and unwrapping tested and detected in real time
  • V2 order placement tested live on the V2 CLOB
  • Full order lifecycle verified: place, check status, cancel, re-place
  • All existing market data, token IDs, and enrichment confirmed identical between V1 and V2
  • Order hash verification: our EIP-712 order hash computation produces byte-for-byte identical results to the live V2 exchange contract’s hashOrder() function on Polygon mainnet — cryptographic proof that our implementation is correct

V2 Contract Addresses

ContractAddress
PolyUSD0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb
Collateral Onramp0x93070a847efef7f70739046a929d47a521f5b8ee
Collateral Offramp0x2957922eb93258b93368531d39facca3b4dc5854
CTFCollateralAdapter0xada100874d00e3331d00f2007a9c336a65009718
NegRiskCTFCollateralAdapter0xada200001000ef00d07553cee7006808f895c6f1
V2 CTF Exchange0xe111180000d2663c0091e4f400237545b87b996b
V2 NegRisk Exchange A0xe2222d279d744050d28e00520010520000310f59
V2 NegRisk Exchange B0xe2222d002000ba0053cef3375333610f64600036
ConditionalTokens (unchanged)0x4D97DCd97eC945f40cF65F87097ACe5EA0476045
All V2 contracts listed above are deployed and live on Polygon mainnet. V2 trading volume is currently minimal as Polymarket has not yet migrated users to V2. Addresses may change if Polymarket redeploys before the full migration.

How V2 Fits Together

The key architectural insight: V2 only changes the exchange layer (how orders are matched and settled). The token layer (ConditionalTokens) is completely unchanged and cannot be replaced.

Why Token IDs Don’t Change

All prediction market positions live inside the ConditionalTokens contract. This is a Gnosis protocol contract that has been on Polygon since Polymarket launched. Every token ID is derived from a condition ID and outcome index inside this contract. V2 does not replace ConditionalTokens. It can’t. Doing so would invalidate every open position on the platform. Instead, V2 introduces an adapter layer between the new exchange contracts and the existing ConditionalTokens contract:
V1 (current):
  USDC.e → V1 Exchange → ConditionalTokens (mints/burns tokens directly)

V2 (new):
  PolyUSD → V2 Exchange → CollateralAdapter → ConditionalTokens
                                 |
                           Unwraps PolyUSD → USDC.e
                           Deposits USDC.e into ConditionalTokens
                           Same tokens minted as V1
The CollateralAdapter translates between PolyUSD (V2’s collateral) and USDC.e (what ConditionalTokens expects). ConditionalTokens never sees PolyUSD. From its perspective, nothing changed. This means:
  • Same token IDs across V1 and V2
  • Same condition IDs
  • Same market metadata (Gamma API, enrichment)
  • Positions opened on V1 are fully compatible with V2 and vice versa

New V2 Contracts

Five new contracts support the V2 architecture. These are all live on Polygon mainnet:
ContractRoleStatus
PolyUSDWrapped USDC.e (1:1, 6 decimals)Deployed
Collateral OnrampWraps USDC.e → PolyUSDDeployed
Collateral OfframpUnwraps PolyUSD → USDC.eDeployed
CTFCollateralAdapterBridges PolyUSD ↔ USDC.e for standard market settlementsDeployed
NegRiskCTFCollateralAdapterBridges PolyUSD ↔ USDC.e for multi-outcome market settlementsDeployed
V2 CTF ExchangeNew order matching for standard marketsDeployed
V2 NegRisk Exchange ANew order matching for multi-outcome marketsDeployed
V2 NegRisk Exchange BAdditional multi-outcome capacityDeployed
All V2 contracts are deployed on Polygon mainnet. V2 trading volume is currently minimal as Polymarket has not yet migrated users to V2.

What’s New in V2

PolyUSD Collateral — V2 uses PolyUSD instead of USDC.e as the exchange collateral. PolyUSD is a 1:1 wrapper around USDC.e with 6 decimals. See the PolyUSD Guide for details on wrapping and unwrapping. Updated Order Struct — Four fields removed (taker, expiration, nonce, feeRateBps), three added (timestamp, metadata, builder). The polynode SDK handles this automatically. EIP-712 Domain — The signing domain version changed from "1" to "2". The SDK handles this based on your exchange version config. No More Settlement Routers — V1 used FeeModule router contracts between operators and the exchange. V2 eliminates routers. Operators call the exchange contracts directly. exchange_version Field — V2 trades include "exchange_version": "v2" on each trade object in settlement and trade events. V1 trades omit this field. Use it to distinguish which exchange system processed a settlement.

What Didn’t Change

  • ConditionalTokens contract — same address, same position system, same token IDs
  • Market data — same condition IDs, same Gamma metadata, same enrichment pipeline
  • Authentication — same API key derivation, same HMAC headers
  • WebSocket subscriptions — same event types, same format
  • Position splits/merges/conversions — same ConditionalTokens events
  • Oracle system — unchanged UMA adapters and resolution flow
  • Orderbook streaming — same WebSocket protocol and message format

Impact on polynode Users

Settlement Stream

No changes required. V2 settlements produce the same event types you already receive:
  • settlement — early detection (3-5 seconds pre-confirmation)
  • status_update — block confirmation with latency measurement
  • trade — confirmed trade from OrderFilled event
  • deposit — now includes PolyUSD wrapping/unwrapping alongside USDC.e
polynode detects V2 transactions automatically alongside V1. Both versions are supported simultaneously.

Trading SDK

The polynode SDK supports V2 with a single config change:
use polynode::trading::{PolyNodeTrader, TraderConfig, OrderParams, OrderSide, ExchangeVersion};

let mut config = TraderConfig {
    polynode_key: "pn_live_...".into(),
    exchange_version: ExchangeVersion::V2,  // ← only change needed
    ..Default::default()
};

let mut trader = PolyNodeTrader::new(config)?;
let signer = PrivateKeySigner::from_hex("0x...")?;
let status = trader.ensure_ready(Box::new(signer), None).await?;

// Order placement is identical to V1
let result = trader.order(OrderParams {
    token_id: "10293...".into(),
    side: OrderSide::Buy,
    price: 0.05,
    size: 10.0,
    ..Default::default()
}).await?;
The SDK handles all V2 differences internally: order struct, EIP-712 signing, CLOB endpoint routing, and PolyUSD collateral. You don’t need to change how you construct orders or manage positions.

Timeline

V2 contracts are deployed on Polygon mainnet. Polymarket will announce the full migration date with advance notice. polynode will support both V1 and V2 simultaneously throughout the transition — no downtime, no disruption. We’ll keep this page updated as the migration progresses.