Polymarket Neg-Risk Exchange

Polygon PoS Polymarket

0xe2222d279d744050d28e00520010520000310f59

Solidity v0.8.34+commit.80d5c536

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

Admin & Risk

Who can change the rules?

Block #87,395,593

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 Neg-Risk Exchange

polymarket-neg-risk-exchange-v2-polygon

Matches orders for multi-outcome Polymarket markets. Filled orders use neg-risk outcome tokens, then resolution flows through the Neg-Risk Adapter before final CTF-style settlement.

Trader order Neg-Risk Exchange Neg-Risk Adapter UMA Adapter Final payout

Shares the same trading ABI as the CTF Exchange; the difference is the market path.

Market type Multi-outcome / mutually exclusive markets
Token path Neg-risk outcome tokens
Resolution path Neg-Risk Adapter + UMA Adapter
Compare with Polymarket CTF Exchange

Overview

Read Functions
27
Write Functions
17
Events
16

Read Functions

Block #87,395,593 · just now
PARENT_COLLECTION_ID() view → 0x0000000000000000000000000000000000000000000000000000000000000000

Returns the parent collection id used by the Conditional Tokens path.✨ AI

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets. Identifies the parent collection used when deriving conditional-token positions for this exchange path.

Returns

Name Type Description
bytes32 bytes32 identifier of the Conditional Tokens parent collection.✨ AI
eip712Domain() view → 0x0f, Polymarket CTF Exchange, 2, 137, 0xe2222d279d744050d28e00520010520000310f59, 0x0000000000000000000000000000000000000000000000000000000000000000, []

Return the EIP-712 domain fields used for signing orders on the Polymarket CTF Exchange.✨ AI

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

dev: See: https://eips.ethereum.org/EIPS/eip-5267

Returns

Name Type Description
fields bytes1 Domain type byte (bytes1) used as a small-domain flag or variant in EIP-712 encoding.✨ AI
name string Human-readable domain name (string) identifying the signing domain, e.g. Polymarket CTF Exchange.✨ AI
version string Domain version string (string) used to version the signing domain.✨ AI
chainId uint256 Chain ID (uint256) applied to the domain to prevent cross-chain replay attacks.✨ AI
verifyingContract address Verifying contract address (address) that validates signatures for this EIP-712 domain.✨ AI
salt bytes32 Domain salt (bytes32) used to further distinguish the signing domain instance.✨ AI
extensions uint256[] Array of uint256 extension fields providing optional domain metadata; may be empty.✨ AI
getCollateral() view → 0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb

Returns the collateral token address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getCtf() view → 0x4d97dcd97ec945f40cf65f87097ace5ea0476045

Returns the Conditional Tokens Framework address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getCtfCollateral() view → 0x3a3bd7bb9528e159577f7c2e685cc81a765002e2

Returns the collateral address used by the CTF for position ID derivation

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getFeeReceiver() view → 0x115f48dc2a731aa16251c6d6e1befc42f92accc9

Returns the current fee receiver address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getMaxFeeRate() view → 0

Returns the current max fee rate in basis points

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
uint256
getOrderStatus(orderHash: bytes32) view

Gets the status of an order

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome 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
getOutcomeTokenFactory() view → 0xada200001000ef00d07553cee7006808f895c6f1

Returns the address that facilitates outcome token minting or merging

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getProxyFactory() view → 0xab45c5a4b0c941a2f231c04c3f49182e1a254052

Gets the Proxy factory address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getProxyImplementation() view → 0x44e999d5c2f66ef0861317f9a4805ac2e90aeb4f

Gets the Proxy implementation address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getProxyWalletAddress(_addr: address) view

Gets the Polymarket proxy wallet address for an address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

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

Returns

Name Type Description
address
getSafeFactory() view → 0xaacfeea03eb1561c4e67d661e40682bd20e3541b

Gets the Safe factory address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getSafeImplementation() view → 0xe51abdf814f8854941b9fe8e3a4f65cab4e7a4a8

Gets the Safe implementation address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
address
getSafeWalletAddress(_addr: address) view

Gets the Polymarket Gnosis Safe address for an address

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
_addr address - The Safe owner/signer address used to derive the Safe address

Returns

Name Type Description
address
hashOrder(order: tuple) view

Computes the hash for an order

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
order tuple - The order to be hashed

Returns

Name Type Description
bytes32
isAdmin(_usr: address) view

Returns whether an address is an admin

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
_usr address The address to check

Returns

Name Type Description
bool
isOperator(_usr: address) view

Returns whether an address is an operator

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
_usr address The address to check

Returns

Name Type Description
bool
isUserPaused(user: address) view

Checks if a user is currently paused

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
user address - The user address to check

Returns

Name Type Description
bool
orderStatus(bytes32) view

Return whether an order is fully filled and how many outcome tokens remain.✨ AI

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
bytes32

Returns

Name Type Description
filled bool filled: true if the order is fully filled, false otherwise.✨ AI
remaining uint248 remaining: uint248 count of outcome tokens still unfilled for the order.✨ AI
paused() view → false

Reports whether the CTF exchange is currently paused.✨ AI

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
bool True if the exchange is paused (trading and order matching disabled), false otherwise.✨ AI
supportsInterface(interfaceId: bytes4) pure

ERC-165 interface detection

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
interfaceId bytes4 - The interface identifier to check

Returns

Name Type Description
bool
userPauseBlockInterval() view → 100

Returns the number of blocks a user's pause lasts.✨ AI

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Returns

