PMWallets
EN

从 Polygon 链上读 Polymarket:合约与事件

Polymarket 的每一笔交易、拆分、合并和赎回,都是 Polygon 上的一条日志。这里是一张地图:哪些合约要紧、它们发出哪些事件,以及从原始日志到正确数字之间的那些坑。

合约

仓位以 ERC-1155 代币的形式存在条件代币(CTF)合约里。订单在 Polymarket 的订单簿上链下撮合,再由交易所合约在链上结算:二元市场一个、NegRisk 多结果市场一个,各有旧版和 v2 两代。NegRisk 适配器负责多结果事件的转换和生命周期操作。下面是 PMWallets 摄取的合约地址。

text
# Polygon(chain id 137)—— Polymarket 交易背后的合约
CTF (Conditional Tokens)        0x4d97dcd97ec945f40cf65f87097ace5ea0476045
CTF Exchange (legacy)           0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e
NegRisk CTF Exchange (legacy)   0xc5d563a36ae78145c45a50134d48a1215220f80a
CTF Exchange (v2)               0xe111180000d2663c0091e4f400237545b87b996b
NegRisk CTF Exchange (v2)       0xe2222d279d744050d28e00520010520000310f59
NegRisk Adapter                 0xd91e80cf2e7be2e162c6513ced06f1dd0da35296

# 值得读的事件
exchanges   OrderFilled, OrdersMatched, TokenRegistered (+ FeeCharged on v2)
CTF         TransferSingle, TransferBatch, PositionSplit, PositionsMerge,
            PayoutRedemption, ConditionPreparation, ConditionResolution
adapter     PositionSplit, PositionsMerge, PositionsConverted, PayoutRedemption,
            MarketPrepared, QuestionPrepared, OutcomeReported

交易:OrderFilled 与 OrdersMatched

每次撮合会为被成交的订单发出 OrderFilled 事件,外加一条概括吃单方的 OrdersMatched。OrderFilled 写明挂单方、吃单方以及两边的数量;成交的是哪个代币、方向如何,要看资产 ID(抵押品是资产 0),v2 则有明确的方向字段。旧版和 v2 交易所的 OrderFilled 格式不同,v2 还会为收取的手续费单独发出一条 FeeCharged 事件。

仓位:转账、拆分、合并、赎回

钱包份额的每一次变化,都是 CTF 合约上的一条 ERC-1155 TransferSingle 或 TransferBatch —— 包括交易、拆分和赎回引起的那些。PositionSplit、PositionsMerge 和 PayoutRedemption 说明抵押品为什么流动;ConditionResolution 给出每个结果的赔付。由转账算出的钱包余额是真值,其他所有数字都必须与它对得上。

那些坑

代理钱包:成交写的是智能合约钱包,不是背后的交易者。NegRisk:转换经由 Polymarket 的合约路由,受益人不是事件里的那个地址。Token ID:日志里只有 token ID,映射到市场需要交易所的 TokenRegistered 事件或 CTF 的条件数据,市场名称则来自 Polymarket 的 Gamma API。链重组:Polygon 大约每 1.5 秒出一个块,链头不时会重组,所以从 WebSocket 收到的新块必须先对照主链核对才能相信。完整性:RPC 服务商对一次 getLogs 能返回的日志数有上限,被悄悄截断的结果看起来就像一个安静的区块。

或者交给别人来扛

PMWallets 把这些全部按块摄取进自己的账本,把结果发布成榜单、交易者画像、实时成交推送和按天的交易历史文件。如果你自己需要原始历史,交易历史导出会把一个钱包的每笔成交以 CSV 给你,读自同样的日志。

常见问题

Polymarket 在哪个合约上交易?

交易在 Polygon 上 Polymarket 的 CTF 交易所(二元市场)或 NegRisk CTF 交易所(多结果市场)结算,两者各有旧版和 v2 部署;份额本身是条件代币合约里的 ERC-1155 代币。

不用 API key 能拿到 Polymarket 的成交数据吗?

能。每笔成交都是 Polygon 上公开的 OrderFilled 日志,任何 Polygon 节点都能读到;Polymarket 公开的 Data API 也不需要 key 就能返回一个钱包的成交。难的是解码、归属和保证不漏。

为什么两个 Polymarket 数据源对同一个钱包的成交说法不一?

通常是因为一个按智能合约钱包算、另一个按背后的交易者算,一个包含拆分、合并和转换、另一个只算成交,或者两者覆盖的时间范围不同。

相关页面