How PolyUSD Works
According to Polymarket’s announcement, PolyUSD is backed 1:1 by USDC. Power users and API traders can wrap either USDC or USDC.e into PolyUSD. For most frontend users, the transition is seamless — the Polymarket UI handles wrapping automatically with a one-time approval. There are two wrapping paths:| Path | Contract | Input Token | Status |
|---|---|---|---|
| Collateral Onramp | 0x93070a847efef7f70739046a929d47a521f5b8ee | USDC.e (bridged) | Active — working today |
| PermissionedRamp | 0xebc2459ec962869ca4c0bd1e06368272732bcb08 | Native USDC (Circle) | Not active yet — deployed but zero transactions |
The USDC.e → Onramp path is what’s working right now. We’ve tested it on mainnet and verified the full flow. The native USDC path via the PermissionedRamp exists on-chain but has not processed any transactions yet. When Polymarket activates it, wrapping native USDC will also be supported.
Quick Reference
| Address | |
|---|---|
| PolyUSD Token | 0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb |
| Collateral Onramp (USDC.e → PolyUSD) | 0x93070a847efef7f70739046a929d47a521f5b8ee |
| Collateral Offramp (PolyUSD → USDC.e) | 0x2957922eb93258b93368531d39facca3b4dc5854 |
| PermissionedRamp (native USDC, not yet active) | 0xebc2459ec962869ca4c0bd1e06368272732bcb08 |
| USDC.e (bridged USDC) | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 |
| Backing Vault | 0xC417fD8E9661c0d2120B64a04Bb3278C17E99DB1 |
Wrapping: USDC.e → PolyUSD (Active Path)
To get PolyUSD today, wrap your USDC.e through the Collateral Onramp contract.Steps
- Approve the Onramp to spend your USDC.e
- Call
wrap(underlyingToken, recipient, amount)on the Onramp
Using the polynode SDK
The SDK handles wrapping automatically:Wrap Function Signature
underlyingToken— the USDC.e contract address (0x2791Bca1...)recipient— who receives the PolyUSD (usually yourself)amount— raw amount in 6-decimal units (1 USDC = 1,000,000)
Unwrapping: PolyUSD → USDC.e
To withdraw from V2, unwrap your PolyUSD back to USDC.e through the Collateral Offramp.Steps
- Approve the Offramp to spend your PolyUSD
- Call
unwrap(underlyingToken, recipient, amount)on the Offramp
How It Works Under the Hood
PolyUSD is backed 1:1 by collateral held in a vault contract (0xC417fD8E...). When you wrap:
- Your USDC.e transfers to the vault
- PolyUSD is minted to your wallet
- Your PolyUSD is burned
- USDC.e is released from the vault to your wallet
The vault currently holds USDC.e as the backing collateral. Polymarket has stated that PolyUSD is backed 1:1 by USDC. A PermissionedRamp contract exists for native USDC wrapping but is not yet active. When it activates, the vault may hold a mix of USDC.e and native USDC, but PolyUSD remains 1:1 redeemable regardless of the backing composition.
Tracking PolyUSD Events
polynode detects PolyUSD wrapping and unwrapping through the settlement stream. These appear asdeposit events:
- Wrap (deposit):
direction: "deposit",fromis the Onramp contract - Unwrap (withdrawal):
direction: "withdrawal",tois the user wallet
deposits on the WebSocket to receive these events. Internal settlement wraps/unwraps (between exchange and adapter contracts) are filtered out automatically.
Key Facts
- Decimals: 6 (same as USDC)
- Backing: 1:1 by USDC (currently held as USDC.e in the vault)
- Wrapping: USDC.e via Onramp (active) or native USDC via PermissionedRamp (not yet active)
- Proxy: ERC-1967 upgradeable proxy
- Chain: Polygon mainnet (chain ID 137)
- Minimum wrap: No minimum (tested with amounts as low as $0.007)

