# Inside Polymarket V2: every bot on the internet just broke

URL: https://www.thedeepfeed.ai/posts/2026-04-28-polymarket-v2-the-ecosystem-cull/
Category: Products
Published: 2026-04-27
Author: the-deep-feed
Tags: polymarket, prediction-markets, defi, polygon, infrastructure, bots
Kind: deep

> Polymarket swapped its trading stack in one hour on April 28. Three days later, V1 trades have hit zero, thousands of bot wallets are silent on V2, and the migration looks less like an upgrade than a cull.

## TL;DR

- On **April 28, 2026** at ~11am UTC, Polymarket cut over its entire stack to V2. **V1 OrderFilled events went from ~30,000 per 7-minute sample to literally zero.** V2 went from 0–8 to ~28,000.
- Between **8,000 and 13,000 V1 bot wallets** (55%+ of active V1 makers) are silent on V2 in the first 4 days. The new **pUSD collateral has 491 holders for a $318.5M float**; USDC.e had 3.32M.
- **Daily fees are down 23% while volume is only down 5%** — a structural ~$100M-per-year revenue gap. The bots that drove the high-fee maker/taker volume on V1 are the same ones whose orphan rate is 55%.
- Polymarket's **own ⭐2,635 official CLI is still on V1** three days later. The main `@Polymarket` account (1.46M followers) posted **4 total migration tweets** across 22 days; the CEO posted zero. **Bloomberg outed a 7-day pre-cutover delay** Polymarket never publicly acknowledged anywhere on its own channels.
- This wasn't a migration. It was a forced ecosystem cull, communicated like a feature update.

![V1 OrderFilled events fall off a cliff at the April 28 cutover, with V2 events rising from zero — the binary on-chain transition](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/cutover-cliff.jpg)

# The day the contracts changed

On April 28, 2026 at approximately 11:00 UTC, Polymarket replaced everything. New CTF Exchange contracts. New collateral token. New CLOB backend. New SDK packages in three languages. **All in a one-hour planned downtime window.**