Name Type Description
uint256 The pause interval in blocks that applies to a user (uint256).✨ AI
userPausedBlockAt(address) view

Return the block number when a specific user was paused in the exchange.✨ AI

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
address

Returns

Name Type Description
uint256 Block number when the user was paused; returns 0 if the user is not paused.✨ AI
validateFee(fee: uint256, cashValue: uint256) view

Validates that the fee does not exceed the maximum allowed rate

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
fee uint256 - The fee amount being charged, denominated in collateral
cashValue uint256 - The value of the trade, denominated in collateral
validateOrder(order: tuple) view

order - The order to be validated

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome 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 Neg-Risk Exchange, this applies to multi-outcome markets.

dev: If the signature is empty, only preapproval is checked. This allows operators to omit the signature for preapproved orders, saving calldata gas and skipping ECDSA recovery.

Parameters

Name Type Description
orderHash bytes32 - The hash of the order
order tuple - The order

Write Functions

addAdmin(_admin: address) nonpayable

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

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome 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 Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
_operator address - The new operator
invalidatePreapprovedOrder(orderHash: bytes32) nonpayable

Entrypoint to invalidate a preapproval

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
orderHash bytes32 - The hash of the order to invalidate
matchOrders(conditionId: bytes32, takerOrder: tuple, makerOrders: tuple[], takerFillAmount: uint256, makerFillAmounts: uint256[], takerFeeAmount: uint256, makerFeeAmounts: uint256[]) nonpayable

Matches a taker order against a list of maker orders

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets. Core exchange entry point: matches signed Polymarket orders and moves collateral/outcome tokens for the active market path.

Parameters

Name Type Description
conditionId bytes32 - The conditionId of the market being traded
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
takerFeeAmount uint256 - The fee to be charged to the taker order
makerFeeAmounts uint256[] - The fee to be charged to the maker orders
onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) nonpayable

Handles receipt of a batch of ERC1155 tokens.

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

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

Returns

Name Type Description
bytes4 The function selector for acceptance.
onERC1155Received(address, address, uint256, uint256, bytes) nonpayable

Handles receipt of a single ERC1155 token.

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
address
address
uint256
uint256
bytes

Returns

Name Type Description
bytes4 The function selector for acceptance.
pauseTrading() nonpayable

Pause trading on the Exchange

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

pauseUser() nonpayable

Allows a user to pause their account

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

preapproveOrder(order: tuple) nonpayable

Entrypoint to set an order as preapproved

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
order tuple - The order to be set as preapproved
removeAdmin(_admin: address) nonpayable

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

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome 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 Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

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

Removes the operator role for the caller

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

dev: Can only be called by an existing operator
setFeeReceiver(receiver: address) nonpayable

Sets a new fee receiver for the Exchange

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
receiver address - The new fee receiver address
setMaxFeeRate(rate: uint256) nonpayable

Sets the maximum fee rate for trades

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
rate uint256 - The new max fee rate in basis points
setUserPauseBlockInterval(_interval: uint256) nonpayable

Sets the user pause block interval

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Parameters

Name Type Description
_interval uint256 - The new user pause block interval
unpauseTrading() nonpayable

Unpause trading on the Exchange

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

unpauseUser() nonpayable

Allows a user to unpause their account

Polymarket context On the Neg-Risk Exchange, this applies to multi-outcome markets.

Events

FeeCharged(receiver: address, amount: uint256)

Emitted when a fee is charged

Name Type Indexed Description
receiver address
amount uint256
FeeReceiverUpdated(feeReceiver: address)

Emitted when the fee receiver is updated

Name Type Indexed Description
feeReceiver address
MaxFeeRateUpdated(maxFeeRate: uint256)

Emitted when the max fee rate is updated

Name Type Indexed Description
maxFeeRate 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
OrderFilled(orderHash: bytes32, maker: address, taker: address, side: uint8, tokenId: uint256, makerAmountFilled: uint256, takerAmountFilled: uint256, fee: uint256, builder: bytes32, metadata: bytes32)

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
side uint8
tokenId uint256
makerAmountFilled uint256
takerAmountFilled uint256
fee uint256
builder bytes32
metadata bytes32
OrderPreapprovalInvalidated(orderHash: bytes32)

Emitted when a preapproval is invalidated

Name Type Indexed Description
orderHash bytes32
OrderPreapproved(orderHash: bytes32)

Emitted when an order is preapproved

Name Type Indexed Description
orderHash bytes32
OrdersMatched(takerOrderHash: bytes32, takerOrderMaker: address, side: uint8, tokenId: uint256, makerAmountFilled: uint256, takerAmountFilled: uint256)

Emitted when a set of orders is matched

Name Type Indexed Description
takerOrderHash bytes32
takerOrderMaker address
side uint8
tokenId uint256
makerAmountFilled uint256
takerAmountFilled uint256
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
TradingPaused(pauser: address)
Name Type Indexed Description
pauser address
TradingUnpaused(pauser: address)
Name Type Indexed Description
pauser address
UserPauseBlockIntervalUpdated(oldInterval: uint256, newInterval: uint256)

Emitted when the user pause block interval is updated

Name Type Indexed Description
oldInterval uint256
newInterval uint256
UserPaused(user: address, effectivePauseBlock: uint256)

Emitted when a user pauses their account

Name Type Indexed Description
user address
effectivePauseBlock uint256
UserUnpaused(user: address)

Emitted when a user unpauses their account

Name Type Indexed Description
user address