NEW: Live arbitrage across 10+ prediction markets.Arbitrage →
← Index
APIOct 2, 2026

Polymarket Contract Addresses (2026): CTF, Exchange and pUSD

Polymarket Contract Addresses (2026): CTF, Exchange and pUSD

The Short Answer

All of Polymarket's contracts are on Polygon mainnet, chain ID 137. The ones most integrations need are the CTF Exchange at 0xE111180000d2663C0091e4f400237545B87B996B and the Neg Risk CTF Exchange at 0xe2222d279d744050d28e00520010520000310F59, which settle trades, plus Conditional Tokens at 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045, which holds outcome tokens. The collateral is pUSD at 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB. A market's negRisk flag decides which exchange and which collateral adapter it uses, and Polymarket's contracts page is the source to check before you hardcode any of them.

Key Takeaways

  • Every Polymarket contract lives on Polygon mainnet, chain ID 137.
  • Standard markets settle on the CTF Exchange, and negative risk markets on the Neg Risk CTF Exchange.
  • Trading collateral is pUSD, a six-decimal ERC-20 backed by USDC, wrapped from USDC.e through the CollateralOnramp.
  • Splits, merges and redemptions go through a collateral adapter, with a separate one for negative risk markets.
  • CTF Exchange V2 was audited by Quantstamp and Cantina in March 2026.

Addresses on this page are copied from Polymarket's official contracts page as of October 2026. Always confirm against that page before sending funds or approvals.

What are Polymarket's core trading contracts?

ContractAddressUsed for
CTF Exchange0xE111180000d2663C0091e4f400237545B87B996BSettling trades in standard markets
Neg Risk CTF Exchange0xe2222d279d744050d28e00520010520000310F59Settling trades in negative risk markets
Conditional Tokens (CTF)0x4D97DCd97eC945f40cF65F87097ACe5EA0476045The ERC-1155 contract that holds every outcome token
Neg Risk Adapter (CLOB v1, deprecated)0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296The older negative risk adapter, kept for reference

Orders are signed for a specific exchange, so the exchange has to match the market. Multi-outcome events where only one outcome can win, such as elections, are negative risk markets and settle on the Neg Risk CTF Exchange. Everything else settles on the CTF Exchange. Read the market's negRisk flag from Polymarket's API rather than guessing.

What are the pUSD and collateral contracts?

ContractAddress
pUSD, CollateralToken (proxy)0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB
pUSD, CollateralToken (implementation)0x6bBCef9f7ef3B6C592c99e0f206a0DE94Ad0925f
CollateralOnramp0x93070a847efEf7F70739046A929D47a521F5B8ee
CollateralOfframp0x2957922Eb93258b93368531d39fAcCA3B4dC5854
PermissionedRamp0xebC2459Ec962869ca4c0bd1E06368272732BCb08
CtfCollateralAdapter0xAdA100Db00Ca00073811820692005400218FcE1f
NegRiskCtfCollateralAdapter0xadA2005600Dec949baf300f4C6120000bDB6eAab

pUSD is the token all Polymarket trading settles in: a standard six-decimal ERC-20 on Polygon, backed by USDC and enforced onchain. Use the proxy address, never the implementation. To get pUSD, you approve the CollateralOnramp, not the pUSD token, to spend your USDC.e, then call its wrap function. The CollateralOfframp unwraps it again.

The two collateral adapters handle position operations outside the order book: splitting pUSD into a full set of outcome tokens, merging a balanced set back into pUSD, and redeeming winning tokens after resolution. Standard markets use the CtfCollateralAdapter, and negative risk markets use the NegRiskCtfCollateralAdapter. Redemption is covered step by step in how to redeem winning positions with the Polymarket API.

What are the wallet and resolution contracts?

ContractAddress
Deposit Wallet Factory0x00000000000Fb5C9ADea0298D729A0CB3823Cc07
Deposit Wallet Beacon0x7A18EDfe055488A3128f01F563e5B479D92ffc3a
Gnosis Safe Factory0xaacfeea03eb1561c4e67d661e40682bd20e3541b
Polymarket Proxy Factory0xaB45c5A4B0c941a2F231C04C3f49182e1A254052
UMA Adapter0x6A9D222616C90FcA5754cd1333cFD9b7fb6a4F74
UMA Optimistic Oracle0xCB1822859cEF82Cd2Eb4E6276C7916e692995130

The factories create the smart wallets that hold most users' funds. That is why the address you trade from is often not the address you signed up with, as explained in how to find and use your Polymarket proxy wallet. The UMA contracts handle resolution: anyone can propose an outcome through the UMA Optimistic Oracle, and anyone can dispute it.

What are the Combos contracts?

Combos, Polymarket's multi-leg positions, run on their own set of contracts. Each sits behind a proxy, and the proxy is the address to integrate with:

