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?
| Contract | Address | Used for |
|---|---|---|
| CTF Exchange | 0xE111180000d2663C0091e4f400237545B87B996B | Settling trades in standard markets |
| Neg Risk CTF Exchange | 0xe2222d279d744050d28e00520010520000310F59 | Settling trades in negative risk markets |
| Conditional Tokens (CTF) | 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 | The ERC-1155 contract that holds every outcome token |
| Neg Risk Adapter (CLOB v1, deprecated) | 0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296 | The 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?
| Contract | Address |
|---|---|
| pUSD, CollateralToken (proxy) | 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB |
| pUSD, CollateralToken (implementation) | 0x6bBCef9f7ef3B6C592c99e0f206a0DE94Ad0925f |
| CollateralOnramp | 0x93070a847efEf7F70739046A929D47a521F5B8ee |
| CollateralOfframp | 0x2957922Eb93258b93368531d39fAcCA3B4dC5854 |
| PermissionedRamp | 0xebC2459Ec962869ca4c0bd1E06368272732BCb08 |
| CtfCollateralAdapter | 0xAdA100Db00Ca00073811820692005400218FcE1f |
| NegRiskCtfCollateralAdapter | 0xadA2005600Dec949baf300f4C6120000bDB6eAab |
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?
| Contract | Address |
|---|---|
| Deposit Wallet Factory | 0x00000000000Fb5C9ADea0298D729A0CB3823Cc07 |
| Deposit Wallet Beacon | 0x7A18EDfe055488A3128f01F563e5B479D92ffc3a |
| Gnosis Safe Factory | 0xaacfeea03eb1561c4e67d661e40682bd20e3541b |
| Polymarket Proxy Factory | 0xaB45c5A4B0c941a2F231C04C3f49182e1A254052 |
| UMA Adapter | 0x6A9D222616C90FcA5754cd1333cFD9b7fb6a4F74 |
| UMA Optimistic Oracle | 0xCB1822859cEF82Cd2Eb4E6276C7916e692995130 |
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 |
|---|---|
| PositionManager | 0x006F54F7f9A22e0000CC2AB60031000000ae9fEF |
| BinaryModule | 0x1000008dD9001B968442c1000017eaE6E0dA00Ba |
| NegRiskModule | 0x200000900045e3B6259600682756002200028933 |
| CombinatorialModule | 0x30000034706C7d8e12009DAB006Be20000c031A8 |
| Exchange | 0xe3333700cA9d93003F00f0F71f8515005F6c00Aa |
| AutoRedeemer | 0xa1200000d0002264C9a1698e001292D00E1b00af |
Which contract do you need for each task?
| Task | Contract to call or approve |
|---|---|
| Get pUSD from USDC.e | Approve, then call wrap on the CollateralOnramp |
| Trade a standard market | Approve pUSD for the CTF Exchange |
| Trade a negative risk market | Approve pUSD for the Neg Risk CTF Exchange |
| Split or merge a position | The collateral adapter that matches the market type |
| Redeem after resolution | Approve the matching collateral adapter to move your outcome tokens, then call redeemPositions on it |
| Check outcome token balances | balanceOf 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.