我把 Polymarket 拆成了 13 份合约——发现一个市值 $354M 的隐形稳定币
从 Polygon 上的 13 份生产合约出发,拆开 Polymarket 的链上结构:藏在 UI 后面的稳定币 pUSD(市值 $354M、99.999% 由 USDC.e 背书)、让多选市场资金效率乘以 N 的 NegRiskAdapter 黑魔法、把裁判权交给 UMA 而不是 Polymarket 团队自己。每一层都有不同的信任取舍,是一个"真实在跑的工程"。
每次美国大选、特朗普的重大事件或加密圈黑天鹅,X 上都会有人贴一张 Polymarket 的赔率截图。”市场是这么定价的”——这一句往往比任何分析师的预测都更有说服力。
但很少人真正看过 Polymarket 链上长什么样。
最近我花了一个晚上,把它在 Polygon 上的所有生产合约拆了一遍——一共13 份合约,加上 UMA 预言机协议和两种 USDC 一起运作。比我想象的精巧很多,也复杂很多。
下面挑三件最有意思的事讲。
一、藏在 UI 后面的稳定币:pUSD
打开 Polymarket 网页下单,你会以为自己在用 USDC。事实上你用的是 pUSD——Polymarket 在 Polygon 上自己发的稳定币,地址 0xc011a7e1…2dfb,符号 pUSD。
它的市值已经 $354M——和很多被分析师反复讨论的小稳定币是一个量级,但几乎没在中文圈里出过圈。
为什么 Polymarket 要自己印一个稳定币?
因为 Circle 正在把 Polygon 上的桥接 USDC(USDC.e)淘汰,迁到原生 USDC。Polymarket 不想让每个用户某天醒来被迫操心两种 USDC 的差别,所以提前做了一层封装:
pUSD 在合约层同时认 native USDC 和 USDC.e。用户存任何一种都换出 pUSD;提现时由 Polymarket 决定还哪一种。中间的复杂度全部由 Polymarket 自己背。
链上看,pUSD 设计很干净:用 Solady 的 OwnableRoles 做角色分离——MINTER_ROLE 管铸赎,WRAPPER_ROLE 管包装解包,储备地址(VAULT)独立持仓。是一个”治理方掌权但权限拆分清楚”的标准稳定币模式。
但有一件事必须明说:pUSD 合约本身是 UUPS 可升级 proxy——owner(一个 Polymarket 控制的合约)随时能替换整个实现,也能加新的 minter 把储备绕过 VAULT 抽走。所以这套信任模型不是 DAI 那种”链上去中心化稳定币”,更接近 USDC / USDT——中心化发行方做事比较克制、但你不得不信他不作恶。这是当前所有大稳定币的事实结构,pUSD 没例外。
承认完这点之后,再讲它的工程亮点就诚实多了——
有意思的是,这套”双 USDC backing”的能力到今天为止其实还没被用上。我现场读了 VAULT 储备地址 0xc417…9db1:
- USDC.e 余额:$353,702,803.91
- native USDC 余额:$13.42
也就是说,99.999% 都是 USDC.e。Polymarket 把架构准备好了,但还没动一寸——这是一个非常老练的工程姿态:在用户还没痛之前先把基础设施搭好。等哪天 Circle 真把 USDC.e 完全关停,他们能一夜之间把储备无缝迁到原生 USDC,前端体验完全无感。
这种”先把基础设施铺上”的思路在 Web2 SaaS 里叫 infrastructure ahead of demand,在加密圈里很少见——大多数协议是把架构焊死、等问题来了再 fork 一份。Polymarket 这种 “工程师的耐心” 配合 $354M 流通量,是 Web3 里相对罕见的成熟做派。
二、多选事件的资本效率黑魔法
普通的”是/否”二元市场(”特朗普会赢吗?”)很简单:买 YES 或 NO,对应付 1 USDC,赢家拿 1 USDC。
但”多选一”的市场(比如美国总统初选 10 个候选人选 1)就麻烦了——传统做法是拆成 10 个独立的”是/否”市场,做市商必须为每个市场单独压抵押。1 块钱不能同时为 10 个市场提供流动性,资金效率只有 1/10。
Polymarket 的解法是一个叫 NegRiskAdapter 的合约。它利用一个数学事实:
N 个候选人里只能有 1 个赢,所以另外 N-1 个必然输。
合约提供一个叫 convertPositions 的函数:你拿出 K 个候选人的”输”票(NO token),就能换回 (K-1) 个 USDC + 剩下候选人的”赢”票(YES token)。这相当于把多个互斥的不可能性压缩成一笔自由资金。
效果是:做市商一份抵押就能为 N 个候选人提供流动性,资金效率乘以 N。
代价是合约里硬编码了一条不变量——同一个市场里,第二个尝试报”赢”的问题会被合约直接拒绝。这条规则没有 admin 能改,写死在源码 _reportOutcome 函数里。
这种”用代码硬约束保证经济模型自洽”的设计,是链上协议比传统金融真正能赢的地方之一。软件不需要被信任,它需要被验证——而验证就是去读那 50 行 Solidity 代码。
三、Polymarket 不是裁判员
一个市场的结果由谁来宣判?很多人下意识以为是 Polymarket 团队。其实不是。
每个 Polymarket 市场创建时,会同时在 UMA 的乐观预言机(Optimistic Oracle)上挂一个”问题”。流程是:
- 市场到期 → 任何人可以提案结果(押一笔 USDC 作保证金)
- 异议窗口(通常 2 小时左右,由市场创建者自选)里,其他人可以反对这个提案
- 没异议就生效;有异议升级到 UMA 全网持币人投票仲裁——这一步才用到 UMA token
正常情况下,Polymarket 自己只是 UMA 预言机的用户,不是裁判员。已成交头寸在链上独立存在——即使 Polymarket 公司明天被监管要求关闭,CTF 账本不会被锁,用户仍然可以自己调 redeemPositions 把赢的份额换回稳定币(前提是有人帮你付 Polygon 上的 gas)。
但合约里给 admin 留了一个紧急 override 通道——可以强制写任意结果。这个通道硬编码了 2 天的安全等待期:admin 启动紧急程序后,必须等满 48 小时才能真正写入。给用户留出抗议、转移头寸、或者社区围攻的时间。
所以严格来说,Polymarket 不是日常裁判员,但在紧急情况下仍保留最终改判权——只不过这权力被一个写死在源码里的 2 天冷静期限制住了。
EMERGENCY_SAFETY_PERIOD = 172800 秒——这个常量是整个 Polymarket 协议里给用户兜底最重要的一行代码。
一个”真实工程”的样子
Polymarket 这套设计最让我有感触的是:它不追求”全链上、无信任”的乌托邦,而是在每一层做不同的信任权衡:
- 撮合层:链下中心化(要 UX 流畅)
- 资产托管:链上代理钱包(每个用户一个智能合约钱包)
- 基础账本:完全去中心化(Gnosis 的 ConditionalTokens,没人能升级)
- 预言机:委托给独立社区(UMA)
- 治理参数:multisig 中心化,但带 2 天硬冷静期
不是”哪种好”的二元选择,而是”哪一层适合哪种信任”。
这套合约今天每天结算几千万美金的预测仓位,承载着对美国大选、AI 模型发布、地缘事件这些事情的全球性共识定价。它不是论文里的玩具——它是真实在跑的工程。
下次再看到 X 上有人贴 Polymarket 截图,可以记一件事:你看到的那个百分数,背后是 13 份 Solidity 合约 + UMA 预言机网络 + $354M 稳定币储备共同跑出来的。
比”AI 觉得”或者”模型预测”硬核得多。
这篇是我用自己做的工具 Smarts(smarts.md)一个晚上拆出来的——它把已验证的智能合约变成可被人和 AI 都读得懂的实时文档。Polymarket 是它适配的第一个”非 DeFi”协议。
轉發此貼文?
與您的關注者分享。
回覆