Skip to main content
Add Polymarket Protocol V2 support to an existing pUSD-based binary or neg-risk contract integration. Keep CTF support for V1 markets and holdings: updating the integration does not convert existing CTF balances.

Update Position Operations

V2 positions use a separate ledger. Update balance handling and permissions before replacing position calls.
1

Use PositionManager for V2 Positions

Configure PositionManager and Router using their Polygon Contract Addresses.Use PositionManager for V2 balances and transfers, with uint256 position IDs. Retain CTF token IDs for V1 markets.
Protocol mints and unsafe transfers do not invoke ERC-1155 receiver callbacks. Account for these balance changes explicitly if the receiving contract relies on callbacks.
2

Approve Router

Grant these permissions from the account or contract holding the assets. Existing CTF approvals do not carry over.
3

Replace Split, Merge, and Redemption Calls

Replace legacy calls with these V2 Router ABI signatures:
Router ABI
Router pulls assets from the caller and returns outputs to that caller in one transaction. Do not pre-transfer assets to a module in a separate transaction.

Update Payout Reads and Indexing

Read redemption proceeds through PositionManager:
PositionManager ABI
The result is the pUSD payout in base units for the specified amount. Unresolved positions can revert; zero is a valid losing payout. Index PositionManager transfers and module events:
  • Split burns pUSD; merge and redemption mint pUSD.
  • Attribute operations using transfer owners and recipients. A module event’s initiator is the immediate caller.
  • Avoid counting Router and module events as separate operations.
V2 neg-risk results can be derived without individual ConditionResolved events. Refresh on RemainingConditionsDerivableAsNo and SyntheticConditionDerivableAsYes, then read the module’s getResult or PositionManager’s getPayout.

Update V2 Trading

For BUY orders, approve ExchangeV3 to spend pUSD, including fees. For SELL orders, approve ExchangeV3 as a PositionManager operator. Sign V2 orders against ExchangeV3 with EIP-712 domain version "3"; see the API Migration Guide.

Enable V2 Automatic Redemption

If using AutoRedeemer, submit this approval from the account or contract holding V2 positions. Use the configured PositionManager contract and AutoRedeemer address:
An authorized operator can redeem each submitted position’s full balance, returning pUSD to the same holder. Account for these changes; approval alone does not schedule redemption.