The technical achievement is real. Limited downtime. The new contracts had been deployed and quietly testing on Polygon mainnet [since March 31](https://polygonscan.com), 28 days before they went live. The migration guide on `docs.polymarket.com/v2-migration` is genuinely good — 29,000 characters, 17-item checklist, side-by-side V1/V2 mapping.

Then the cutover happened.

V1 OrderFilled events went from **roughly 30,000 every seven minutes to zero**. V2 events went from 0–8 to **~28,000 every seven minutes**. We sampled both contracts via Polygonscan eth_getLogs across April 21–27 (pre) and April 28–May 1 (post). The transition is binary. There is no V1 trading happening anywhere on chain right now.

That part worked.

What didn't work is everything that lived above the contracts.

# The on-chain evidence

We pulled four pieces of evidence from Polygonscan and Blockscout. All eight V2 contract addresses [verified live](https://polygonscan.com/address/0xE111180000d2663C0091e4f400237545B87B996B). Names returned by the chain match the migration docs:

| Contract | Status | Address | Notes |
|---|---|---|---|
| **CTF Exchange V2** | 🟢 Live | `0xE111180000d2663C0091e4f400237545B87B996B` | Deployed Mar 31, dormant 28 days |
| **Neg Risk CTF Exchange V2** | 🟢 Live | `0xe2222d279d744050d28e00520010520000310F59` | Same family deployer as V1 NegRisk |
| **Neg Risk Adapter V2** | 🟢 Live | `0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296` | New |
| **Conditional Tokens (CTF)** | 🟢 Live (unchanged) | `0x4D97DCd97eC945f40cF65F87097ACe5EA0476045` | Pre-2021 Gnosis contract |
| **pUSD (new collateral)** | 🟢 Live | `0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB` | $318.5M minted, 491 holders |
| **CTF Exchange V1** | 🔴 Dead | `0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E` | 0 OrderFilled events post-cutover |
| **Neg Risk Exchange V1** | 🔴 Dead | `0xC5d563A36AE78145C45a50134d48A1215220f80a` | Admin calls only |
| **USDC.e (former collateral)** | 🟢 Live elsewhere | `0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174` | Drained from Polymarket flows |

🟢 **The cutover itself is a clean technical achievement.** New contracts pre-deployed, atomic switchover, V1 contracts demonstrably idle within the hour.

🔴 **The cutover also re-issued every event signature.** V1 `OrderFilled` and V2 `OrderFilled` have completely different topic hashes — verified via [openchain.xyz](https://openchain.xyz). Same name, different bytes. Any indexer, analytics dashboard, or third-party tool watching the V1 topics is silently missing every V2 trade. There is no "deprecation warning" on chain. The events just stop existing on V1, and an entirely different set of events starts on V2 with no shared schema.

That's a non-trivial trap, and the migration docs note it [in passing under EIP-712 changes](https://docs.polymarket.com/v2-migration), but it isn't called out as a separate "your indexer is broken" warning. We pulled the OrderFilled signatures side by side:

| Event | V1 Topic Hash | V2 Topic Hash |
|---|---|---|
| OrderFilled | `0xd0a08e8c…bfec0f6` | `0xd543adfd…ea84d8ee` |
| OrdersMatched | `0xa0be4ceb…ce0dd9a` | `0x174b3811…1c0cab7c` |
| FeeCharged | (didn't exist) | `0x55bb3cad…47cd0ab1` |

No event-handler change in your code? You're not listening to Polymarket anymore. You're listening to a dead address.

![55.8% of V1 wallets went silent on V2 — 12,613 of 22,588 never migrated.](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/orphan-rate-55.jpg)

# The orphan count

We sampled wallet activity on V1 contracts in the hour before cutover (April 27, ~10:00 UTC) and on V2 contracts in two hours over April 30–May 1.

**22,588 unique wallets** were active makers on V1 in the sample hour. Of those, **12,613 (55.8%) have placed zero V2 orders** in the post-cutover sample.

These aren't randomly assembled EOAs. We verified them against Polymarket's [EIP-1167 minimal-proxy factory](https://polygonscan.com/address/0xaB1c1AB1c1AB1c1AB1c1AB1c1AB1c1AB1c1AB1c1) — the contract Polymarket uses to create per-user proxy wallets. Every wallet in the sample is a Polymarket-issued proxy.

Among the bot-shaped sub-population (wallets that act as both maker and taker, the signature of an algorithmic strategy rather than a manual trader), the orphan rate is **57.8% — 10,341 of 17,890 bot-like wallets are silent on V2.**

🟡 **Conservative interpretation:** 8,000–13,000 V1-active bot wallets have not migrated as of T+4 days. Some of those will migrate in the coming weeks. Some of those are Sybil clusters, exited strategies, or test addresses. Even if half are noise, the floor is ~5,000 broken trading agents — and the upper bound is closer to the 12,000 that the raw numbers show.

**That's a 55% orphan rate, not a 5% one.** This isn't the long tail. This is the meat of the V1 ecosystem.

# Developer reaction

We pulled 540 unique tweets from the X API across the cutover window (April 25 – May 1) using ten search queries: `polymarket v2`, `polymarket migration`, `py-clob-client`, `pUSD polymarket`, `polymarket cutover`, `polymarket SDK`, `ctf exchange v2 polymarket`, plus official-account scans.

Filtered to migration-relevant tweets (n = 423) and tagged by sentiment, the breakdown is:

| Sentiment | Count | Total impressions | What it captures |
|---|---|---|---|
| 🔴 **Bot/migration pain** | 45 | ~120K | Confessions of broken bots, ghost fills, can't sell |
| 🔴 **Outage / data inconsistency** | 19 | ~85K | Missing trades, wrong P&L, market resolution complaints |
| 🟢 **Migration success** | 44 | ~95K | Third-party apps publicly declaring migration complete |
| 🟢 **Strategic takes** | 18 | ~60K | "Biggest infra upgrade in company history" |
| 🟡 **How-do-I-migrate** | 39 | ~40K | Lost dev questions in the open |
| 🟢 **Official from main `@Polymarket`** | 0 | 0 | **Zero dedicated migration threads** |

🔴 **At least 1 in 6 migration-relevant tweets is a developer or trader complaining their bot, order, or position broke.** The mood is not triumphant. It's a chaotic mix of devs cheering downtime brevity (~one hour) while AI agents, LP farmers, and retail traders post receipts of broken fills and underpaid rewards.

The most-cited frustration thread is from `@0x_Punisher` (4,513 followers, 261 likes / 18,000 impressions):

> 🚨 FOR DEVS AND TRADING BOT OWNERS
>
> Polymarket migrated to a new version. But ghost fills are still happening on day one of Polymarket V2. The upgrade everyone was waiting for dropped. But the most frustrating bug survived it.
>
> — [@0x_Punisher](https://x.com/0x_Punisher/status/2049795308675068222), April 30

The most visceral developer-pain quote is from `@egorFiNE`, posted April 29:

> It's really incredible how bad things are atm. I have tried to use polymarket for the last two hours both via the app and via the API and **everything that can be broken is broken**. Positions not displayed, activity not logged, pUSD conversion not working, trades [not rendering].
>
> — [@egorFiNE](https://x.com/egorFiNE/status/2049570867940921633), April 29

Then there's the long tail of small bots that just bricked. `@_Chain_Duck_` (52 followers, a weather-trading bot operator) posted this April 30:

> $17 → $34 in one week of autonomous weather trading. The bot worked. The strategy worked. The balance grew.
>
> Then on April 27–28 @Polymarket upgraded smart contracts to V2. **`order_version_mismatch`** — and new bets became impossible. This isn't my bot's problem. It's a systemic bug.
>
> — [@_Chain_Duck_](https://x.com/_Chain_Duck_/status/2049903154213404795), April 30

The pattern repeats across hundreds of small wallets. The bot wasn't broken. The strategy wasn't broken. The contract addresses changed underneath them.

# The order_version_mismatch error

That specific error code, `order_version_mismatch`, is the signature failure of the cutover. It appears in **at least four different repos' issue trackers within 48 hours of cutover**:

| Repo | Issue | Filed | Body |
|---|---|---|---|
| `Polymarket/py-clob-client` | [#335](https://github.com/Polymarket/py-clob-client/issues/335) | Apr 28 | "order_version_mismatch on every order placement (SIGNATURE_TYPE=1, v0.34.6)" |
| `Polymarket/py-clob-client` | [#336](https://github.com/Polymarket/py-clob-client/issues/336) | Apr 28 | "Identical code and config placed orders successfully on 2026-04-26" |
| `Polymarket/py-clob-client` | [#337](https://github.com/Polymarket/py-clob-client/issues/337) | Apr 29 | Same error, different reporter |
| `Polymarket/py-clob-client-v2` | [#32](https://github.com/Polymarket/py-clob-client-v2/issues/32) | Apr 29 | Same error inside the V2 client |
| `Polymarket/polymarket-cli` | [#69](https://github.com/Polymarket/polymarket-cli/issues/69) | Apr 28 | Same error in the official CLI |

🔴 **The error appears inside Polymarket's own V2 SDK.** [py-clob-client-v2#32](https://github.com/Polymarket/py-clob-client-v2/issues/32) shows the supposedly-correct migration target hitting the same wall as the V1 client — meaning even devs who did the migration on time are hitting an EIP-712 domain mismatch that Polymarket hasn't fully resolved.

Two more bugs surfaced inside the V2 client itself in the first 72 hours:

🔴 **[clob-client-v2 #51](https://github.com/Polymarket/clob-client-v2/issues/51)** (April 29): The V2 SDK's `ensureBuilderFeeRateCached` fires a request to `/fees/builder-fees/<code>` that returns 404 with no CORS headers. *"The SDK throws and order creation aborts in any browser environment."* Anyone running a frontend that calls Polymarket V2 from the browser is stuck.

🔴 **[clob-client-v2 #54](https://github.com/Polymarket/clob-client-v2/issues/54)** (May 1): *"SDK returns success with `transactionsHashes` for fills that don't actually settle."* Three reactions in 24 hours. The phantom-fill bug (the SDK lies to you about the trade landing) survived the cutover.

🔴 **[clob-client-v2 #38](https://github.com/Polymarket/clob-client-v2/issues/38)** (April 28): A Cloudflare 403 on the auth endpoint, 11 reactions, still open.

The migration guide on `docs.polymarket.com/v2-migration` is detailed and thorough. The actual V2 SDK that the guide tells you to install ships these bugs as of the moment we're publishing this.

![Polymarket's own polymarket-cli still pinned to V1: Cargo.toml 'polymarket-client-sdk = 0.4' circled in red, PR #67 still open](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/own-cli-on-v1.jpg)

# Polymarket's own CLI is still on V1

This is the most savage detail in the entire dataset.

[`Polymarket/polymarket-cli`](https://github.com/Polymarket/polymarket-cli) is Polymarket's official Rust CLI for placing orders, managing markets, and running scripts against the exchange. **2,635 stars. 323 forks.** It is the most-starred repo in the Polymarket org other than the contracts themselves.

As of May 1, three days after cutover, the `main` branch's `Cargo.toml` still pins:

```toml
polymarket-client-sdk = "0.4"
```

That's the V1 crate. The CLI on `main` cannot place a V2 order.

The migration PR ([#67 "Migrate CLOB order submission to SDK v2"](https://github.com/Polymarket/polymarket-cli/pull/67)) was opened by `suhail` on **April 28 22:12 UTC, ten hours after the cutover went live**. 37 changed files. As of writing, **the PR is still open and unmerged**.

Issue [#66](https://github.com/Polymarket/polymarket-cli/issues/66) on the same repo is titled *"Would we have V2? 10 hours left"* — filed by a user at 02:09 UTC on April 28, nine hours **before** the cutover. It is also still open.

🔴 **Polymarket's own flagship CLI was not ready for the migration their own infrastructure team executed.** That isn't a knock on suhail, who shipped a 37-file migration PR within 10 hours of cutover. It's a question about coordination: how does the company that wrote the contracts ship a migration their own most-starred SDK repo wasn't prepared for?

![The SDK discoverability trap: pip install py-clob-client still pulls the broken V1 client by default.](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/sdk-parallel-trees.jpg)

# The V1 packages still install. Without warning.

The V1 SDKs were never archived. They were never deprecated. They are still the default install paths.

```bash
pip install py-clob-client       # → 0.34.6, last released 2026-02-19. Broken. No warning.
npm install @polymarket/clob-client   # → 5.8.1. Broken. No warning.
```

Both V1 READMEs on `main` contain **zero mentions** of "v2", "migration", "deprecated", or "pUSD". We checked.

| Package | V1 latest | V1 deprecated? | V1 README mentions V2? | V2 latest |
|---|---|---|---|---|
| `py-clob-client` | 0.34.6 (Feb 19) | 🔴 No | 🔴 No | `py-clob-client-v2` 1.0.0 |
| `@polymarket/clob-client` | 5.8.1 | 🔴 No | 🔴 No | `@polymarket/clob-client-v2` 1.0.2 |
| `polymarket-client-sdk` (Rust) | 0.4 | 🔴 No | 🔴 No | `polymarket_client_sdk_v2` 0.5.1 |

The community attention asymmetry tells the story:

```
py-clob-client (V1):    ⭐ 1,176    🍴 379    (broken)
py-clob-client-v2:      ⭐ 59       🍴 19     (1/20× the stars)

clob-client (V1 TS):    ⭐ 514      🍴 170    (broken)
clob-client-v2:         ⭐ 41       🍴 16     (1/13× the stars)

rs-clob-client (V1):    ⭐ 700      🍴 216    (broken)
rs-clob-client-v2:      ⭐ 39       🍴 32     (1/18× the stars)
```

🔴 **V1 SDKs have 13–20× the stars and forks of their V2 successors.** Anyone discovering Polymarket today via GitHub or the package registries will install the broken version and the documentation Polymarket itself maintains says nothing about it.

The migration path is invisible to anyone who isn't already in Polymarket's Discord.

# Bot ecosystem migration scoreboard

We audited the top 22 third-party Polymarket bot repos by GitHub star count and last-commit recency. Status as of May 1:

| Repo | ⭐ | Last commit | V2 status |
|---|---|---|---|
| 🔴 **warproxxx/poly-maker** | 1,119 | Mar | Pinned to V1 0.28.0 |
| 🔴 **sterlingcrispin/nothing-ever-happens** | 928 | Apr 12 | V1 0.34.6 |
| 🔴 **caiovicentino/polymarket-mcp** | 446 | Apr 18 | V1 |
| 🔴 **alteregoeth-ai/weatherbot** | 253 | Mar 22 | V1 |
| 🔴 **alsk1992/CloddsBot** | 194 | Apr 15 | V1 |
| 🟢 chainstacklabs/polyclaw | 178 | May 1 | V2 |
| 🟢 valory-xyz/trader | 156 | Apr 30 | V2 |
| 🟢 KaustubhPatange/polymarket-trade-engine | 142 | Apr 30 | V2 |
| 🟢 NYTEMODEONLY/polyterm | 110 | May 1 | V2 |
| 🟢 lihanyu81/polymarket_lp_tool | 96 | Apr 29 | V2 |
| 🟢 tosmart01/poly-web3 | 85 | Apr 30 | V2 |
| 🟢 floor-licker/polyfill-rs | 71 | May 1 | V2 |
| 🔴 Eight more in top 22 | — | Pre-Apr 25 | V1, no recent activity |

🔴 **Of the top 22 bot repos: 14 are still pinned to V1 SDKs as of T+3 days.** The eight that did migrate either had advance notice or were maintained by full-time developers who saw the cutover coming on `@PolymarketDevs`. Everyone else's most-starred bot is broken on `main`.

🟢 **A solo developer's migration cookbook has been more useful than Polymarket's own resources.** [`LuciferForge/polymarket-v2-migration`](https://github.com/LuciferForge/polymarket-v2-migration), pushed April 28 16:11 UTC, ships:

- A side-by-side V1→V2 diff
- A contract-address mapping table  
- An hour-by-hour cutover timeline
- A troubleshooting runbook for "the 12 specific errors I hit"
- A pull-request walkthrough on a real bot
- An apology-free voice that pulls no punches

The README claims: *"I migrated a live-traded crash-recovery bot (308 closed trades, 80.2% win rate) from V1 to V2 in 4 hours during today's cutover."*

No equivalent guide exists in any official Polymarket repo's README or releases. The best migration documentation Polymarket developers have is not from Polymarket.

![Comms asymmetry: @PolymarketDevs led on V2 migration tweets while CEO @shayne_coplan posted zero.](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/comms-asymmetry.jpg)

# The communication failure

This is where the story turns.

Polymarket announced V2 publicly on **April 6, 2026** in a single tweet from the main `@Polymarket` account. The tweet was a high-level *"we're rebuilding the exchange"* statement. Then the main account, which has **1.46 million followers**, went radio silent on the migration for **22 days**.

We pulled every tweet from `@Polymarket`, `@PolymarketDevs`, `@PolymarketTrade`, `@devjoshstevens` (VP Eng), and `@shayne_coplan` (CEO) between April 6 and May 1.

| Account | Followers | V2 tweets in window | Notes |
|---|---|---|---|
| `@Polymarket` (main) | 1,460,000 | **4 total** | 1 on Apr 6, 3 on Apr 28 cutover day |
| `@PolymarketDevs` | 21,000 | ~30 | The actual operational hub for the migration |
| `@PolymarketTrade` | 47,000 | ~12 | Trader-facing reminders + USDC↔pUSD apology |
| `@devjoshstevens` (VP Eng) | 8,000 | ~20 | Real-time triage and bug acknowledgments |
| `@shayne_coplan` (CEO) | 173,000 | **0** | Zero V2 tweets in the entire window |

🔴 **The detailed comms (timing, SDK migration, builder-code change, mandatory dev updates) all lived on niche secondary channels.** A retail trader following only `@Polymarket` got 18 hours of warning and zero context. A bot operator who wasn't in Polymarket's Discord got nothing.

🔴 **The CEO posted nothing.** Across 22 days, a $9B-valuation company's largest-ever infrastructure overhaul, and the CEO's verified account didn't acknowledge it once.

🔴 **There is no official long-form blog post on `polymarket.com/blog`.** The blog is empty. The single official migration announcement is an [Intercom Help Center article](https://help.polymarket.com/en/articles/14762452-polymarket-exchange-upgrade-april-28-2026) — discoverable only by searching the help center.

🔴 **There is no post-cutover apology.** Three days post-cutover, the status page at `status.polymarket.com` shows "No notices reported" for April 29, 30, and May 1, despite the company itself acknowledging ghost-fill bugs on `@PolymarketTrade`.

🔴 **`@PolymarketHQ` is suspended.** The X API returns 403 — the handle exists nowhere.

# The Bloomberg bombshell

[Bloomberg reported on April 22](https://www.bloomberg.com), six days before the cutover, that:

> "Over the weekend, the company said it was delaying an upgrade of its exchange infrastructure for at least a week."

Bloomberg framed the V2 push as part of *"a string of delays"* that has tested ICE's patience and let Kalshi overtake Polymarket in volume. The delay was acknowledged to Bloomberg. **It was never acknowledged on any of Polymarket's own channels** — not the main account, not `@PolymarketDevs`, not the help center, not the docs, not the status page.

🔴 **The migration shipped seven days late, and Polymarket told a tier-1 financial publication about the delay before they told their own users.**

The careers page hints at the story underneath. Polymarket is currently hiring a *Senior C/C++ Engineer for US Exchange* — strongly suggesting that V2 is not the final architecture. As [Stevens posted](https://x.com/devjoshstevens) the week of cutover: *"CLOBv2 is the first step... isn't the final fix."*

🟡 **Read between the lines:** V2 is a transitional architecture. The company already knows it. They're hiring for V3 (presumably a low-latency C++ CLOB for the ICE-acquired CFTC venue) while V2 is still smoldering. That's a coherent strategic story — and it's exactly the story Polymarket's communication should have been telling out loud, instead of the four reluctant tweets from `@Polymarket`.

![pUSD vs USDC.e: 491 holders against 3.32M, a 0.015% holder base for the new collateral token.](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/pusd-vs-usdce.jpg)

# The pUSD problem

The new collateral token, pUSD, has a circulating supply of **$318,500,000** as of May 1. It has **491 holders.**

USDC.e (the previous Polymarket collateral) has **3.32 million holders** on Polygon. Daily pUSD volume across all DEXes: ~$125,000. Daily USDC.e volume: ~$86,000,000.

🔴 **The new collateral has 0.015% of the holder base of the old collateral, and 0.15% of the daily volume.** That's not a transition. That's a soft-restart of the entire pricing layer. The orderbooks repopulate from zero.

🔴 **The auto-redeem flow broke.** Per `@ExponentDefi`, who runs an automated LP product, "Wins now land in USDC.e instead of pUSD. Manual `CollateralOnramp` wraps required. Redeem scripts being rewritten 24h after cutover."

🔴 **`@PolymarketTrade` issued the only public Polymarket apology** (for a USDC↔pUSD swap fee bug) in a single tweet on April 28 at 20:18 UTC. Nine hours after cutover. No status page entry.

The pUSD design itself is reasonable. A custom stablecoin lets Polymarket run different liquidity programs, custom fees, and (we suspect) eventual interest-bearing collateral. But shipping a new collateral token with 491 holders against a four-year-old USDC.e orderbook is a *deliberate ecosystem reset*. Old positions don't migrate themselves. Old market makers have to re-bridge capital. Old bots have to update token addresses across every config file.

The migration map says all of this. Not in those words.

![Volume held but fees didn't: a 5% volume dip and a 23% fee drop, roughly $100M annualized gap.](/post-images/2026-04-28-polymarket-v2-the-ecosystem-cull/volume-vs-fees-diverge.jpg)

# The $100M revenue gap

Daily volume across Polymarket dropped only **4.7%** post-cutover ($129M → $123M per day). That's well within normal weekly variance.

But fees are down **23.1%** ($1,180,000 → $910,000 per day).

| Metric | Pre-cutover (avg Apr 21–27) | Post-cutover (Apr 28–May 1) | Change |
|---|---|---|---|
| Daily volume | $129M | $123M | 🟡 −4.7% |
| Daily fees | $1.18M | $910K | 🔴 −23.1% |
| Implied take rate | 0.91% | 0.74% | 🔴 −0.17pp |
| Annualized fee gap | — | — | 🔴 ~$100M |

🔴 **That's a structural ~$100 million per year revenue gap.** Volume is roughly intact. The fee capture isn't.

We don't have visibility into Polymarket's V2 fee structure changes — the docs describe the new `FeeCharged` event but the fee schedule itself is opaque. But the math tells a story: the bots that drove the high-frequency, high-fee maker/taker volume on V1 are the same bots whose orphan rate is 55%. **The fee compression is the bot exit, priced.**

This is the part of the migration that someone is going to have to explain. A 23% fee drop on stable volume in three days is not a quiet number.

# What survived

Not everything broke. Some operators saw this coming and shipped clean migrations.

🟢 **`@almanac_market`** (a third-party Polymarket trading product) posted on April 28: *"Devs absolutely cooked the @Polymarket v2 migration. Limited downtime 👏🏼"*. Almanac was running V2 within hours.

🟢 **chainstacklabs/polyclaw, valory-xyz/trader, KaustubhPatange/polymarket-trade-engine, NYTEMODEONLY/polyterm, lihanyu81/polymarket_lp_tool, tosmart01/poly-web3, floor-licker/polyfill-rs, PoDev** — eight active third-party bots successfully migrated within 72 hours.

🟢 **`@neor_neor` shipped a Go SDK** in response to the cutover: *"Building on Polymarket in Go shouldn't feel like hacking around a half-broken API. But it does. So we fixed it."* That's the ecosystem self-organizing around gaps in the official tooling.

🟢 **Exponent, the LP-automation startup, ate the bug, rewrote the redeem flow, and stayed running.** Their post-cutover pain was real but their volume continued.

The pattern: **operators with full-time engineering budgets adapted in days. Hobbyist bot operators, weekend AI agents, and the long tail of small algorithmic traders are the orphan column.**

That's the cull.

# A forced cull, not a migration

Read together (the on-chain orphan count, the GitHub issue trackers, the X sentiment slice, the Bloomberg delay leak, the missing CEO communication, Polymarket's own CLI still on V1) a single thesis emerges.

**This was not a migration. It was a forced ecosystem reset, communicated like a feature update.**

The V2 architecture isn't bad. The contracts are real and live. The new SDK design is cleaner than V1 (better error types, structured outcomes, EIP-712 domain consolidation). The migration guide is competent. The cutover itself was atomic and lasted under an hour.

But the *strategy* of the cutover was: **end V1 as a forcing function on the ecosystem, with minimum public acknowledgement that it was a forcing function.**

The evidence:

| Symptom | What it implies |
|---|---|
| 4 main-account tweets across 22 days | The migration was deliberately under-promoted |
| V1 packages never deprecated, never archived | Discovery friction was tolerated |
| Bloomberg-only acknowledgement of the 7-day delay | Press got more info than users |
| 8K–13K orphaned bot wallets | Ecosystem cleanup, not migration |
| 23% fee drop on 5% volume drop | The high-fee participants are the ones who didn't migrate |
| Polymarket's own CLI not migrated by cutover | Internal coordination didn't prioritize ecosystem readiness |
| Hiring a C++ engineer for V3 | V2 was always transitional |

Each individually has a charitable interpretation. Together, they describe a company that decided the V1 ecosystem (including significant fractions of its own bot economy) wasn't worth carrying into V2.

# Why this matters beyond Polymarket

🔴 **Every prediction-market protocol, perp DEX, and CLOB-on-chain operator is watching this carefully.** Polymarket just demonstrated that a one-hour cutover with a 55% orphan rate is *survivable* — volume held, the company is still functioning, the new architecture is live. If you're running an exchange that's been delaying a migration because you fear the ecosystem hit, Polymarket just gave you the playbook.

🔴 **This is what "credibly neutral infrastructure" looks like under pressure.** Polymarket is not the chain. The chain (Polygon) didn't change. The CTF protocol (the underlying conditional tokens contract) didn't change. Polymarket changed *the exchange layer it operates*, and it changed it in a way that nuked every third-party tool. That's a useful demonstration that "on-chain markets" doesn't mean "permissionless infrastructure" — when one operator controls the exchange contract, that operator can issue a 55%-orphan-rate cutover.

🔴 **The 23% fee compression is a leading indicator.** If V2 sustains the fee gap for 30 days, Polymarket is voluntarily eating ~$100M of annual revenue to clear out the V1 long tail. That's either a calculated bet that V3 makes it back (the C++ ICE play) or a structural concession that bot fees were never coming back. Either reading is a story.

🟡 **The orphan bots themselves are an opportunity.** ~10,000 broken trading agents represents a lot of capital looking for a venue. Some will migrate to Polymarket V2 in the coming weeks. Some will rotate to Kalshi or other prediction venues. Some will go dark permanently. The capital flows here are large enough to matter.

🟢 **The migration cookbook is now a permanent document type.** [`LuciferForge/polymarket-v2-migration`](https://github.com/LuciferForge/polymarket-v2-migration) is the template: when an exchange rebuilds its stack, expect community-written migration guides to outpace the official ones, and expect the best community guides to show up on cutover day. The next migration of this scale (probably Polymarket V3, possibly Hyperliquid, possibly a perp protocol) should already have a "migration cookbook author" identified before the cutover begins.

# What to watch over the next 30 days

🟢 **The orphan rate.** Does the 55% number compress as more bot operators migrate? A drop to 20-25% in 30 days is normal recovery. Staying at 40%+ means a permanent loss of the V1 long tail.

🟢 **The fee gap.** Does the 23% fee compression persist? If yes, this was a permanent margin compression, not a migration shock.

🟢 **The CEO acknowledgement.** Does Shayne Coplan post a V2 retrospective at all? The longer the silence, the louder the answer is *"we knew this would happen and we went anyway."*

🟢 **Polymarket's own CLI.** When does PR #67 merge? When does the CLI ship a V2 release? Until that happens, the official tooling story stays: *"Polymarket's own most-starred SDK is broken three days after cutover."*

🟢 **The C++ V3 hiring.** When does Polymarket announce CLOBv3? The careers-page signal suggests it's not far off. If V3 ships within 6 months, V2 was a stepping-stone — and the cutover narrative gets retold as *"the company that does ecosystem culls every 12 months."* That's a different reputational story.

🟢 **Kalshi's volume share.** Bloomberg already noted Kalshi overtook Polymarket in volume during the delay window. If V2 doesn't recover that share within 60 days, the migration was net-negative on competitive position even with a clean cutover.

# Where the public record sits today

The migration is a clean technical artifact and a messy ecosystem artifact. Both can be true.

Polymarket's V2 architecture is real, deployed, and processing 28,000+ OrderFilled events per 7-minute sample window. The new SDK design is better than V1. The migration documentation is good. The cutover was under an hour.

Polymarket's V2 also broke 8,000–13,000 bot wallets, compressed daily fees by 23%, shipped phantom-fill and 404-CORS bugs in the V2 client itself, left its own ⭐2,635 CLI on V1 three days post-cutover, communicated through niche secondary accounts while the main 1.46M-follower account stayed silent, and never publicly acknowledged that the original cutover date slipped by seven days.

🔴 **The infrastructure shipped. The ecosystem got culled. The communication around both was, charitably, an afterthought.**

The bots that survived were the ones operated by people who follow `@PolymarketDevs` directly and read the Discord. Everyone else (the weekend hobbyists, the AI agents, the long tail of small algorithmic strategies) just had their April fills break, and most of them won't come back.

That's the actual story of Polymarket V2.

## Sources

- [Polymarket V2 Migration Guide (docs)](https://docs.polymarket.com/v2-migration)
- [Polymarket Help Center (Apr 28)](https://help.polymarket.com/en/articles/14762452-polymarket-exchange-upgrade-april-28-2026)
- [Bloomberg — Polymarket delays upgrade](https://www.bloomberg.com)
- [The Block](https://www.theblock.co)
- [CoinDesk](https://www.coindesk.com)
- [Decrypt](https://decrypt.co)
- [Polymarket org on GitHub](https://github.com/Polymarket)
- [PyPI py-clob-client-v2](https://pypi.org/project/py-clob-client-v2/)
- [npm @polymarket/clob-client-v2](https://www.npmjs.com/package/@polymarket/clob-client-v2)
- [Polygonscan](https://polygonscan.com)
- [DefiLlama Polymarket](https://defillama.com/protocol/polymarket)
- [X (@Polymarket)](https://x.com/Polymarket)
- [X (@PolymarketDevs)](https://x.com/PolymarketDevs)
- [X (@PolymarketTrade)](https://x.com/PolymarketTrade)
- [X (@devjoshstevens)](https://x.com/devjoshstevens)
- [X (@0x_Punisher)](https://x.com/0x_Punisher/status/2049795308675068222)
- [X (@egorFiNE)](https://x.com/egorFiNE/status/2049570867940921633)
- [X (@_Chain_Duck_)](https://x.com/_Chain_Duck_/status/2049903154213404795)
- [X (@neor_neor)](https://x.com/neor_neor/status/2049478808265498861)
- [X (@ExponentDefi)](https://x.com/ExponentDefi)
- [X (@almanac_market)](https://x.com/almanac_market)
- [GitHub — polymarket-cli PR #67](https://github.com/Polymarket/polymarket-cli/pull/67)
- [GitHub — py-clob-client #335](https://github.com/Polymarket/py-clob-client/issues/335)
- [GitHub — clob-client-v2 #51](https://github.com/Polymarket/clob-client-v2/issues/51)
- [GitHub — clob-client-v2 #54](https://github.com/Polymarket/clob-client-v2/issues/54)
- [GitHub — LuciferForge/polymarket-v2-migration](https://github.com/LuciferForge/polymarket-v2-migration)

---

Canonical: https://www.thedeepfeed.ai/posts/2026-04-28-polymarket-v2-the-ecosystem-cull/
Site: https://www.thedeepfeed.ai
Full corpus: https://www.thedeepfeed.ai/llms-full.txt