Polymarket CTF Exchange

Polygon PoS Polymarket

0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e

Solidity v0.8.15+commit.e14f2714

🤖
Query this contract from your AI
Reference: polymarket-ctf-exchange-v1-polygon 0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e
Sample prompt: “Tell me the current state of polymarket-ctf-exchange-v1-polygon”
No AI wired up yet? → mcp.smarts.md

Admin & Risk

Who can change the rules?

Block #87,395,577

Detected pausable controls from the verified ABI.

Polymarket contract governance
Ask your AI who can pause, upgrade, or change roles on this Polymarket contract.
Pausable

Current controls

Paused
false

Architecture

Polymarket contract role

Polymarket CTF Exchange

polymarket-ctf-exchange-v1-polygon

Matches orders for binary Polymarket markets. Filled orders move CTF outcome tokens backed by collateral through the standard Conditional Tokens path.

Trader order CTF Exchange Conditional Tokens UMA Adapter Final payout

Shares the same trading ABI as the Neg-Risk Exchange; the difference is the market path.

Market type Binary / Yes-No markets
Token path CTF outcome tokens
Resolution path Conditional Tokens + UMA Adapter
Compare with Polymarket Neg-Risk Exchange

Overview

Read Functions
31
Write Functions
19
Events
13

Read Functions

Block #87,395,576 · just now
admins(address) view

Returns the admin configuration value for the specified address.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
address

Returns

Name Type Description
uint256 Admin configuration value for the address as a uint256 (e.g., role bitmask, expiry, or permission flag).✨ AI
domainSeparator() view → 0x1a573e3617c78403b5b4b892827992f027b03d4eaf570048b8ee8cdd84d151be

Returns the EIP-712 domain separator used to sign exchange orders.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
bytes32 EIP-712 domain separator (bytes32) for this exchange, used in order signature hashing.✨ AI
getCollateral() view → 0x2791bca1f2de4661ed88a30c99a7a9449aa84174

Returns the collateral token contract address used by this exchange.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address ERC20 collateral token contract address backing and used to settle CTF outcome tokens.✨ AI
getComplement(token: uint256) view

Gets the complement of a tokenId

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
token uint256 - The token

Returns

Name Type Description
uint256
getConditionId(token: uint256) view

Return the condition id associated with a CTF outcome token.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

dev: Constructs a condition ID from an oracle, a question ID, and the outcome slot count for the question.

Parameters

Name Type Description
token uint256 CTF outcome token id to derive the Conditional Tokens condition id.✨ AI

Returns

Name Type Description
bytes32 bytes32 condition id for the given token, used by Conditional Tokens and the UMA adapter.✨ AI
getCtf() view → 0x4d97dcd97ec945f40cf65f87097ace5ea0476045

Return the CTF contract address used by this exchange.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address The address of the Conditional Tokens Framework (CTF) contract used by this exchange to manage outcome tokens.✨ AI
getMaxFeeRate() pure → 1,000

Returns the maximum fee rate for an order

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
uint256
getOrderStatus(orderHash: bytes32) view

Gets the status of an order

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets. Returns the fill/cancel state used to decide whether a Polymarket order can still trade.

Parameters

Name Type Description
orderHash bytes32 - The hash of the order

Returns

Name Type Description
tuple
getPolyProxyFactoryImplementation() view → 0x44e999d5c2f66ef0861317f9a4805ac2e90aeb4f

Gets the Polymarket Proxy factory implementation address

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address
getPolyProxyWalletAddress(_addr: address) view

Gets the Polymarket proxy wallet address for an address

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
_addr address - The address that owns the proxy wallet

Returns

Name Type Description
address
getProxyFactory() view → 0xab45c5a4b0c941a2f231c04c3f49182e1a254052

Gets the Proxy factory address

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address
getSafeAddress(_addr: address) view

Gets the Polymarket Gnosis safe address for a signer

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
_addr address

Returns

Name Type Description
address
getSafeFactory() view → 0xaacfeea03eb1561c4e67d661e40682bd20e3541b

Gets the Safe factory address

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address
getSafeFactoryImplementation() view → 0xe51abdf814f8854941b9fe8e3a4f65cab4e7a4a8

Gets the Safe factory implementation address

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address
hashOrder(order: tuple) view

Computes the hash for an order

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
order tuple - The order to be hashed

Returns

Name Type Description
bytes32
isAdmin(usr: address) view

Check whether an address is an admin of this CTF Exchange.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
usr address Address to check for admin privileges.✨ AI

Returns

Name Type Description
bool true if usr is an admin of the CTF Exchange; otherwise false.✨ AI
isOperator(usr: address) view

Return whether an address is an authorized operator for this CTF exchange.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
usr address Address to check for operator privileges.✨ AI

Returns

Name Type Description
bool true if address is an operator authorized to perform exchange actions; otherwise false.✨ AI
isValidNonce(usr: address, nonce: uint256) view

