DeFiPunk'd

Polymarket

2 deployments · $437.6M aggregate TVL · Prediction Market

Deployments

Each deployment is rated independently. Pick one to see its rating, risk analysis, and stage.

TVL $437.6M
Type Prediction Market
Chain Polygon
View on DeFiLlama ↗
Control criteria
Upgradeability Mixed Bug bounty cantina.xyz Governance forum Docs docs.polymarket.com
About

Polymarket International is a prediction-market protocol on Polygon where users buy/sell ERC-1155 outcome shares (YES/NO) issued by Gnosis Conditional Tokens against an ERC-20 collateral. Markets are resolved by an UMA Optimistic Oracle adapter that writes payouts to the CTF, after which users can permissionlessly redeem winning shares for collateral. Trading uses a hybrid central limit order book: users sign orders off-chain to Polymarket's operator and the operator settles matched orders on-chain via the CTF Exchange. Version 2 (April 2026) introduces pUSD (Polymarket USD), a UUPS-upgradeable wrapper around USDC/USDC.e used as the new exchange collateral.

Risk analysis

One card per dimension, sorted by severity. Only Verifiability and Autonomy carry automated signals in Phase 0. See methodology for scope.

Audit a dimension yourself · DEFI@home Contribute an LLM-run assessment — any model, any dimension. Three agreeing runs merge automatically into the public record.

