Read Polymarket on-chain data directly: USDC/pUSD balances, CTF contract reads for outcome supply, UMA Optimistic Oracle proposed/disputed events, and Polygon transaction logs - with code.
Read Polymarket on-chain data directly: USDC/pUSD balances, CTF contract reads for outcome supply, UMA Optimistic Oracle proposed/disputed events, and Polygon transaction logs - with code.
By Harley Young, lead writer at Polymarkets.co.il. Last reviewed: May 2026.
What this chapter covers
This is chapter 9 of our 32-part series on building a Polymarket trading bot. We cover the topic in depth across the sections below. Body content for each section is being written and rolled out chapter-by-chapter; FAQ answers and references are already complete and reflect production experience from running our own trader.
What lives on-chain (vs in CLOB]
pUSD contract address and ABI
Conditional Tokens Framework (CTF)
UMA Optimistic Oracle: proposed and disputed events
Reading Polygon event logs (web3.py / ethers)
When to read on-chain vs trust the API
Code: detect a UMA dispute via event subscription
What lives on-chain (vs in CLOB]
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
pUSD contract address and ABI
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Conditional Tokens Framework (CTF)
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
UMA Optimistic Oracle: proposed and disputed events
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Reading Polygon event logs (web3.py / ethers)
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
When to read on-chain vs trust the API
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Code: detect a UMA dispute via event subscription
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Frequently asked questions
Where can I find the Polymarket pUSD contract?
pUSD lives at 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB on Polygon. It replaced USDC.e as Polymarkets canonical collateral on April 28, 2026. Polygonscan link: https://polygonscan.com/token/0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB.
What is the CTF contract on Polymarket?
CTF stands for Conditional Tokens Framework - the Gnosis-derived ERC-1155 contract that issues outcome tokens (the YES and NO shares you trade). Each Polymarket market is a CTF position with redemption logic tied to UMAs resolution. Bots rarely need to interact with CTF directly; the SDK handles it.
How do I subscribe to UMA dispute events on Polygon?
Subscribe to the UMA Optimistic Oracle V2 contract`s "ProposePrice" and "DisputePrice" events via your Polygon RPC providers WebSocket. Filter by the requesterAddress field (Polymarkets oracle adapter) to get only Polymarket-related disputes. Code samples in the chapter.
Do I need to read on-chain data if I trust the Polymarket API?
For most strategies, no. The CLOB API is canonical for order book and trade data, and the gamma API is canonical for metadata. You read on-chain when you need (a) UMA dispute alerts faster than the API surfaces them, (b) verification that a deposit actually arrived, or (c) custom analytics on outcomes/positions.
What is the latency of on-chain Polygon data vs the Polymarket API?
Polygon block time is ~2 seconds. The Polymarket API generally surfaces order book changes within hundreds of milliseconds of the on-chain match. For most signals, the API is faster than your own on-chain reads. UMA disputes are an exception - the on-chain event fires before the UI reflects the dispute.
Can I read Polymarket positions without the CLOB API?
Technically yes - read CTF balanceOf(walletAddress, positionId) for each position. Practically the CLOB API /trade/positions endpoint is faster, includes pricing, and aggregates all your positions. Only fall back to on-chain reads if you need verification or the API is down.
よくある質問
Where can I find the Polymarket pUSD contract?
pUSD lives at 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB on Polygon. It replaced USDC.e as Polymarkets canonical collateral on April 28, 2026. Polygonscan link: https://polygonscan.com/token/0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB.
What is the CTF contract on Polymarket?
CTF stands for Conditional Tokens Framework - the Gnosis-derived ERC-1155 contract that issues outcome tokens (the YES and NO shares you trade). Each Polymarket market is a CTF position with redemption logic tied to UMAs resolution. Bots rarely need to interact with CTF directly; the SDK handles it.
How do I subscribe to UMA dispute events on Polygon?
Subscribe to the UMA Optimistic Oracle V2 contract`s "ProposePrice" and "DisputePrice" events via your Polygon RPC providers WebSocket. Filter by the requesterAddress field (Polymarkets oracle adapter) to get only Polymarket-related disputes. Code samples in the chapter.
Do I need to read on-chain data if I trust the Polymarket API?
For most strategies, no. The CLOB API is canonical for order book and trade data, and the gamma API is canonical for metadata. You read on-chain when you need (a) UMA dispute alerts faster than the API surfaces them, (b) verification that a deposit actually arrived, or (c) custom analytics on outcomes/positions.
What is the latency of on-chain Polygon data vs the Polymarket API?
Polygon block time is ~2 seconds. The Polymarket API generally surfaces order book changes within hundreds of milliseconds of the on-chain match. For most signals, the API is faster than your own on-chain reads. UMA disputes are an exception - the on-chain event fires before the UI reflects the dispute.
Can I read Polymarket positions without the CLOB API?
Technically yes - read CTF balanceOf(walletAddress, positionId) for each position. Practically the CLOB API /trade/positions endpoint is faster, includes pricing, and aggregates all your positions. Only fall back to on-chain reads if you need verification or the API is down.