Checks whether a user's nonce is valid for order replay protection.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
usr address Address of the user to check.✨ AI
nonce uint256 Nonce value to validate.✨ AI

Returns

Name Type Description
bool True if the nonce is valid for the user (unused and acceptable); otherwise false.✨ AI
nonces(address) view

Returns the current replay-protection nonce for a trader address.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
address

Returns

Name Type Description
uint256 Current uint256 nonce used to prevent order replay for that address.✨ AI
operators(address) view

Fetches operator data for a given address.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
address

Returns

Name Type Description
uint256 A uint256 encoding the operator's permission flags or status metadata.✨ AI
orderStatus(bytes32) view

Returns whether the order is filled or cancelled and the remaining unfilled amount.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
bytes32

Returns

Name Type Description
isFilledOrCancelled bool isFilledOrCancelled: bool indicating order is fully filled or has been cancelled.✨ AI
remaining uint256 remaining: uint256 amount still unfilled for the order, in collateral token units.✨ AI
parentCollectionId() view → 0x0000000000000000000000000000000000000000000000000000000000000000

Return the parent collection id used by Conditional Tokens for this CTF market.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
bytes32 Parent collection id (bytes32) used to derive condition and child collections for Conditional Tokens.✨ AI
paused() view → false

Returns whether the CTF Exchange is paused, disabling trading actions.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
bool Boolean true if the exchange is paused (trading disabled), false otherwise.✨ AI
proxyFactory() view → 0xab45c5a4b0c941a2f231c04c3f49182e1a254052

Return the address of the proxy factory contract used to deploy CTF market proxy adapters.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address Address of the proxy factory contract that the exchange uses to deploy per-market proxy adapters.✨ AI
registry(uint256) view

Get the registry entry's complement and condition id by index.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
uint256

Returns

Name Type Description
complement uint256 complement: Complement uint256 for this registry entry, used in CTF outcome calculations.✨ AI
conditionId bytes32 conditionId: bytes32 Conditional Tokens condition id tied to the binary market outcome.✨ AI
safeFactory() view → 0xaacfeea03eb1561c4e67d661e40682bd20e3541b

Returns the address of the safe factory used to deploy outcome safes for the CTF exchange.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Returns

Name Type Description
address Address of the factory contract that creates the safes which hold CTF outcome tokens.✨ AI
supportsInterface(interfaceId: bytes4) view

Checks whether the contract implements an interface identified by interfaceId.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

dev: See {IERC165-supportsInterface}.

Parameters

Name Type Description
interfaceId bytes4 ERC165 interface identifier (first 4 bytes).✨ AI

Returns

Name Type Description
bool True if the contract implements the interface identified by interfaceId, false otherwise.✨ AI
validateComplement(token: uint256, complement: uint256) view

Validates the complement of a tokenId

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
token uint256 - The tokenId
complement uint256 - The complement to be validated
validateOrder(order: tuple) view

order - The order to be validated

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets. Checks whether an order is structurally fillable before execution, including signature and exchange constraints.

Parameters

Name Type Description
order tuple
validateOrderSignature(orderHash: bytes32, order: tuple) view

Validates the signature of an order

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
orderHash bytes32 - The hash of the order
order tuple - The order
validateTokenId(tokenId: uint256) view

Validates that a tokenId is registered

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
tokenId uint256 - The tokenId

Write Functions

addAdmin(admin_: address) nonpayable

Adds a new admin Can only be called by a current admin

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
admin_ address - The new admin
addOperator(operator_: address) nonpayable

Adds a new operator Can only be called by a current admin

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
operator_ address - The new operator
cancelOrder(order: tuple) nonpayable

order - The order to be cancelled

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets. Prevents a signed order from being filled later; useful when a trader withdraws liquidity from a Polymarket market.

Parameters

Name Type Description
order tuple
cancelOrders(orders: tuple[]) nonpayable

orders - The set of orders to be cancelled

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets. Batch version of order cancellation for multiple signed Polymarket orders.

Parameters

Name Type Description
orders tuple[]
fillOrder(order: tuple, fillAmount: uint256) nonpayable

Fills an order

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
order tuple - The order to be filled
fillAmount uint256 - The amount to be filled, always in terms of the maker amount
fillOrders(orders: tuple[], fillAmounts: uint256[]) nonpayable

Fills a set of orders

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
orders tuple[] - The order to be filled
fillAmounts uint256[] - The amounts to be filled, always in terms of the maker amount
incrementNonce() nonpayable

Increment the trading nonce to invalidate previously signed off-chain orders.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

matchOrders(takerOrder: tuple, makerOrders: tuple[], takerFillAmount: uint256, makerFillAmounts: uint256[]) nonpayable

Matches a taker order against a list of maker orders

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets. Core exchange entry point: matches signed Polymarket orders and moves collateral/outcome tokens for the active market path.

Parameters

