第 36 章,共 36 章
简版
在 2026 年 4 月 28 日,Polymarket 将其在 Polygon 上的结算抵押品从 USDC.e(桥接版 USDC 代币,合约 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)迁移到了 pUSD,这是一种由 Polymarket 发行、可按 1:1 比例兑换为原生 USDC 的稳定币。网页端交易者无需做任何操作 - 余额和持仓会在快照区块自动转换。API 和机器人运维者必须更新:每个 CLOB 订单签名中的抵押品资产地址都已更改,使用旧 USDC.e 签名的订单已被取消,并且需要 py-clob-client 0.40 或更新版本。本指南将逐步说明保持机器人在切换期间及切换后继续运行所需的确切代码、合约和授权变更。
第1部分:三种稳定币,一个 Polygon
在迁移之前,Polymarket 在 Polygon 上的生态中存在三种美元稳定币。了解它们之间的差异,是理解 Polymarket 为什么更换平台的第一步。
| 代币 | 发行方 | Polygon 上的合约 | 储备类型 |
|---|---|---|---|
| USDC.e | Polygon PoS bridge | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | 从以太坊主网桥接而来 |
| USDC (native) | Circle | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | 原生发行,直接在 Polygon 上发行 |
| pUSD | Polymarket Treasury | See docs.polymarket.com/pusd | 由原生 USDC 1:1 支持,每月出具证明 |
Polymarket 最初选择 USDC.e,是因为它在 2020 年上线时是 Polygon 上占主导地位的 USDC 版本。Circle 后来直接在 Polygon 上发行了原生 USDC,并暗示最终会弃用桥接版本。继续用 USDC.e 结算每个市场,使 Polymarket 面临桥接通道突然退场的长期尾部风险。迁移到由 Polymarket 控制的稳定币可以解决这一问题,并解锁未来的产品功能(例如永续合约保证金、金库存款、跨链收据),这些功能都共享同一计价单位。
第 2 部分:pUSD 是什么(以及不是什么)
pUSD 是一种标准的Polygon 上的 ERC-20 代币(chain id 137),拥有 6 位小数,精度与 USDC 相同。它只能由 Polymarket Treasury 合约铸造,并可随时按 1:1 比例兑换为原生 USDC,兑换不收取费用(但仍需支付网络 Gas 费)。支持 pUSD 的储备金存放在隔离账户中,并通过第三方证明按月披露。
pUSD 不是 算法稳定币,也不是由加密资产超额抵押的代币,更不产生收益。如果你在 Polymarket 之外持有 pUSD,应将其视为 Polymarket 发行、可兑换为原生 USDC 的欠条 - 在平台内有用,可按需赎回,但长期持有在外部钱包中没有收益优势。
docs.polymarket.com/pusd-audit。在长期持有大额余额之前,请先核实这两项内容。第 3 部分:Web 应用交易者看到的内容
如果你只通过 polymarket.com 进行交易,这次迁移是不可见的。在 2026 年 4 月 28 日的快照区块时:
- Polymarket 代理钱包中持有的每一笔 USDC.e 余额都以 1:1 原子式转换为 pUSD。
- 未平仓头寸保持相同的美元价值、相同的结果赔率和相同的到期时间。条件代币 ID 没有变化。
- 以 USDC.e 计价的挂单在快照时被取消。迁移后的新订单会自动以 pUSD 签名。
- 向外部钱包的提现从发送 USDC.e 改为发送 原生 USDC(或按要求发送原始 pUSD - 大多数用户不需要这样做)。
无需任何签名、交易或设置更改。对你有影响的挂限价单应在迁移后手动重新挂出;取消只是一次性事件。
第 4 部分:API 和机器人运营者 - 关键变更
如果你不采取行动,这一部分会让机器人失效。
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)。迁移后,它变为 pUSD。针对旧地址签名的订单会在 CLOB 处签名验证失败,并返回 "invalid 挂单方 (maker) asset" 或 "signature mismatch" 错误。升级 py-clob-client
Polymarket 在切换前两周发布了 py-clob-client 0.40.0,完整支持 pUSD。0.34.x 版本线在迁移次日已退役。
# 升级到支持 pUSD 的版本
pip install --upgrade "py-clob-client>=0.40.0"
# 验证已接入的抵押资产
python -c "from py_clob_client.constants import POLYGON; \
print('pUSD address:', POLYGON.get('collateral'))"
新的 SDK 会在启动时从链配置中读取抵押资产地址,因此你无需硬编码任何内容。如果你分叉过或锁定了较旧版本,最稳妥的做法是删除 lockfile,使用最新的 constants 模块重新安装,然后重新运行测试套件。
重新批准授权额度
你的 Polymarket 代理钱包需要从 你的交易账户 -> CTF Exchange 合约 获得 pUSD 代币的 ERC-20 授权额度。USDC.e 的旧授权额度虽然仍在链上,但完全没用了: CLOB 不会消耗它。没有新的 pUSD 授权额度,每个订单都会返回 "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, # Magic-link 账户使用 POLY_PROXY
)
client.set_api_creds(client.create_or_derive_api_creds())
# 仅需一次: 为 CTF Exchange 合约批准 pUSD
# (帮助函数已在 py-clob-client 0.40 中加入)
client.update_balance_allowance(asset_type="COLLATERAL")
刷新 API 凭据
现有 API 密钥仍可继续使用,但如果你在 4 月 1 日之前派生过凭据,出于谨慎应当轮换它们: 现在 L1 ECDSA 签名绑定到一个包含新抵押资产地址的域。最简单的路径:
creds = client.create_or_derive_api_creds() # 幂等地重新派生
client.set_api_creds(creds)
# 持久化到你的 .env
print(creds.api_key, creds.api_secret, creds.api_passphrase)
第 5 部分:迁移后验证你的机器人
在让任何仓位管理逻辑真正使用真钱之前,先运行这个最小烟雾测试:
# 1. 在代理钱包上确认 pUSD 余额
from py_clob_client.client import ClobClient
client = ClobClient(...) # 如上
balance = client.get_balance_allowance(params={"asset_type": "COLLATERAL"})
print("pUSD 余额(原始值):", balance["balance"])
print("交易所授权额度:", balance["allowance"])
# 2. 下一个远离最优买卖价的 1 美元限价单
from py_clob_client.clob_types import OrderArgs
order = client.create_order(OrderArgs(
token_id=test_token_id,
price=0.05, # 距离市场很远
size=20, # 以 $0.05 计的 $1 名义价值
side="BUY",
))
resp = client.post_order(order)
print(resp)
# 3. 取消并确认
client.cancel(order_id=resp["orderID"])
如果这三次调用都成功,说明你的连接是正常的: SDK 使用 pUSD 进行了签名,授权额度已被识别,订单账本也一致。然后再逐步提高规模。
第 6 部分:常见错误与修复
| 错误或症状 | 原因 | 修复 |
|---|---|---|
signature verification failed | 订单是针对 USDC.e EIP-712 域签名的 | 将 py-clob-client 升级到 0.40+;重新加载 constants 模块 |
每笔订单都出现 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 属于USD 锚定稳定币按 1:1 比例的同类兑换,不会产生应税事件。你的成本基础和持有期限会延续。
不过,有两项记账事项值得注意:
- 更新你的账本架构。 任何按 USDC.e 合约筛选 Polygon 交易的税务工具、SQLite 账本或会计导出,都会悄然漏掉迁移后的每一笔交易。请将 pUSD 合约地址添加为别名。
- 为快照转换添加注释。 即使在大多数制度下它不征税,也请在记录中明确记载这次转换:金额、区块、时间戳,以及注明这是一次 1:1 稳定币迁移。如果你的司法管辖区日后进行核查,你会希望有一条清晰的审计轨迹。
以色列交易者应查阅税务指南,了解 ITA 相关申报要求;此次迁移本身不会改变标准处理方式,但合约地址变更会影响自动化申报工具。
第 9 部分:来自亲历切换的运营者的专业建议
- 在 requirements.txt 中将 py-clob-client 锁定为
>=0.40,<0.50。 0.40 这一版本线是能正确签署 pUSD 订单的最低要求;设置上限可防止未来出现破坏性变更。 - 在低成交量时段重新批准授权额度。
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 指南 - 面向 pUSD 更新后的完整 API 指南
- 充值指南 - 在应用内存入 USDC 并接收 pUSD
- 提现指南 - 将 pUSD 作为原生 USDC 提现到外部钱包
- 工具与资源 - 已更新为支持 pUSD 的第三方仪表板
- 术语表 - 本文所用每个术语的通俗英文定义
要点总结
对于已经运行 Polymarket 机器人的任何运营者来说,Polymarket pUSD 迁移都是一次低风险的一次性重构。将 py-clob-client 升级到 0.40+,重新批准 pUSD 授权额度,进行一次 1 美元的烟雾测试,然后恢复运行。底层基础设施(CTF、条件 ID、代币 ID、API 密钥)没有变化,因此影响范围很小,而且回滚也很干净。











