第 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。本指南将逐步讲解在切换期间及切换之后让机器人持续运行所需的具体代码、合约和授权变更。

你将学到:Polymarket 为何放弃 USDC.e、合约层面发生了哪些变化、确切的 py-clob-client 升级路径、如何为新抵押品重新授权额度、切换后如何核对余额,以及如何处理大多数账户如今持有的遗留 USDC.e 零头。
前置条件:你应当已经拥有一个可用的 Polymarket 账户、对 Polygon 合约有基本了解,并且有一个早于 2026 年 4 月 28 日就已存在的机器人或手动 API 工作流。如果你是今天才刚开始,那么只需安装最新的 SDK 并直接跳到第四章——你将永远不需要碰 USDC.e。
01
第一章

第一部分:三种稳定币,同一条 Polygon

在此次迁移之前,Polymarket 的 Polygon 生态中存在三种美元稳定币。搞清楚它们之间的区别,是理解 Polymarket 为何更换平台底层的第一步。

代币发行方Polygon 上的合约储备类型
USDC.ePolygon PoS 跨链桥0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174从 Ethereum 主网跨链而来
USDC(原生)Circle0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359原生,直接在 Polygon 上发行
pUSDPolymarket 抵押品合约参见 docs.polymarket.com/concepts/pusd由 USDC 1:1 支撑,链上强制执行,可随时赎回

Polymarket 最初选择 USDC.e,是因为 2020 年上线时它是 Polygon 上占主导地位的 USDC 版本。Circle 后来直接在 Polygon 上发行了原生 USDC,并释放出最终弃用跨链版本的信号。继续用 USDC.e 结算每一个市场,会让 Polymarket 暴露在跨链桥突然停止运营这一长尾风险之下。迁移到由 Polymarket 自己掌控的稳定币既解决了这个问题,又为未来共享同一记账单位的产品功能(例如永续合约保证金、金库充值、跨链凭证)打开了空间。

02
第二章

第二部分:pUSD 是什么(以及不是什么)

pUSD 是一种标准的 Polygon(chain id 137)上的 ERC-20 代币,精度为 6 位小数,与 USDC 精度相同。它仅在 USDC 通过 Polymarket 的抵押品合约被包装时铸造,可随时按 1:1 赎回为原生 USDC,转换不收取手续费(仍需支付网络 gas)。其支撑由链上强制执行:包装合约持有底层 USDC,本身即是赎回机制。没有链下托管方,没有算法锚定,也没有部分准备金。

pUSD 不是算法稳定币,不是用加密资产超额抵押的,也不带收益。如果你在 Polymarket 之外持有 pUSD,应当把它看作 Polymarket 发行的、对应原生 USDC 的一张借据——在平台内有用,可随时赎回,但长期放在外部钱包里持有并无好处。

支撑与赎回:pUSD 的支撑由其在 Polygon 上的智能合约强制执行——合约持有底层 USDC,并允许你随时按 1:1 解包回原生 USDC。它没有算法锚定,也没有部分准备金,因此储备可直接在链上验证,而非依赖链下证明。详细机制请参阅 docs.polymarket.com/concepts/pusd
03
第三章

第三部分:网页应用交易者看到了什么

如果你只通过 polymarket.com 进行交易,那么这次迁移对你来说是无感的。在 2026 年 4 月 28 日的快照区块时刻:

  • Polymarket 代理钱包中持有的所有 USDC.e 余额,都以 1:1 的比例原子化转换为 pUSD。
  • 未平仓头寸保持相同的美元价值、相同的结果赔率和相同的到期日。条件代币 ID 没有改变。
  • 以 USDC.e 计价的挂单在快照时被取消。迁移后的新订单会自动针对 pUSD 进行签名。
  • 向外部钱包提现时,从发送 USDC.e 切换为发送原生USDC(或者,按需可发送原始 pUSD——大多数用户从不需要这样做)。

整个过程无需任何签名、交易或设置变更。对你来说重要的挂单限价单应在迁移后手动重新挂出;这次取消是一次性事件。

04
第四章

第四部分:API 和机器人运营者——关键变更

