Hoofdstuk 36 van 36
De korte versie
Op 28 april 2026 migreerde Polymarket zijn afwikkelingsonderpand op Polygon van USDC.e (de gebridgede USDC-token, contract 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174) naar pUSD, een door Polymarket uitgegeven stablecoin 1:1 inwisselbaar voor native USDC. Web-app-traders deden niets - saldi en posities werden automatisch geconverteerd bij het snapshot-blok. API- en bot-operators moeten bijwerken: het onderpand-asset-adres binnen elke CLOB-order-handtekening veranderde, oude orders ondertekend tegen USDC.e werden geannuleerd, en py-clob-client 0.40 of nieuwer is vereist. Deze gids loopt de exacte code-, contract- en goedkeuringswijzigingen door die nodig zijn om een bot door en na de overstap draaiende te houden.
Deel 1: Drie stablecoins, één Polygon
Vóór de migratie bestonden er drie USD-stablecoins in de baan van Polymarket op Polygon. Het verschil kennen is de eerste stap naar begrijpen waarom Polymarket van platform wisselde.
| Token | Uitgever | Contract op Polygon | Reservetype |
|---|---|---|---|
| USDC.e | Polygon PoS-bridge | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | Gebridged vanaf Ethereum-mainnet |
| USDC (native) | Circle | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | Native, direct uitgegeven op Polygon |
| pUSD | Polymarket Treasury | Zie docs.polymarket.com/pusd | 1:1 gedekt door native USDC, maandelijkse attestatie |
Polymarket koos oorspronkelijk USDC.e omdat het de dominante USDC-variant op Polygon was bij de lancering in 2020. Circle gaf later native USDC direct uit op Polygon en signaleerde de uiteindelijke uitfasering van de gebridgede variant. Elke markt in USDC.e blijven afwikkelen stelde Polymarket bloot aan het long-tail-risico van een plotselinge bridge-afbouw. Migreren naar een door Polymarket gecontroleerde stablecoin lost dat op en ontsluit toekomstige productfuncties (bijv. perps-marge, vault-stortingen, cross-chain-ontvangstbewijzen) die dezelfde rekeneenheid delen.
Deel 2: Wat pUSD is (en niet is)
pUSD is een standaard ERC-20-token op Polygon (chain id 137) met 6 decimalen, dezelfde precisie als USDC. Het is alleen muntbaar door het Polymarket Treasury-contract en is op elk moment 1:1 inwisselbaar voor native USDC, zonder vergoeding op de conversie (netwerk-gas is nog steeds van toepassing). De reservedekking van pUSD wordt aangehouden in gescheiden rekeningen en maandelijks gerapporteerd met een attestatie van een derde partij.
pUSD is geen algoritmische stablecoin, is niet over-gecollateraliseerd met crypto, en is niet rentedragend. Als je pUSD buiten Polymarket aanhoudt, zou je het moeten zien als een door Polymarket uitgegeven schuldbekentenis voor native USDC - nuttig binnen het platform, op aanvraag inwisselbaar, maar zonder voordeel om langdurig in een externe wallet aan te houden.
docs.polymarket.com/pusd-audit. Verifieer beide voordat je grote saldi langdurig aanhoudt.Deel 3: Wat web-app-traders zagen
Als je alleen via polymarket.com traadt, was de migratie onzichtbaar. Bij het snapshot-blok op 28 april 2026:
- Elk USDC.e-saldo aangehouden in een Polymarket-proxy-wallet werd atomair geconverteerd naar pUSD op 1:1.
- Open posities behielden dezelfde dollarwaarde, dezelfde uitkomst-odds en dezelfde vervaltijd. Conditional-token-ID's veranderden niet.
- Rustende orders gedenomineerd in USDC.e werden geannuleerd bij het snapshot. Nieuwe orders na de migratie ondertekenen automatisch tegen pUSD.
- Opnames naar externe wallets schakelden over van het verzenden van USDC.e naar het verzenden van native USDC (of, op verzoek, ruwe pUSD - de meeste gebruikers hebben dat nooit nodig).
Er waren geen handtekeningen, transacties of instellingswijzigingen vereist. Rustende limietorders die er voor jou toe deden, moeten handmatig opnieuw worden geplaatst na de migratie; de annulering was een eenmalige gebeurtenis.
Deel 4: API- en bot-operators - cruciale wijzigingen
Dit is het deel dat een bot zal breken als je niet handelt.
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174). Na de migratie is het pUSD. Een order ondertekend tegen het oude adres faalt bij de handtekeningverificatie bij CLOB en retourneert een "invalid maker asset"- of "signature mismatch"-fout.Werk py-clob-client bij
Polymarket publiceerde py-clob-client 0.40.0 twee weken vóór de overstap met volledige pUSD-ondersteuning. De 0.34.x-lijn werd de dag na de migratie uitgefaseerd.
# Upgrade naar een pUSD-bewuste release
pip install --upgrade "py-clob-client>=0.40.0"
# Verifieer het gekoppelde onderpand-asset
python -c "from py_clob_client.constants import POLYGON; \
print('pUSD address:', POLYGON.get('collateral'))"
De nieuwe SDK haalt het onderpandadres bij het opstarten uit de chain-configuratie, dus je hoeft niets hard te coderen. Als je een oudere versie hebt geforkt of vastgepind, is de veiligste zet het lockfile te verwijderen, opnieuw te installeren met de nieuwste constants-module, en je testsuite opnieuw te draaien.
Keur allowances opnieuw goed
Je Polymarket-proxy-wallet heeft een ERC-20-allowance nodig van je trading-account → CTF Exchange-contract voor de pUSD-token. De oude allowance voor USDC.e staat nog steeds on-chain maar is volledig nutteloos: CLOB zal hem niet verbruiken. Zonder een verse pUSD-allowance retourneert elke order "INSUFFICIENT_ALLOWANCE".
from py_clob_client.client import ClobClient
client = ClobClient(
host="https://clob.polymarket.com",
chain_id=137,
key=os.environ["POLY_PRIVATE_KEY"],
funder=os.environ["POLY_FUNDER"],
signature_type=1, # POLY_PROXY voor Magic-link-accounts
)
client.set_api_creds(client.create_or_derive_api_creds())
# Eenmalig: keur pUSD goed voor het CTF Exchange-contract
# (Helper toegevoegd in py-clob-client 0.40)
client.update_balance_allowance(asset_type="COLLATERAL")
Vernieuw API-credentials
Bestaande API-sleutels blijven werken, maar als je credentials hebt afgeleid vóór 1 april zou je ze uit voorzorg moeten roteren: de L1-ECDSA-handtekening bindt nu aan een domein dat het nieuwe onderpandadres bevat. Het eenvoudigste pad:
creds = client.create_or_derive_api_creds() # idempotente her-afleiding
client.set_api_creds(creds)
# Persisteer naar je .env
print(creds.api_key, creds.api_secret, creds.api_passphrase)
Deel 5: Je bot verifiëren na de migratie
Draai deze minimale rooktest voordat je enige dimensioneringslogica loslaat op echt geld:
# 1. Bevestig pUSD-saldo op de proxy-wallet
from py_clob_client.client import ClobClient
client = ClobClient(...) # zoals hierboven
balance = client.get_balance_allowance(params={"asset_type": "COLLATERAL"})
print("pUSD balance (raw):", balance["balance"])
print("Allowance to exchange:", balance["allowance"])
# 2. Plaats een limietorder van $1 ver van de touch
from py_clob_client.clob_types import OrderArgs
order = client.create_order(OrderArgs(
token_id=test_token_id,
price=0.05, # nergens in de buurt van de markt
size=20, # $1 nominaal op $0.05
side="BUY",
))
resp = client.post_order(order)
print(resp)
# 3. Annuleer en bevestig
client.cancel(order_id=resp["orderID"])
Als alle drie de calls slagen, is je bedrading goed: de SDK ondertekende tegen pUSD, de allowance wordt herkend, en het order-grootboek is consistent. Schaal geleidelijk weer op.
Deel 6: Veelvoorkomende fouten en oplossingen
| Fout of symptoom | Oorzaak | Oplossing |
|---|---|---|
signature verification failed | Order ondertekend tegen het USDC.e-EIP-712-domein | Upgrade py-clob-client naar 0.40+; herlaad de constants-module |
INSUFFICIENT_ALLOWANCE op elke order | Geen pUSD-allowance van je proxy naar CTF Exchange | Draai update_balance_allowance(asset_type="COLLATERAL") één keer |
invalid maker asset | Hardgecodeerd USDC.e-adres nog in je config | Vervang elk hardgecodeerd onderpandadres door de SDK-constante |
| Wallet toont USDC.e-saldo > 0 na de migratie | "Dust"-tokens overgebleven van een transfer van derden | Bridge USDC.e terug naar native USDC via Circle's CCTP, of laat het |
| WebSocket-reconnect produceert een leeg boek | Oude subscription gebruikte een verouderde marktstaat van vóór het snapshot | Laat de lokale cache vallen, haal het REST-boek opnieuw op, abonneer dan opnieuw |
| Opname naar externe wallet toont pUSD in plaats van USDC | Je selecteerde "pUSD" in plaats van "USDC" in de opname-modal | Kies "USDC" - de bridge converteert pUSD → native USDC op 1:1 |
Deel 7: Conditional tokens, order-ID's en andere dingen die niet veranderden
Om de refactor-scope eerlijk te houden, hier de lijst met identifiers die stabiel zijn door de migratie heen:
- Conditional Token-contract (CTF): identiek adres. Je JA / NEE ERC-1155-posities zijn onaangeroerd.
- condition_id en question_id: deterministisch uit de marktparameters; niet beïnvloed door de onderpand-swap.
- token_id (uitkomst): afgeleid van condition_id + uitkomst-index; onveranderd.
- Polymarket-proxy-walletadres: hetzelfde adres; dezelfde Gnosis Safe-achtige code.
- API-sleutel, API-secret, API-passphrase: nog steeds geldig (aanbevolen om te roteren; niet vereist).
- WebSocket-schema's: identiek; het nieuwe
asset-veld leest "pUSD" in plaats van "USDC.e" in fill-events. - Gamma- en Data-API's: niet-geauthenticeerd, onveranderd. Ze verwezen nooit direct naar de onderpand-token.
Deel 8: Fiscale en boekhoudkundige implicaties
Voor de meeste jurisdicties is de auto-conversie van USDC.e naar pUSD een gelijksoortige swap van USD-gekoppelde stablecoins op 1:1 en produceert het geen belastbare gebeurtenis. Je kostenbasis en aanhoudperiode dragen over.
Dat gezegd hebbende, twee boekhoudkundige punten verdienen aandacht:
- Werk je grootboekschema bij. Elke belastingtool, SQLite-grootboek of accountant-export die Polygon-transacties filtert op het USDC.e-contract zal stilletjes elke transactie na de migratie missen. Voeg het pUSD-contractadres toe als alias.
- Annoteer de snapshot-conversie. Hoewel het in de meeste regimes niet-belastbaar is, log de conversie expliciet in je administratie: bedrag, blok, tijdstempel, en een notitie dat het een 1:1-stablecoin-migratie is. Als je jurisdictie het later opvraagt, wil je een schoon audittraject.
Israëlische traders moeten Belastinggids raadplegen voor ITA-specifieke rapportage; de migratie zelf verandert de standaardbehandeling niet, maar de contractadres-wijziging doet ertoe voor geautomatiseerde rapportagetools.
Deel 9: Pro-tips van operators die de overstap meemaakten
- Pin py-clob-client op
>=0.40,<0.50in requirements.txt. De 0.40-lijn is het minimum dat pUSD-orders correct ondertekent; een bovengrens vastpinnen beschermt tegen een toekomstige breaking change. - Keur allowances opnieuw goed tijdens een venster met laag volume. De
update_balance_allowance-call is één Polygon-transactie; het doen tijdens een snelle marktbeweging vraagt om de gas-piek. - Maak een snapshot van je USDC.e-saldo vóór 28 april. Hoewel de conversie automatisch is, is een verifieerbaar pre-snapshot-saldo de schoonste manier om een reconciliatieprobleem te betwisten.
- Annuleer rustende orders handmatig vóór het snapshot. Ze werden sowieso door het platform geannuleerd; het zelf doen geeft je een schone grootboekinvoer in plaats van een "system cancel"-regel.
- Let op verouderde dashboards. Polymarket-dashboards van derden (PolymarketAnalytics, Polynance, enz.) deden twee tot drie dagen over het opnieuw parsen van pUSD-events. De lokale DB van je bot kan een paar dagen vóór de publieke dashboards lopen.
- Bridge USDC.e-dust op je eigen schema. De meeste accounts hebben een paar cent overgebleven USDC.e van oude vergoedings-rebates of peer-transfers. Gebruik Circle's CCTP of de standaard Polygon Portal-bridge - geen haast.
- Houd het oude USDC.e-adres in je block-explorer-alerts. Als er ooit iets uit je proxy in USDC.e veegt na de migratie, is dat een rode vlag die onmiddellijk onderzoek waard is.
Wat nu?
- Polymarket API-gids - de volledige API-gids, bijgewerkt voor pUSD
- Stortingsgids - USDC storten en pUSD ontvangen binnen de app
- Opnamegids - pUSD opnemen als native USDC naar een externe wallet
- Tools & resources - dashboards van derden nu bijgewerkt voor pUSD
- Woordenlijst - begrijpelijke definities voor elke hier gebruikte term
Belangrijkste les
Sinds de migratie van april 2026 settled Polymarket in pUSD - een door Polymarket uitgegeven token die 1:1 gedekt is door USDC; je stort en neemt nog steeds USDC op, dus de verandering speelt zich vooral onder de motorkap af.