DEFI@home is a distributed audit network modeled on SETI@home: instead of CPU cycles, it crowdsources LLM reasoning. Paste a slice prompt into Claude, ChatGPT, Gemini, or any browsing-capable model, and submit the JSON output as a pull request. The quorum bot merges it once ≥3 independent runs (from different models) reach the same grade — no single model, and no single contributor, can move the needle alone. How it works →

  • Address discovery 15 addresses on file · 1 run Submit run ↗
  • Verifiability ✓ 3/3 models agree AI-only weak orange — weak consensus margin Submit run ↗
  • Control ✓ 3/3 models agree AI-only weak orange — weak consensus margin Submit run ↗
  • Ability to exit ✓ 3/3 models agree AI-only weak orange — weak consensus margin Submit run ↗
  • Autonomy ✓ 3/3 models agree AI-only weak orange — weak consensus margin Submit run ↗
  • Open Access ✓ 3/3 models agree AI-only weak green — weak consensus margin Submit run ↗
  • Audit all 5 dimensions · one prompt Submit run ↗
  1. Verifiability tentative 3/3 models agree AI-only 3/3 with chat share link
    All inspected contracts verified on Polygonscan with public source repos and ChainSecurity / OpenZeppelin audits on V1 architecture; V2 CTFExchange + pUSD (April 2026) audits not yet in the Polymarket-published audit registry
    Verdict

    Choosing orange per V5: drift between the audit-registry-listed CTFExchange V1 (0x4bFb...982e) and the address_book's V2 (0xE111...996B), plus the newly-deployed UUPS-upgradeable pUSD CollateralToken on the collateral path — both are fund-custody / settlement-critical contracts whose audit reports are not present in the Polymarket-published contract-security registry as of this run — meets the rubric's orange criterion 'audit scope is stale relative to deployment' for the current production surface; the green steel-man assumes a not-yet-documented V2 audit exists, which is not affirmatively established by fetched evidence.

    Steelman argument
    Steelman argument The full V1 architecture (CTFExchange V1, ConditionalTokens, NegRisk modules, UmaCtfAdapter, Proxy Factory, Safe Factory) is verified on Polygonscan and audited by ChainSecurity and/or OpenZeppelin with public reports linked from the Polymarket-owned contract-security repo, but the V2 CTFExchange and pUSD deployments — both April 2026 and on the fund-custody / collateral path — are verified on Polygonscan but their audit status is not yet documented in the public registry.
    Evidence (6)
    V1
    Verification status of inspected contracts: CTFExchange V2 (0xE111...996B) — verified on Polygonscan ('ABI source: etherscan' per defipunkd, contract name 'CTFExchange'); ConditionalTokens (0x4D97...6045) — verified ('ABI source: etherscan', name 'ConditionalTokens'); UmaCtfAdapter (0x6A9D...4F74) — verified ('Contract Source Code Verified (Exact Match)' on the Polygonscan source page, compiler 0.8.15, name 'UmaCtfAdapter'); pUSD CollateralToken proxy (0xC011...2DFB) — verified ('ABI source: etherscan', name 'CollateralToken'). The proxy/implementation pair for pUSD (proxy 0xC011...2DFB, implementation 0x6bBCef...0925f per the address_book) is identified by the ABI exposing upgradeToAndCall / proxiableUUID; the implementation itself was not directly opened in Polygonscan this run.
    V2
    Public source repos exist for the core stack: github.com/Polymarket/ctf-exchange (V1), github.com/Polymarket/ctf-exchange-v2 (V2, source visible), github.com/Polymarket/uma-ctf-adapter (UMA adapter source visible including the verified UmaCtfAdapter.sol with the 2-day emergencySafetyPeriod constant), github.com/Polymarket/neg-risk-ctf-adapter (Neg-Risk modules), and github.com/Polymarket/contract-security (registry of audits and deployment addresses). The Polygonscan-visible source of UmaCtfAdapter corresponds in structure (file naming, imports of Auth, BulletinBoard, libraries/TransferHelper, etc.) to the file uma-ctf-adapter/src/UmaCtfAdapter.sol in the public repo. Bytecode-equivalence diffing and explicit commit SHA pinning were not performed this run.
    V3
    Audit coverage per the Polymarket-published contract-security registry: ProxyFactory (0xaB45...4052) — ChainSecurity; Safe Factory (0xaacF...3541b) — ChainSecurity; ConditionalTokens (0x4D97...6045) — ChainSecurity; CTFExchange V1 (0x4bFb...982e) — ChainSecurity; NegRisk Adapter / Operator / Wrapped Collateral / CtfExchange / FeeModule / UmaCtfAdapter (the v2 multi-outcome modules) — ChainSecurity + OpenZeppelin; UmaCtfAdapter (0x6A9D...4F74) — ChainSecurity (the linked file in the registry is 'oz_uma_ctf_adapter.pdf' but the registry row labels it ChainSecurity; the UMA adapter repo separately links an OpenZeppelin audit at uma-ctf-adapter/audit/Polymarket_UMA_Optimistic_Oracle_Adapter_Audit.pdf). Audit dates are not enumerated in the registry rows; the linked audit PDFs were not opened this run.
    V4
    Both audit firms identified — ChainSecurity and OpenZeppelin — are on the rubric's list of recognized Solidity audit firms, so the v1 / NegRisk audit coverage meets the recognized-firm bar. No unknown audit firm needs to be considered for the V1 architecture.
    V5
    Post-audit drift: the V1 CTFExchange (0x4bFb...982e) is the audited deployment in the contract-security registry, but the address_book in this assessment pins the NEWER CTFExchange V2 at 0xE111...996B as the current production exchange. The ctf-exchange-v2 README (April 2026) mentions security disclosures via the 'Cantina bug bounty program' but does NOT link a published V2 audit report in the contract-security registry as of this run. pUSD CollateralToken (0xC011...2DFB) — a NEW April 2026 UUPS-upgradeable contract that holds V2 trading collateral — is likewise not in the contract-security registry. Both are fund-custody/settlement-critical surfaces by the V5 rubric. Whether a recognized-firm audit covers the deployed V2 bytecode could not be confirmed this run.
    V6
    Proxy/implementation: only pUSD CollateralToken (0xC011...2DFB) is a proxy among the inspected addresses. The defipunkd ABI surface for the proxy includes upgradeToAndCall and proxiableUUID (UUPS), and the pinned address_book lists 0x6bBCef...0925f as the current implementation. The implementation contract was NOT independently opened on Polygonscan this run, so 'implementation verified separately' is not affirmatively established — recorded in unknowns.
    Why is this consensus tentative?
    • weak consensus margin

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 url ↗ gpt-5.5-thinking url ↗ grok-3 url ↗ View raw submissions ↗
  2. Control tentative 3/3 models agree AI-only 3/3 with chat share link
    Multiple T1 admin powers reachable with short or zero delay: UMA Adapter emergency-resolve (2-day), pUSD V2 UUPS upgrade (no timelock); admin holders unidentified
    Verdict

    Choosing orange because the T1 paths are real and on the uncontested fast path with delays well under 7 days (0d for pUSD upgrade, 2d for emergencyResolve), but the admin/owner identities were not re-verified on-chain this run, so the rubric's 'EOA or 2-of-3 with no timelock' red trigger is not affirmatively shown — orange (failing-Security-Council multisig on a T1 path with <7d effective delay) is the steel-man best supported by the inspected ABIs.

    Steelman argument
    Steelman argument T1 is reachable on the uncontested fast path with delays of 0 days (pUSD upgrade) and 2 days (UMA emergency resolve), both under the 7-day bar required for green, while the most likely admin class — an internal Polymarket operations multisig — fails Security Council criteria but is not affirmatively a 2-of-3 or EOA.
    Evidence (7)
    C1
    UmaCtfAdapter (0x6A9D...4F74) exposes onlyAdmin functions flag, pause, unpause, emergencyResolve, reset, addAdmin, removeAdmin, renounceAdmin. ConditionalTokens (0x4D97...6045) has no admin/owner functions visible on its ABI — fully immutable. CTFExchange V2 (0xE111...996B) exposes isAdmin/addAdmin/removeAdmin and admin-gated pauseTrading/unpauseTrading/setFeeReceiver/setMaxFeeRate/setUserPauseBlockInterval. pUSD CollateralToken proxy (0xC011...2DFB) is Solady Ownable + UUPS and exposes owner(), transferOwnership, grantRoles/revokeRoles, addMinter/addWrapper, mint/burn, and upgradeToAndCall. Specific admin holder addresses were not read on-chain this run (RPC tenant disabled on defipunkd surfacer; see unknowns).
    C2
    Upgradeability is MIXED across the system. ConditionalTokens, CTFExchange V1 (0x4bFb...982e) and V2, UmaCtfAdapter are constructor-only implementations with no upgrade entry point visible on their ABIs (immutable). pUSD CollateralToken proxy at 0xC011...2DFB is UUPS-upgradeable: ABI exposes upgradeToAndCall(address newImplementation,bytes data) and proxiableUUID(); current implementation pointer is 0x6bBCef...0925f per pinned address_book. A4 Polymarket Proxy Factory (0xaB45...4052) deploys per-user proxy wallets — those are 1-of-1 user-owned multisigs, NOT a protocol-admin upgrade surface, and are documented as such in the Polymarket proxy-wallet docs.
    C3
    EXECUTION PATH for the highest-tier admin actions has effectively NO multi-stage timelock. (a) pUSD V2 upgrade: owner() → upgradeToAndCall(impl, data) in a single transaction, delay 0 seconds. No scheduler / timelock contract is referenced in the proxy ABI. (b) UMA Adapter emergency override: admin → flag(questionID) sets emergencyResolutionTimestamp = block.timestamp + emergencySafetyPeriod, where emergencySafetyPeriod is a public constant = 2 days (172800 s) per the verified Polygonscan source; admin then waits ≥2 days and calls emergencyResolve(questionID, payouts) which writes arbitrary [YES,NO] payouts directly to ctf.reportPayouts. (c) UMA Adapter pause(questionID): admin → pause(questionID) sets paused=true with NO time cap on individual questions. (d) CTFExchange V2 admin: admin → pauseTrading()/setMaxFeeRate(rate)/setFeeReceiver(addr) in a single transaction, delay 0 seconds.
    C4
    Privileged actors and their scope: (i) pUSD owner — single owner() role on a UUPS proxy, holds T1 power to replace implementation bytecode (entire token + minter logic). Identity not re-verified on-chain this run. (ii) UmaCtfAdapter admins() — uint256-mapped role set (count unknown), each can flag/pause/emergencyResolve any market; T1 per market. (iii) CTFExchange V1 and V2 admin set — each admin can pauseTrading globally and tune fees up to a max cap; T1 for trading-availability and T2 for fee economics. None of these are identified as Gnosis Safes by ABI inspection alone, and a 'Security Council' (≥7 signers, ≥51% threshold, ≥50% non-insider, publicly announced) is not documented for Polymarket; the protocol's published proxy-wallet system is for end-users, not for protocol governance.
    C5
    No on-chain Governor / GovernorBravo / Aragon Voting / OZ Governor contract is present in the address_book or surfaced from the inspected contracts. Polymarket's POLY governance token has been publicly announced but is unlaunched as of 2026-05-18, so no token-weighted on-chain governance currently exists. Governance is therefore admin-key based, not vote-based.
    C6
    UmaCtfAdapter has a dedicated emergency-pause path (flag → 2-day safety period → emergencyResolve) separate from the standard pause()/unpause(). Both routes are held by the same onlyAdmin role — there is no separate guardian role with shorter time bound or different actor; the only time-bound is the 2-day emergencySafetyPeriod for arbitrary-payout resolution, while regular pause(questionID) is uncapped.
    C7
    HIGHEST tier reachable on the uncontested fast path is T1 (FUND-CRITICAL): (a) pUSD owner can upgrade implementation to bytecode that mints unlimited pUSD or transfers the underlying USDC/USDCe vault out — directly impairs collateral backing of every V2 market, with zero on-chain delay; (b) UmaCtfAdapter admin can emergencyResolve any flagged market with arbitrary [YES,NO] payouts after the 2-day safety period, redirecting that market's locked collateral to the chosen side. Lower-tier T2 surfaces also exist (setMaxFeeRate within bounds, fee receiver change). Per rubric, T1 reachable with no timelock OR <7-day delay = orange or red; red requires positive evidence of EOA / 2-of-3 admin holder, which was not established this run.
    Why is this consensus tentative?
    • weak consensus margin

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 url ↗ gpt-5.5-thinking url ↗ grok-3 url ↗ View raw submissions ↗
  3. Ability to exit tentative 3/3 models agree AI-only 3/3 with chat share link
    Claims on already-resolved markets are permissionless on the immutable CTF, but resolution of pending markets can be paused indefinitely by the UMA Adapter admin
    Verdict

    Choosing orange because the rubric's orange definition fits exactly: 'claims-of-finalized are exempt but new-request placement can be paused indefinitely by governance' — already-resolved redeemPositions on the immutable CTF is unstoppable, but UmaCtfAdapter.pause(questionID) is uncapped and held by a single onlyAdmin role, so users with one-sided positions in a pending market depend on the admin to allow resolution; the green steel-man understates this lock-in for unbalanced holders in paused markets.

    Steelman argument
    Steelman argument Claims on already-resolved markets are unconditional and immutable on the CTF, but new-resolution placement for a pending market can be paused indefinitely by a single admin role without any time cap, so the pending-market exit story has a real centralized lever even though it is bounded to specific paused questions.
    Evidence (7)
    E1
    User-facing exit functions live on the ConditionalTokens contract (0x4D97...6045), not on the CTFExchange. Inspected ABI exposes: redeemPositions(address,bytes32,bytes32,uint256[]) — claim winnings after resolution; mergePositions(address,bytes32,bytes32,uint256[],uint256) — burn balanced YES+NO shares back to collateral; splitPosition(address,bytes32,bytes32,uint256[],uint256) — deposit collateral and mint YES+NO; safeTransferFrom / safeBatchTransferFrom — transfer position shares away. No 'withdraw' or 'requestWithdrawal' function; positions are ERC-1155, so 'exit' = redeemPositions for resolved markets, mergePositions for unresolved balanced positions, or transfer to a peer.
    E2
    Access modifiers on the CTF exit functions: redeemPositions, mergePositions, splitPosition, safeTransferFrom, safeBatchTransferFrom are all public/external with no onlyOwner / onlyRole / whenNotPaused guard — the ABI does not include any pause(), paused(), or hasRole() functions on ConditionalTokens, and the contract has no admin (see CONTROL slice C1). REQUEST placement on a market (splitPosition) and CLAIM of a resolved market (redeemPositions) are both unconditional once the relevant condition state is met (resolved or not).
    E3
    No PAUSE_ROLE / GUARDIAN role exists on ConditionalTokens. The role-holder reads requested by the checklist (hasRole, getRoleAdmin, paused/isPaused) are not in the contract's ABI at all because the contract is built on the OpenZeppelin v0.7-era pattern without AccessControl. The only path that can block a user from reaching the redeemable state is upstream: the UmaCtfAdapter (0x6A9D...4F74) admin can call pause(bytes32 questionID) with no time cap on individual questions, preventing ctf.reportPayouts from being written for that question. This does NOT pause the redemption itself — it pauses RESOLUTION (the upstream input to the CTF).
    E4
    Distinct EMERGENCY vs GOVERNANCE pause paths on UmaCtfAdapter: (a) pause(questionID) onlyAdmin — no time cap, can be left set indefinitely; (b) flag(questionID) + emergencyResolve(questionID, payouts) onlyAdmin — flag sets a 2-day safety timer, after which arbitrary payouts can be written. There is no on-chain governance-vote layer above these — both are held by the same admin role. No actor exists that is time-capped at a shorter horizon than the admin.
    E5
    There is no queued-redemption mechanism with a daily cap or queue duration: redeemPositions on the CTF is one-shot and immediate once payouts are reported. There is also no protocol-level cap on the amount that can be redeemed per block.
    E6
    There is NO permissionless emergency-exit / escape-hatch that lets a user redeem an UNRESOLVED market without oracle resolution. Users holding one-sided positions in a market the admin has paused indefinitely have to either wait for unpause, hold the ERC-1155 tokens forever, sell them on the secondary market, or — if they can acquire the opposite-side tokens to make a balanced YES+NO pair — call mergePositions to recover the underlying collateral. mergePositions is permissionless and is the only adversarial-admin exit path for pending markets.
    E7
    Exit functions are directly callable on-chain without Polymarket's frontend: the Polymarket-published polymarket-cli (github.com/Polymarket/polymarket-cli) documents 'polymarket ctf redeem --condition 0xCONDITION...' and 'polymarket ctf merge --condition 0xCONDITION... --amount 10' as direct CTF calls; users can equivalently invoke redeemPositions / mergePositions from Etherscan-Write, a generic wallet, or any custom tooling. No frontend dependency for exit.
    Why is this consensus tentative?
    • weak consensus margin

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 url ↗ gpt-5.5-thinking url ↗ grok-3 url ↗ View raw submissions ↗
  4. Autonomy tentative 3/3 models agree AI-only 3/3 with chat share link
    Resolution hinges on UMA Optimistic Oracle (with 2hr-liveness dispute + admin emergencyResolve fallback); V2 collateral depends on Polygon PoS bridge (USDC.e) — single-dependency failure bounded to specific markets
    Verdict

    Choosing orange because A1 + A2 + A3 establish that UMA misbehavior or a Polygon PoS bridge failure on USDC.e CAN cause loss of user principal in affected markets — the autonomy-red criterion — but the live A6 fallbacks (permissionless dispute, ignorePrice reset, on-chain {0,0.5,1} sanity check, 2-day emergencyResolve) keep the impacted TVS bounded to specific markets rather than the entire protocol, which is the orange/Stage-1 definition; impacted TVS for a single bad UMA resolution is on the order of the affected market's collateral (typically <1% of total protocol TVS for a single market, ~unclear for the whole V1→V2 USDC.e exposure).

    Steelman argument
    Steelman argument Failures of the UMA oracle or the USDC.e PoS bridge can cause material principal loss in affected markets, but multiple live fallbacks (dispute mechanism, ignorePrice reset, on-chain payout sanity check forcing price ∈ {0, 0.5, 1}, 2-day admin emergencyResolve) bound the per-failure impact to specific markets rather than the whole protocol.
    Evidence (9)
    A1
    External contracts the core stack calls or reads: (i) UMA Optimistic Oracle V2 — resolved at construction via finder.getImplementationAddress('OptimisticOracleV2') and stored as immutable on the UmaCtfAdapter; (ii) UMA Address Whitelist — read via the same finder for collateral validation; (iii) ConditionalTokens — the immutable settlement layer the adapter reports payouts to. CTFExchange V2 calls the pUSD CollateralToken (0xC011...2DFB) and the CtfCollateralAdapter (0xAdA1...Ce1f). pUSD itself wraps the real underlying collateral tokens (USDC and USDC.e per its constructor signature usdc / usdce / vault). No Chainlink, Pyth, or RedStone price feeds are referenced in any of the inspected ABIs — pricing is order-book driven, not oracle-priced.
    A2
    Off-chain actors that report into the protocol: the UMA Optimistic Oracle proposer/disputer set (permissionless — anyone can propose or dispute by posting the proposalBond) and the UMA DVM token-holder dispute resolution committee (escalated to on dispute). Mis-reporting by UMA can write incorrect payouts to the CTF, directly redirecting user principal in affected markets. Polymarket's own operator (matching engine) is NOT in this category — it cannot mint or redeem on its own; it can only settle matched orders. Validators / node-operators are not in scope (Polygon PoS substrate, not a Polymarket dependency).
    A3
    Bridge / cross-chain messaging: V1 markets used USDC.e (USD Coin (PoS) at 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 — the canonical Polygon PoS-bridged USDC). V2 replaces this with pUSD, which wraps BOTH native USDC and USDC.e per the pUSD constructor (usdc, usdce, vault) — so V2 is partially exposed to the Polygon PoS bridge in proportion to how much of pUSD's backing is USDC.e vs native USDC. The Polygon PoS bridge is canonical (Polygon's plasma/PoS bridge run by the Polygon validator set), not a third-party guardian-multisig bridge. No other chain deployment is in the address_book; this is a single-chain protocol.
    A4
    Nested collateral / restaking: none. CTF outcome tokens are direct ERC-1155 receipts against collateral; no further wrapping into LRT / receipt-of-receipt designs. pUSD wraps USDC/USDC.e 1:1, so V2 introduces one layer of wrapping on top of the underlying stables but no restaking chain. Slashing power: none — there are no slashable operator bonds in the Polymarket stack itself; bonds live on UMA's side (proposal bond) and on UMA validators.
    A5
    Fork lineage: ConditionalTokens (0x4D97...6045) is a direct deployment of Gnosis's open-source conditional-tokens-contracts repository (linked in github.com/Polymarket/contract-security as gnosis/conditional-tokens-contracts). Not silently relevant beyond that — recorded for completeness.
    A6
    Fallback mechanisms (all LIVE on-chain as of the inspected ABIs, status (i)): (a) UMA dispute mechanism — any address can dispute a proposed price by posting the proposalBond during the ~2hr liveness window, automatically resetting the market once and escalating to UMA DVM voters if a second dispute occurs; (b) ignorePrice sentinel — if UMA returns type(int256).min, the adapter resets the question rather than writing payouts; (c) onchain payout sanity check — _constructPayouts reverts on any resolved price other than 0, 0.5e18, or 1e18 (InvalidOOPrice), so a malformed UMA response cannot translate to a fractional or out-of-range payout; (d) admin emergencyResolve with 2-day safety period — provides a manual override path when UMA fails or returns ignorePrice indefinitely. (d) is also the centralization vector described in CONTROL.
    A7
    Out of scope under the rubric's A7 carve-out: Polymarket is deployed permissionlessly on Polygon PoS, which is a third-party L2/sidechain whose sequencer is not part of Polymarket's stack. Polymarket is not its own appchain.
    A8
    Keeper / relayer liveness: the operator who calls matchOrders on the CTFExchange (Polymarket's own off-chain matching service) is not a per-position keeper — no positions go stale or become insolvent in its absence; in the worst case trading halts while users retain full CTF rights (split/merge/redeem) directly. UMA proposers are permissionless and economically incentivized by the reward; if no proposer shows up, the market simply does not resolve, and admin emergencyResolve becomes the unblock path. There is no liquidation-bot dependency because there is no leverage or under-collateralized debt in the protocol.
    A9
    Governance-mutable EXTERNAL dependency surface: (i) UmaCtfAdapter.optimisticOracle and ctf are both 'immutable' Solidity variables set in the constructor — they CANNOT be swapped without redeploying the adapter, so admin cannot silently rewire to a malicious oracle. (ii) pUSD owner can addWrapper(address) and addMinter(address) to grant new external contracts the right to mint pUSD; per the pUSD ABI this is callable by owner() in a single tx with no timelock — so a new external dependency CAN be silently introduced into the V2 collateral surface (a malicious wrapper could be added that mints pUSD against fake collateral). Note: 'admin can upgrade the pUSD implementation' is a CONTROL-slice finding (admin can rug) and is intentionally not double-counted here per the A9 scope limit.
    Why is this consensus tentative?
    • weak consensus margin

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 url ↗ gpt-5.5-thinking url ↗ grok-3 url ↗ View raw submissions ↗
  5. Open Access tentative 3/3 models agree AI-only 3/3 with chat share link
    Contracts admit users unconditionally; CTF deposit/exit and order signing are permissionless; multiple independent access paths exist; frontend ToS §2.1.4 and /api/geoblock are publisher policies on the official UI only
    Verdict

    Choosing green because the rubric explicitly states: 'when contracts are fully permissionless AND any A3b independent path exists, the default grade is green regardless of frontend ToS or A3-active enforcement on the official UI' — A1, A4, A5 establish the contracts admit users unconditionally; A3b shows multiple independent paths (Polymarket-published CLI, CLOB SDKs, direct CTF calls via any wallet); the operator-gated matching is a liveness concern that the rubric explicitly defers to dependencies; and the orange steel-man relies on operator capture for one specific user action (orderbook trading) while ignoring that mint/exit/transfer are operator-free.

    Steelman argument
    Steelman argument User entry (splitPosition), exit (redeemPositions, mergePositions), and order-signing are all unconditional on-chain actions on contracts with no on-chain blocklist; Polymarket itself publishes a CLI and TypeScript/Python SDKs that interact directly with the contracts and CLOB API without the official frontend, satisfying the rubric's A3b independent-path test, so per the default-grade guidance the grade is green regardless of frontend ToS / geoblock policy on the official UI.
    Evidence (7)
    A1
    No on-chain whitelist / KYC modifier on user-facing entry/exit. ConditionalTokens (0x4D97...6045) has no onlyWhitelisted / onlyRole / isAccredited / isKYCed guards on splitPosition, mergePositions, redeemPositions, safeTransferFrom, or safeBatchTransferFrom (entire ABI inspected). CTFExchange V2 (0xE111...996B) likewise gates only operator/admin-side functions; user-side order signing is permissionless — orders are signed off-chain and only land on-chain via the operator. isUserPaused exists but is a per-user emergency tool with userPauseBlockInterval, not an allowlist.
    A2
    Off-chain operators in the admission path: CTFExchange V2 matchOrders is gated by NotOperator / isOperator — the Polymarket-run operator is the sole settler of matched orders. Per the rubric: order PLACEMENT is unconditional (any address can sign and broadcast an Order tuple), only downstream settlement requires the operator. By the rubric's explicit guidance, this is an admission-permissionless function with a liveness dependency, and the liveness weight defers to the dependencies/autonomy slice (see AUTONOMY A8). Direct CTF user actions (splitPosition / mergePositions / redeemPositions / transfers) require no operator at all.
    A3
    Frontend restrictions on polymarket.com (recorded as context, not grade driver): A3-active enforcement is present — there is a documented runtime geoblock endpoint at /api/geoblock returning {blocked, ip, country, region}, and the Polymarket help center lists ~33 fully or partially restricted jurisdictions (US, France, Belgium, Singapore, Portugal, Hungary, Switzerland, Poland, Ontario, Italy, Germany, etc.). A3-passive ToS clauses are also present — the Polymarket help-center page on Geographic Restrictions states the protocol's ToS Section 2.1.4 prohibits use of VPNs or similar tools to bypass geographic restrictions; the verbatim text could not be extracted from polymarket.com/tos because the page is client-side rendered and returned only the header / footer chrome on direct HTTP fetch (see unknowns).
    A3b
    Independent access paths NOT requiring the official polymarket.com frontend: (i) github.com/Polymarket/polymarket-cli — a Polymarket-published CLI that handles direct CTF operations and CLOB orders without the frontend ('polymarket ctf redeem', 'polymarket ctf merge', 'polymarket clob create-order'); (ii) github.com/Polymarket/clob-client-v2 and py-clob-client-v2 — TypeScript and Python SDKs for direct CLOB API access; (iii) github.com/Polymarket/magic-proxy-builder-example — third-party-style Next.js app demonstrating non-frontend access to a user's Polymarket proxy wallet; (iv) any Polygon wallet or block explorer can call redeemPositions / mergePositions on the immutable CTF directly. The contracts can be reached without the publisher's cooperation.
    A4
    No contract-level OFAC / sanctions screening was visible on any inspected ABI (ConditionalTokens, CTFExchange V2, UmaCtfAdapter, pUSD CollateralToken) — no isOnSanctionsList / oracleScreening / blocklist mapping. Compliance enforcement is frontend-only per A3.
    A5
    Read access is fully public (Polygon RPC + verified contract source via Polygonscan / defipunkd). Write access to user-side CTF functions is unrestricted; write access to admin functions is role-gated; the CLOB matching write is operator-gated — see A2.
    A6
    ToS / Legal: Polymarket help-center confirms ToS Section 2.1.4 prohibits VPN use, and the polymarket.com footer states 'Polymarket operates globally through separate legal entities. Polymarket US is operated by QCX LLC d/b/a Polymarket US, a CFTC-regulated Designated Contract Market. This international platform is not regulated by the CFTC and operates independently.' Verbatim Section 2.1.4 text was not extractable from the SPA-rendered ToS page in this run; the existence of the clause is corroborated by the official help-center article (help.polymarket.com/en/articles/13364163-geographic-restrictions) which states verbatim: 'Polymarket strictly prohibits the use of VPNs or similar tools to bypass geographic restrictions. Such actions are considered violations of the platform's Terms of Service (Section 2.1.4).'
    Why is this consensus tentative?
    • weak consensus margin

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 url ↗ gpt-5.5-thinking url ↗ grok-3 url ↗ View raw submissions ↗

Stage

Preview of the Phase-3 maturity framework. DeFiPunk'd will adopt DeFiScan v2's stages verbatim; the section is rendered below in its intended shape so the structure is visible today.

Polymarket International has not yet been assessed under the DeFiScan v2 stage framework.
The walkaway test is the central criterion. Once stages land, protocols reach Stage 1 only if users can exit in the presence of malicious operators even when the emergency council disappears.
Scope of assessment
Stages are assessed per-protocol against DeFiScan v2's criteria: governance structure, upgradeability path, timelock durations, emergency-council scope, and the walkaway test. The analysis depends on onchain discovery (roles, owners, timelocks) and deeper review of deployed contracts — neither of which DeFiPunk'd automates at Phase 0.
Stage 0 requirements pending
Governance is largely off-chain, contracts are upgradeable with short or no timelock, and the protocol depends on a multisig or team with full discretion. At Phase 0 DeFiPunk'd does not automatically evaluate these; the assessment lands with crawler-based onchain discovery.
Stage 1 requirements pending
Users can exit or opt out on their own terms even if the team disappears. Upgrades run through a meaningful timelock with an emergency security council clearly scoped. The walkaway test is the headline criterion.
Stage 2 requirements pending
Protocol is fully permissionless and immutable, or upgrades require a supermajority of token holders with a long timelock and no emergency override. This is the terminal stage of the DeFiScan v2 framework.
Learn more about DeFiScan v2 stages →
Stages are an opinionated assessment of maturity, not a rating of security or safety. A protocol can sit at Stage 2 and still carry substantial technical or economic risk; the framework exists to incentivize decentralization, not to rank protocols.

Contract surface

Every contract in scope for this protocol — pooled from DeFiLlama's TVL adapter (mechanical) and DEFI@home discovery submissions (LLM-curated). Verified-source flags come from Etherscan + Sourcify; owner / multisig metadata is read on-chain when available. Reviewer audit context, not a slice score. A lending protocol's adapter set will list third-party collateral tokens alongside its own contracts; attribution is the grader's job.

  • 114addresses
  • 43verified source
  • 8proxies
  • 16of 32 owners are Safes

TVL adapter pinned at 683d369. Sourcecode fetched 2026-05-06. Control fetched 2026-05-14.

arbitrumAnyswapV5ERC200xfea7…6c2aTVL0xf46b…5aea5/10 Safe
bobaBUSD0x461d…4eb5TVL
covalentGetTokensnull0x0000…0000TVL
dogechainBUSD0x3327…41ffTVL
dogechainMATIC0xdc42…1f98TVL
ethereumDai0x6b17…1d0fTVL
ethereumLobstersNft0x0262…f042TVL0x5570…1e6f7/19 Safe
ethereumCoolCats0x1a92…050cTVL0xd588…19bf3/5 Safe
ethereumToadz0x1cb1…49c6TVL0x794b…96722/4 Safe
ethereumMoonbirds0x2358…a68bTVL0x80d1…d0442/4 Safe
ethereumBeanz0x306b…f949TVL0x2ae6…60aa3/6 Safe
ethereumLand0x34d8…e258TVL0x1633…00532/6 Safe
ethereumTransparentUpgradeableProxy0x39ee…21b6TVLproxy0x1c59…9417
ethereumOniForce0x3bf2…5e9dTVL0x615d…00f0
ethereumCDBS30x4206…1cdbTVL0x68bd…a63b2/3 Safe
ethereumCloneX0x49cf…a28bTVL0x12ea…f0af
ethereumForgottenRunesWizardsCult0x521f…6f42TVL0xd584…4a51
ethereumMiladys0x5af0…25a5TVL0x54f8…28cb
ethereumTransparentUpgradeableProxy0x5cc5…0c38TVLproxy0x96ef…fff1
ethereumMutantApeYachtClub0x60e4…a7c6TVL0xa858…2ef13/9 Safe
ethereumTransparentUpgradeableProxy0x7692…44ccTVLproxy0x1c59…9417
ethereumERC1967Proxy0x790b…8371TVLproxy
ethereumMeebits0x7bd2…6bc7TVL
ethereumERC1967Proxy0x8821…d280TVLproxy0x28b2…41f52/2 Safe
ethereumCyberBrokers0x8928…ca85TVL0x070c…86de
ethereumDoodles0x8a90…992eTVL0x9d86…3ba82/4 Safe
ethereumNounsToken0x9c8f…dc03TVL0xb1a3…ef71
ethereumRightwayToken0xa3ae…beebTVL
ethereumEtherRockERC7210xa3f5…fc02TVL
ethereumWrappedPunk0xb7f7…13f6TVL
ethereumBoredApeKennelClub0xba30…5623TVL0xa858…2ef13/9 Safe
ethereumBoredApeYachtClub0xbc4c…f13dTVL
ethereumgoblintownNFT0xbce3…307eTVL0x62ac…fa0f
ethereumPudgyPenguins0xbd35…2cf8TVL0xf54c…4f1d
ethereumDigiDaigaku0xd125…94a9TVL0x5a8c…586d2/3 Safe
ethereumERC1967Proxy0xe012…5903TVLproxy
ethereumWorldOfWomen0xe785…5330TVL0xc9b6…bdb1
ethereumAzuki0xed5a…c544TVL0x2ae6…60aa3/6 Safe
ethereumLANDProxy0xf87e…5d4dTVLproxy0xfe95…af4a
ethereumFantomToken0x4e15…7870TVL0xb5c4…3f702/4 Safe
ethereumCvxLockerV20x72a1…b86eTVL0xa3c5…e2fb3/5 Safe
eulerTokenseulerTokens0x1b80…dc1dTVL
eulerTokenseulerTokens0x3c66…62d0TVL
eulerTokenseulerTokens0x4169…d264TVL
eulerTokenseulerTokens0x4d19…85d2TVL
eulerTokenseulerTokens0x5484…054eTVL
eulerTokenseulerTokens0x6089…c527TVL
eulerTokenseulerTokens0x64ad…ee82TVL
eulerTokenseulerTokens0xbd1b…d593TVL
eulerTokenseulerTokens0xe025…d9dcTVL
eulerTokenseulerTokens0xeb91…a716TVL
fantomanyUSDC0x95bf…d605TVL
fantomDAI0x8d11…bf3eTVL
fantomfUSDT0x049d…3c7aTVL
fantomMIM0x82f0…29c1TVL
fantomnICE0x7f62…e443TVL
fantomUSDC0x0406…5b75TVL
genericUnwrapCvxtarget0xf403…ae31TVL
harmonyAVAX0xb12c…1358TVL
kccDAI0xc9ba…2055TVL
kccWBTC0x218c…a4c0TVL
moonriverAnyswapV5ERC200x639a…2c5cTVL0x10c6…7e23
moonriverAnyswapV5ERC200xe3f5…ad7dTVL0x10c6…7e23
moonriverAnyswapV5ERC200xb44a…663cTVL0x10c6…7e23
nullAddressnull0x0000…0000TVL
PANCAKE_NFT_ADDRESSPANCAKE_NFT_ADDRESS0x46a1…4364TVL
polygonWrappedCollateral0x3a3b…02e2TVL
polygonConditionalTokens0x4d97…6045TVL + disc
polygonUChildERC20Proxy0x2791…4174TVLproxy
PolygonCollateralOfframp0x2957…5854discovery
PolygonCollateralOnramp0x9307…b8eediscovery
PolygonCTF Exchange0xe111…996bdiscovery
PolygonCtfCollateralAdapter0xada1…ce1fdiscovery
PolygonGnosis Safe Factory0xaacf…541bdiscoverymultisig
PolygonNeg Risk Adapter0xd91e…5296discovery
PolygonNeg Risk CTF Exchange0xe222…0f59discovery
PolygonNegRiskCtfCollateralAdapter0xada2…eaabdiscovery
PolygonPermissionedRamp0xebc2…cb08discovery
PolygonPolymarket Proxy Factory0xab45…4052discoveryfactory
PolygonpUSD CollateralToken (implementation)0x6bbc…925fdiscovery
PolygonpUSD CollateralToken (proxy)0xc011…2dfbdiscovery
PolygonUMA Adapter0x6a9d…4f74discovery
PolygonUMA Optimistic Oracle0xcb18…5130discoveryoracle
shidenBUSD0x65e6…d97aTVL
shidenETH0x7652…9c61TVL
shidenJPYC0x735a…7b0fTVL
sumTokensnull0x0000…0000TVL
sumTokens2null0x0000…0000TVL
syscoinETH0x7c59…227dTVL
syscoinUSDC0x2bf9…c45cTVL
syscoinUSDT0x922d…12e1TVL
telosETH0xfa93…a40fTVL
telosUSDC0x818e…dc0bTVL
telosUSDT0xefae…0d73TVL
telosWBTC0xf390…cbc2TVL
unwrapMakerPositionsCDP_MANAGER0x5ef3…5e39TVL
unwrapMakerPositionsILK_REGISTRY0x5a46…0f87TVL
unwrapMakerPositionsPROXY_REGISTRY0x4678…3fe4TVL
unwrapUniswapV3NFTfactory0x71b0…6127TVLfactory
unwrapUniswapV3NFTunwrapUniswapV3NFT0xa08a…5aabTVL
unwrapUniswapV4NFTsnftAddress0x3c3e…1017TVL
unwrapUniswapV4NFTsnftAddress0x4529…17bfTVL
unwrapUniswapV4NFTsnftAddress0x5b7e…4016TVL
unwrapUniswapV4NFTsnftAddress0x7a4a…f95bTVL
unwrapUniswapV4NFTsnftAddress0x7c5f…9bdcTVL
unwrapUniswapV4NFTsnftAddress0xbd21…ee9eTVL
unwrapUniswapV4NFTsnftAddress0xd88f…d869TVL
unwrapUniswapV4NFTsstateViewer0x76fd…9990TVL
unwrapUniswapV4NFTsstateViewer0x7739…9d64TVL
unwrapUniswapV4NFTsstateViewer0x7ffe…7227TVL
unwrapUniswapV4NFTsstateViewer0x86e8…e8f2TVL
unwrapUniswapV4NFTsstateViewer0xa3c0…7a71TVL
unwrapUniswapV4NFTsstateViewer0xc18a…ecdbTVL
unwrapUniswapV4NFTsstateViewer0xd13d…e0c4TVL

Protocol Info

Security

[:] Source: DEFI@home quorum
Audits
9 audits
Security contact
unknown

Technical

[:] Source: DEFI@home quorum
Upgradeability
Mixed (some immutable, some upgradeable)

Provenance

[defillama] Source: DeFiLlama
Review status
listed
Updated
2026-06-01 11:27 UTC

Hallmarks

  1. Nov '24US election market settlement
  2. Jan '26Fee introduced in 15-minute crypto markets
  3. Mar '26Fee expanded to a wider range of markets
  4. Apr '26Migrated to v2 contracts