如果你不采取行动,这部分内容会让你的机器人崩溃。

订单签名中改变了什么:CLOB 订单通过 EIP-712 进行签名,并将抵押品资产地址作为类型化数据(typed data)的一部分进行引用。迁移前,该地址为 USDC.e(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)
05
第五章

第 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 完成签名、授权额度被正确识别、订单台账也保持一致。之后再逐步放大规模。

谨慎安排升级时机:如果你在快照区块期间一直让机器人连续运行,那么你本地的订单簿状态很可能已经出现偏差。在任何重大场所变更之后、报出规模化挂单之前,务必先对照 REST 快照进行对账。
06
第六章

第 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
07
第七章

第 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:无需鉴权,保持不变。它们从来没有直接引用过抵押品代币。
一处小的 UI 变化:Polymarket 代理钱包视图现在以 pUSD 显示余额,并标注 1:1 USD。区块浏览器(PolygonScan、Polygonscan API)会在代理钱包的交易历史中显示 pUSD ERC-20 转账。旧的 USDC.e 转账仍可在历史中看到;你的地址在一段时间内会同时有两行 ERC-20 代币记录。
08
第八章

第 8 部分:税务与记账影响

在大多数司法管辖区,USDC.e 自动转换为 pUSD 属于同类美元锚定稳定币之间 1:1 的等价兑换,不会产生应税事件。你的成本基础和持有期会原样延续。

话虽如此,有两项记账事项值得注意:

  1. 更新你的账本结构。任何按 USDC.e 合约来筛选 Polygon 交易的税务工具、SQLite 账本或会计导出文件,都会悄无声息地漏掉迁移后的每一笔交易。把 pUSD 合约地址添加为别名。
  2. 为快照转换做好标注。尽管在大多数税制下它不应税,也要在记录中明确记下这次转换:金额、区块、时间戳,并备注这是一次 1:1 的稳定币迁移。万一你所在司法管辖区日后来查,你会希望有一份干净的审计记录。

以色列交易者应查阅税务指南了解 ITA 特定的申报要求;迁移本身不会改变标准处理方式,但合约地址的变更对自动化申报工具很关键。

09
第九章

第 9 部分:亲历切换的运营者的专业建议

  1. 在 requirements.txt 中锁定 py-clob-client-v2(>=1.0)。它能正确签署 pUSD / V2 订单;已归档的 0.34.x 系列不行。
  2. 在交易量低的时段重新授权额度。update_balance_allowance 调用是一笔 Polygon 交易;在行情快速波动时去做,无异于自找 gas 飙升。
  3. 在 4 月 28 日之前对你的 USDC.e 余额做快照。尽管转换是自动进行的,但一份可验证的转换前快照余额,是处理任何对账问题最干净利落的方式。
  4. 在快照前手动取消挂单。反正这些订单都会被平台取消;自己动手取消能给你一条干净的账本记录,而不是一行“系统取消”。
  5. 留意过时的仪表盘。第三方 Polymarket 仪表盘(PolymarketAnalytics、Polynance 等)花了两到三天才重新解析 pUSD 事件。在几天内,你机器人的本地数据库可能比公开仪表盘更超前。
  6. 按自己的节奏跨链转移 USDC.e 零头。大多数账户都有几美分的 USDC.e 残余,来自旧的手续费返还或点对点转账。用 Circle 的 CCTP 或标准的 Polygon Portal 跨链桥即可——不用着急。
  7. 在区块浏览器警报中保留旧的 USDC.e 地址。如果迁移后还有任何资金以 USDC.e 形式从你的代理账户被划走,那就是个值得立即调查的危险信号。

接下来呢?

核心要点

对于任何已经在运行 Polymarket 机器人的操作者来说,Polymarket pUSD 迁移只是一次低风险的一次性重构。切换到 py-clob-client-v2,重新授权 pUSD 额度,跑一个 $1 的冒烟测试,然后恢复运行即可。底层基础设施(CTF、condition IDs、token IDs、API 密钥)并未改变,因此涉及面很小,回滚方案也很干净利落。