第 36 章 / 共 36 章
简明版
在 2026 年 4 月 28 日,Polymarket 将其在 Polygon 上的结算抵押品从 USDC.e(跨链桥接的 USDC 代币,合约地址 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)迁移为 pUSD——一种由 Polymarket 发行、可按 1:1 兑换原生 USDC 的稳定币。网页端交易者无需任何操作——余额和持仓会在快照区块自动转换。API 与机器人运营者则必须更新:每一笔 CLOB 订单签名中的抵押品资产地址都发生了变化,所有针对 USDC.e 签名的旧订单都已被取消,并且已归档的 py-clob-client 0.34.x 必须替换为 py-clob-client-v2。本指南将逐步讲解在切换期间及切换之后让机器人持续运行所需的具体代码、合约和授权变更。
第一部分:三种稳定币,同一条 Polygon
在此次迁移之前,Polymarket 的 Polygon 生态中存在三种美元稳定币。搞清楚它们之间的区别,是理解 Polymarket 为何更换平台底层的第一步。
| 代币 | 发行方 | Polygon 上的合约 | 储备类型 |
|---|---|---|---|
| USDC.e | Polygon PoS 跨链桥 | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | 从 Ethereum 主网跨链而来 |
| USDC(原生) | Circle | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | 原生,直接在 Polygon 上发行 |
| pUSD | Polymarket 抵押品合约 | 参见 docs.polymarket.com/concepts/pusd | 由 USDC 1:1 支撑,链上强制执行,可随时赎回 |
Polymarket 最初选择 USDC.e,是因为 2020 年上线时它是 Polygon 上占主导地位的 USDC 版本。Circle 后来直接在 Polygon 上发行了原生 USDC,并释放出最终弃用跨链版本的信号。继续用 USDC.e 结算每一个市场,会让 Polymarket 暴露在跨链桥突然停止运营这一长尾风险之下。迁移到由 Polymarket 自己掌控的稳定币既解决了这个问题,又为未来共享同一记账单位的产品功能(例如永续合约保证金、金库充值、跨链凭证)打开了空间。
第二部分:pUSD 是什么(以及不是什么)
pUSD 是一种标准的 Polygon(chain id 137)上的 ERC-20 代币,精度为 6 位小数,与 USDC 精度相同。它仅在 USDC 通过 Polymarket 的抵押品合约被包装时铸造,可随时按 1:1 赎回为原生 USDC,转换不收取手续费(仍需支付网络 gas)。其支撑由链上强制执行:包装合约持有底层 USDC,本身即是赎回机制。没有链下托管方,没有算法锚定,也没有部分准备金。
pUSD 不是算法稳定币,不是用加密资产超额抵押的,也不带收益。如果你在 Polymarket 之外持有 pUSD,应当把它看作 Polymarket 发行的、对应原生 USDC 的一张借据——在平台内有用,可随时赎回,但长期放在外部钱包里持有并无好处。
docs.polymarket.com/concepts/pusd。第三部分:网页应用交易者看到了什么
如果你只通过 polymarket.com 进行交易,那么这次迁移对你来说是无感的。在 2026 年 4 月 28 日的快照区块时刻:
- Polymarket 代理钱包中持有的所有 USDC.e 余额,都以 1:1 的比例原子化转换为 pUSD。
- 未平仓头寸保持相同的美元价值、相同的结果赔率和相同的到期日。条件代币 ID 没有改变。
- 以 USDC.e 计价的挂单在快照时被取消。迁移后的新订单会自动针对 pUSD 进行签名。
- 向外部钱包提现时,从发送 USDC.e 切换为发送原生USDC(或者,按需可发送原始 pUSD——大多数用户从不需要这样做)。
整个过程无需任何签名、交易或设置变更。对你来说重要的挂单限价单应在迁移后手动重新挂出;这次取消是一次性事件。
第四部分:API 和机器人运营者——关键变更
如果你不采取行动,这部分内容会让你的机器人崩溃。
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)。迁移后则为 pUSD。针对旧地址签名的订单会在 CLOB 处签名验证失败,并返回 "invalid maker asset" 或 "signature mismatch" 错误。升级 py-clob-client
Polymarket 的 py-clob-client-v2 完整支持 pUSD / V2。旧的 0.34.x 系列是已归档的 V1,会针对错误的(USDC.e)域进行签名——请勿使用它。(不存在所谓的 "py-clob-client 0.40";如果某份指南这么说,那它是错的。)
# Bump to a pUSD-aware release
pip install py-clob-client-v2 # the V2 client; the old 0.34.x line is archived V1
# pUSD collateral is 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB on Polygon
新版 SDK 会在启动时从链上配置中拉取抵押品地址,因此你无需硬编码任何内容。如果你 fork 了或锁定了某个旧版本,最稳妥的做法是删除 lockfile,使用最新的常量模块重新安装,并重新运行你的测试套件。
重新授权额度
你的 Polymarket 代理钱包需要一笔针对 pUSD 代币、从你的交易账户 → CTF Exchange 合约的 ERC-20 授权额度。旧的 USDC.e 授权额度仍在链上,但已完全无用:CLOB 不会使用它。如果没有一笔新的 pUSD 授权额度,每个订单都会返回 "INSUFFICIENT_ALLOWANCE"。
from py_clob_client_v2 import ClobClient
creds = ClobClient(host="https://clob.polymarket.com", chain_id=137,
key=os.environ["POLY_PRIVATE_KEY"]).create_or_derive_api_key()
client = ClobClient(
host="https://clob.polymarket.com",
chain_id=137,
key=os.environ["POLY_PRIVATE_KEY"],
creds=creds, # V2: creds in the constructor (no set_api_creds)
funder=os.environ["POLY_FUNDER"],
signature_type=1, # POLY_PROXY for Magic-link accounts
)
# One-time: approve pUSD for the V2 exchange contracts before trading
client.update_balance_allowance(asset_type="COLLATERAL")
刷新 API 凭证
现有的 API key 仍然可以正常使用,但如果你是在 4 月 1 日之前派生的凭证,出于谨慎应当轮换一次:L1 ECDSA 签名现在绑定到了一个包含新抵押品地址的域。最简单的做法是:
creds = client.create_or_derive_api_key() # V2 method; idempotent re-derive
# In V2 you pass creds= into the ClobClient constructor (there is no set_api_creds)
# Persist to your .env
print(creds.key, creds.secret, creds.passphrase)
第 5 部分:迁移后验证你的机器人
在让任何仓位管理逻辑接触真金白银之前,先运行这个最小化的冒烟测试:
# 1. Confirm pUSD balance on the proxy wallet
from py_clob_client_v2 import ClobClient
client = ClobClient(...) # as above
balance = client.get_balance_allowance(params={"asset_type": "COLLATERAL"})
print("pUSD balance (raw):", balance["balance"])
print("Allowance to exchange:", balance["allowance"])
# 2. Place a $1 limit order well off the touch
from py_clob_client_v2 import OrderArgs, Side, OrderType, PartialCreateOrderOptions
resp = client.create_and_post_order( # V2: build + sign + post in one call
order_args=OrderArgs(token_id=test_token_id, price=0.05, side=Side.BUY, size=20),
options=PartialCreateOrderOptions(tick_size="0.01"),
order_type=OrderType.GTC, # $1 notional at $0.05, nowhere near the touch
)
print(resp)
# 3. Cancel and confirm
client.cancel(order_id=resp["orderID"])
如果这三个调用都成功,说明你的接线没问题:SDK 已针对 pUSD 完成签名、授权额度被正确识别、订单台账也保持一致。之后再逐步放大规模。
第 6 部分:常见错误及修复方法
| 错误或现象 | 原因 | 解决方法 |
|---|---|---|
signature verification failed | 订单是按 USDC.e 的 EIP-712 域签名的 | 切换到 py-clob-client-v2(已归档的 0.34.x 版本签的是旧的 USDC.e 域) |
每笔订单都报 INSUFFICIENT_ALLOWANCE | 你的代理钱包没有向 CTF Exchange 授权 pUSD 额度 | 运行一次 update_balance_allowance(asset_type="COLLATERAL") |
invalid maker asset | 配置里仍然硬编码了 USDC.e 地址 | 把所有硬编码的抵押品地址替换为 SDK 常量 |
| 迁移后钱包仍显示 USDC.e 余额 > 0 | 第三方转账留下的“粉尘”代币 | 通过 Circle 的 CCTP 将 USDC.e 跨链桥回原生 USDC,或者干脆不管它 |
| WebSocket 重连后订单簿为空 | 旧订阅使用了快照之前的过期市场状态 | 清除本地缓存,重新通过 REST 拉取订单簿,然后重新订阅 |
| 提现到外部钱包时显示的是 pUSD 而不是 USDC | 你在提现弹窗里选了“pUSD”而不是“USDC” | 选择“USDC”——跨链桥会按 1:1 将 pUSD → 原生 USDC |
第 7 部分:条件代币、订单 ID 以及其他没有变化的东西
为了如实界定重构范围,以下是在本次迁移中保持不变的标识符清单:
- 条件代币合约(CTF):地址完全相同。你的 YES / NO ERC-1155 仓位不受影响。
- condition_id 和 question_id:由市场参数确定性地推导而来;不受抵押品更换的影响。
- token_id(结果):由 condition_id + 结果索引推导而来;保持不变。
- Polymarket 代理钱包地址:地址相同;同样的 Gnosis Safe 风格代码。
- API key、API secret、API passphrase:仍然有效(建议轮换;非必需)。
- WebSocket schema:完全相同;成交事件中新的
asset字段读取的是 “pUSD” 而非 “USDC.e”。 - Gamma 和 Data API:无需鉴权,保持不变。它们从来没有直接引用过抵押品代币。
第 8 部分:税务与记账影响
在大多数司法管辖区,USDC.e 自动转换为 pUSD 属于同类美元锚定稳定币之间 1:1 的等价兑换,不会产生应税事件。你的成本基础和持有期会原样延续。
话虽如此,有两项记账事项值得注意:
- 更新你的账本结构。任何按 USDC.e 合约来筛选 Polygon 交易的税务工具、SQLite 账本或会计导出文件,都会悄无声息地漏掉迁移后的每一笔交易。把 pUSD 合约地址添加为别名。
- 为快照转换做好标注。尽管在大多数税制下它不应税,也要在记录中明确记下这次转换:金额、区块、时间戳,并备注这是一次 1:1 的稳定币迁移。万一你所在司法管辖区日后来查,你会希望有一份干净的审计记录。
以色列交易者应查阅税务指南了解 ITA 特定的申报要求;迁移本身不会改变标准处理方式,但合约地址的变更对自动化申报工具很关键。
第 9 部分:亲历切换的运营者的专业建议
- 在 requirements.txt 中锁定
py-clob-client-v2(>=1.0)。它能正确签署 pUSD / V2 订单;已归档的 0.34.x 系列不行。 - 在交易量低的时段重新授权额度。
update_balance_allowance调用是一笔 Polygon 交易;在行情快速波动时去做,无异于自找 gas 飙升。 - 在 4 月 28 日之前对你的 USDC.e 余额做快照。尽管转换是自动进行的,但一份可验证的转换前快照余额,是处理任何对账问题最干净利落的方式。
- 在快照前手动取消挂单。反正这些订单都会被平台取消;自己动手取消能给你一条干净的账本记录,而不是一行“系统取消”。
- 留意过时的仪表盘。第三方 Polymarket 仪表盘(PolymarketAnalytics、Polynance 等)花了两到三天才重新解析 pUSD 事件。在几天内,你机器人的本地数据库可能比公开仪表盘更超前。
- 按自己的节奏跨链转移 USDC.e 零头。大多数账户都有几美分的 USDC.e 残余,来自旧的手续费返还或点对点转账。用 Circle 的 CCTP 或标准的 Polygon Portal 跨链桥即可——不用着急。
- 在区块浏览器警报中保留旧的 USDC.e 地址。如果迁移后还有任何资金以 USDC.e 形式从你的代理账户被划走,那就是个值得立即调查的危险信号。
接下来呢?
- Polymarket API 指南 - 完整的 API 指南,已针对 pUSD 更新
- 充值指南 - 在应用内充值 USDC 并获得 pUSD
- 提现指南 - 将 pUSD 以原生 USDC 的形式提现到外部钱包
- 工具与资源 - 第三方面板,现已针对 pUSD 更新
- 术语表 - 此处用到的每个术语的通俗解释
核心要点
对于任何已经在运行 Polymarket 机器人的操作者来说,Polymarket pUSD 迁移只是一次低风险的一次性重构。切换到 py-clob-client-v2,重新授权 pUSD 额度,跑一个 $1 的冒烟测试,然后恢复运行即可。底层基础设施(CTF、condition IDs、token IDs、API 密钥)并未改变,因此涉及面很小,回滚方案也很干净利落。