Contract (proxy)Address
PositionManager0x006F54F7f9A22e0000CC2AB60031000000ae9fEF
BinaryModule0x1000008dD9001B968442c1000017eaE6E0dA00Ba
NegRiskModule0x200000900045e3B6259600682756002200028933
CombinatorialModule0x30000034706C7d8e12009DAB006Be20000c031A8
Exchange0xe3333700cA9d93003F00f0F71f8515005F6c00Aa
AutoRedeemer0xa1200000d0002264C9a1698e001292D00E1b00af

Which contract do you need for each task?

TaskContract to call or approve
Get pUSD from USDC.eApprove, then call wrap on the CollateralOnramp
Trade a standard marketApprove pUSD for the CTF Exchange
Trade a negative risk marketApprove pUSD for the Neg Risk CTF Exchange
Split or merge a positionThe collateral adapter that matches the market type
Redeem after resolutionApprove the matching collateral adapter to move your outcome tokens, then call redeemPositions on it
Check outcome token balancesbalanceOf on Conditional Tokens, with the outcome's token ID

How do you check a balance or approval in code?

Reads are free and need no key. This checks a wallet's pUSD balance, its pUSD allowance for the CTF Exchange, and whether its outcome tokens are approved for redemption, using viem:

import { createPublicClient, http, erc20Abi, formatUnits, parseAbi } from 'viem';
import { polygon } from 'viem/chains';

const client = createPublicClient({ chain: polygon, transport: http() });

const PUSD = '0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB';
const CTF = '0x4D97DCd97eC945f40cF65F87097ACe5EA0476045';
const CTF_EXCHANGE = '0xE111180000d2663C0091e4f400237545B87B996B';
const CTF_COLLATERAL_ADAPTER = '0xAdA100Db00Ca00073811820692005400218FcE1f';
const wallet = '0xYourPolymarketWallet';

const ctfAbi = parseAbi(['function isApprovedForAll(address owner, address operator) view returns (bool)']);

const [balance, allowance, adapterApproved] = await Promise.all([
  client.readContract({ address: PUSD, abi: erc20Abi, functionName: 'balanceOf', args: [wallet] }),
  client.readContract({ address: PUSD, abi: erc20Abi, functionName: 'allowance', args: [wallet, CTF_EXCHANGE] }),
  client.readContract({ address: CTF, abi: ctfAbi, functionName: 'isApprovedForAll', args: [wallet, CTF_COLLATERAL_ADAPTER] }),
]);

console.log('pUSD balance:', formatUnits(balance, 6));
console.log('pUSD allowance for the CTF Exchange:', formatUnits(allowance, 6));
console.log('Outcome tokens approved for the collateral adapter:', adapterApproved);

pUSD has 6 decimals, so formatUnits(value, 6) turns base units into dollars. Use the wallet that actually holds the funds, which for most accounts is the proxy or deposit wallet rather than the signing key. For a negative risk market, swap in the Neg Risk CTF Exchange and the NegRiskCtfCollateralAdapter.

How do you avoid hardcoding the wrong contract?

Copy addresses only from Polymarket's official contracts page, never from a message, a forum post or a token list. Fake contracts with familiar names are a common way to steal approvals. Check each address on Polygonscan before you approve it, and re-check after Polymarket upgrades, since this list changed with CTF Exchange V2 and the move to pUSD.

If you would rather not maintain the mapping yourself, the Predictefy API reads each Polymarket market's negRisk flag and pins the matching exchange when it builds an order, which you then sign in your own wallet. Its funding route also builds the USDC.e approval, the pUSD wrap and the exchange approval as unsigned transactions for you to review and sign. The same integration reaches 15+ other venues.

Frequently Asked Questions

What is the Polymarket CTF Exchange contract address?

The CTF Exchange is at 0xE111180000d2663C0091e4f400237545B87B996B on Polygon, and it settles trades in standard markets. Negative risk markets settle on the Neg Risk CTF Exchange at 0xe2222d279d744050d28e00520010520000310F59.

What is the pUSD contract address?

pUSD, Polymarket's collateral token, is at 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB on Polygon. That is the proxy address to integrate with. It is a six-decimal ERC-20 backed by USDC.

Does Polymarket still use USDC?

Trading settles in pUSD, an ERC-20 backed by USDC. USDC.e is wrapped into pUSD through the CollateralOnramp at 0x93070a847efEf7F70739046A929D47a521F5B8ee, and unwrapped through the CollateralOfframp at 0x2957922Eb93258b93368531d39fAcCA3B4dC5854.

What chain are Polymarket's contracts on?

Polygon mainnet, chain ID 137. Every exchange, collateral, wallet factory and resolution contract on Polymarket's official contracts page is deployed there.

Which exchange does a negative risk market use?

The Neg Risk CTF Exchange at 0xe2222d279d744050d28e00520010520000310F59. Orders are signed for a specific exchange, so read the market's negRisk flag from Polymarket's API and approve pUSD for the exchange that matches it.

Are Polymarket's contracts audited?

Yes. CTF Exchange V2 was audited by Quantstamp and by Cantina in March 2026, and security issues can be reported through Polymarket's Cantina bug bounty program.