Name Type Description
takerOrder tuple - The active order to be matched
makerOrders tuple[] - The array of maker orders to be matched against the active order
takerFillAmount uint256 - The amount to fill on the taker order, always in terms of the maker amount
makerFillAmounts uint256[] - The array of amounts to fill on the maker orders, always in terms of the maker amount
onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) nonpayable

Handles incoming ERC-1155 batch transfers of CTF outcome tokens and triggers order processing.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

dev: Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. NOTE: To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector).

Parameters

Name Type Description
address
address
uint256[]
uint256[]
bytes

Returns

Name Type Description
bytes4 `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
onERC1155Received(address, address, uint256, uint256, bytes) nonpayable

Handle receipt of an ERC-1155 token for a Polymarket CTF trade, process the incoming CTF outcome tokens and acknowledge receipt.✨ AI

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

dev: Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. NOTE: To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector).

Parameters

Name Type Description
address
address
uint256
uint256
bytes

Returns

Name Type Description
bytes4 `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
pauseTrading() nonpayable

Pause trading on the Exchange

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

registerToken(token: uint256, complement: uint256, conditionId: bytes32) nonpayable

Registers a tokenId, its complement and its conditionId for trading on the Exchange

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
token uint256 - The tokenId being registered
complement uint256 - The complement of the tokenId
conditionId bytes32 - The CTF conditionId
removeAdmin(admin: address) nonpayable

Removes an existing Admin Can only be called by a current admin

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
admin address - The admin to be removed
removeOperator(operator: address) nonpayable

Removes an existing operator Can only be called by a current admin

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
operator address - The operator to be removed
renounceAdminRole() nonpayable

Removes the admin role for the caller Can only be called by an existing admin

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

renounceOperatorRole() nonpayable

Removes the operator role for the caller Can only be called by an exiting operator

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

setProxyFactory(_newProxyFactory: address) nonpayable

Sets a new Proxy Wallet factory for the Exchange

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
_newProxyFactory address - The new Proxy Wallet factory
setSafeFactory(_newSafeFactory: address) nonpayable

Sets a new safe factory for the Exchange

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Parameters

Name Type Description
_newSafeFactory address - The new Safe wallet factory
unpauseTrading() nonpayable

Unpause trading on the Exchange

Polymarket context On the CTF Exchange, this applies to binary Yes/No markets.

Events

FeeCharged(receiver: address, tokenId: uint256, amount: uint256)

Emitted when a fee is charged

Name Type Indexed Description
receiver address
tokenId uint256
amount uint256
NewAdmin(newAdminAddress: address, admin: address)

Emitted when a new admin is added

Name Type Indexed Description
newAdminAddress address
admin address
NewOperator(newOperatorAddress: address, admin: address)

Emitted when a new operator is added

Name Type Indexed Description
newOperatorAddress address
admin address
OrderCancelled(orderHash: bytes32)

Emitted when an order is cancelled

Polymarket context A signed Polymarket order was invalidated before fill.

Name Type Indexed Description
orderHash bytes32
OrderFilled(orderHash: bytes32, maker: address, taker: address, makerAssetId: uint256, takerAssetId: uint256, makerAmountFilled: uint256, takerAmountFilled: uint256, fee: uint256)

Emitted when an order is filled

Polymarket context Primary exchange activity signal: a Polymarket order was matched on-chain.

Name Type Indexed Description
orderHash bytes32
maker address
taker address
makerAssetId uint256
takerAssetId uint256
makerAmountFilled uint256
takerAmountFilled uint256
fee uint256
OrdersMatched(takerOrderHash: bytes32, takerOrderMaker: address, makerAssetId: uint256, takerAssetId: uint256, makerAmountFilled: uint256, takerAmountFilled: uint256)

Emitted when a set of orders is matched

Name Type Indexed Description
takerOrderHash bytes32
takerOrderMaker address
makerAssetId uint256
takerAssetId uint256
makerAmountFilled uint256
takerAmountFilled uint256
ProxyFactoryUpdated(oldProxyFactory: address, newProxyFactory: address)
Name Type Indexed Description
oldProxyFactory address
newProxyFactory address
RemovedAdmin(removedAdmin: address, admin: address)

Emitted when an admin is removed

Name Type Indexed Description
removedAdmin address
admin address
RemovedOperator(removedOperator: address, admin: address)

Emitted when an operator is removed

Name Type Indexed Description
removedOperator address
admin address
SafeFactoryUpdated(oldSafeFactory: address, newSafeFactory: address)
Name Type Indexed Description
oldSafeFactory address
newSafeFactory address
TokenRegistered(token0: uint256, token1: uint256, conditionId: bytes32)

Emitted when a token is registered

Name Type Indexed Description
token0 uint256
token1 uint256
conditionId bytes32
TradingPaused(pauser: address)
Name Type Indexed Description
pauser address
TradingUnpaused(pauser: address)
Name Type Indexed Description
pauser address