Funding a Polymarket wallet in pmv2: deposit USDC to the signer EOA, never to the maker proxy. Polymarket’s relayer watches the EOA deposit address and mints pUSD into the proxy; USDC sent directly to the proxy bypasses the relayer and strands there as unwrapped native USDC — invisible to the bot. A $10 test deposit is exactly what caught this.

For Agents

Each Polymarket wallet in pmv2_wallets stores two addresses:

  • maker_proxy — the Polymarket account. Holds the pUSD collateral. The bot trades from here (SigningClient::connect(signer, addr=proxy) in crates/position_manager/src/signer_arm.rs).
  • signer_eoa — the signer only. Always holds $0.

Deposit target = the EOA. Verify a deposit by watching pUSD rise at the proxy, not by “USDC left my wallet.”

The Gotcha

Polymarket’s deposit address is the EOA. Their relayer monitors that EOA, then mints pUSD into the proxy. Sending USDC directly to the proxy bypasses the relayer and strands it there as unwrapped native USDC — the CLOB does not count it as cash and the bot never sees it.

Stranded funds — this cost $10

USDC sent to the maker_proxy sits there as native USDC and does not convert to pUSD. It is not collateral, not tradeable, and not counted by /wallets. Recovering it requires a separate move; it does not auto-wrap.

Sequence That Revealed It

  1. Sent a $10 test via Polymarket withdraw to the PROXY address.
  2. It landed as native USDC (0x3c499c542cEF5E3811e1192ce70d8cc03d5c3359) at the proxy and did NOT convert to pUSD.
  3. Balance at proxy showed 31.34 pUSD + 10.00 native USDC — the $10 was stranded, not spendable.
  4. Re-deposited via the EOA deposit address → it wrapped to pUSD. Proxy became 41.34 pUSD, native USDC went to 0.

This is why the small test deposit matters: the $10 probe surfaced the wrong-address failure before a large deposit could strand a large amount.

Rules

Funding checklist

  • Collateral is pUSD 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB, 6 decimals. This is the only token the CLOB and /wallets count as cash.
  • Deposit to the EOA. Never send USDC directly to the proxy.
  • Verify success by watching pUSD rise at the proxy — not by “USDC left my wallet.”
  • Always do a small test deposit before a large one. The $10 test is exactly what caught this.

Native USDC vs pUSD

TokenAddressCounts as cash?
pUSD (collateral)0xC011a7E12a19f7B1f670d46F03B03f3342E82DFBYes — only token CLOB / /wallets see
Native USDC0x3c499c542cEF5E3811e1192ce70d8cc03d5c3359No — strands at proxy if deposited directly

Note this native USDC is distinct from USDC.e (0x2791Bca1...) referenced in pmv2-data-api-positions-pnl-classification-2026-06-28.

Polygon RPC for Balance Checks

Public Polygon RPC endpoints that DON'T work

  • polygon-rpc.com403 (tenant disabled).
  • polygon.llamarpc.comempty response.

Use https://polygon-bor-rpc.publicnode.com.

Balance check = eth_call balanceOf selector 0x70a08231 against the pUSD contract, addressed with the proxy address. Watching this value rise confirms a deposit wrapped correctly.

Addresses (public)

Wallet addresses — public, safe to record. NO private keys.

Walletmaker_proxysigner_eoa (deposit here)
levi0x99331696e44A1256013698D4a62Dc66961b4F7860xF9bBBd3BC8E6e6E6C7432eD7A71aA2c223B927Fd
gyula0xDC0ec17C948a7A717e2b52C348785bce3e915f200x02c0D37a5eDa5593187cf08829dB06eCA8b92cbE
bandi0x7D39B0e537f84Ce88feE233eEa1d84eCEAD48ee6