Polymarket 技术剖析

Polymarket 是区块链上最大、最受欢迎的预测市场之一。它允许用户对各种事件的结果下注:体育、政治、文化等等。本文对其技术实现进行了深入的解读。

Polymarket 技术剖析
一键发币: SOL | BNB | ETH | BASE | Blast | ARB | OP | POLYGON | AVAX | FTM | OK

Polymarket 是区块链上最大、最受欢迎的预测市场之一。它允许用户对各种事件的结果下注:体育、政治、文化等等。

用户资产存储在非托管钱包中。这意味着协议不存储用户的私钥,也无法访问他们的资产。

1、代理钱包

当用户首次使用 Polymarket 时,他们需要创建一个内部钱包。他们有两个选择:

  • 使用他们现有的 EOA(外部拥有账户)。支持 Metamask、Coinbase 和 WalletConnect。
  • 通过一种名为 Magic Link 的技术使用电子邮件地址。输入你的电子邮件并收到一个特殊链接以访问该服务。

钱包是通过专门的智能合约工厂创建的,并作为 1/1 多重签名运行,这意味着它完全由用户控制。

使用内部钱包使 Polymarket 能够提供更好的用户体验,例如一次启用多个交易。

2、预测市场

预测市场始于预测。预测是构建用户场景的基础。在预测市场的背景下,这种说法被称为条件。它可以是一个问题、陈述、对预期结果的描述、事件、预测等。我们可以将其视为任何形式的断言,声称未来是真实的。

预测示例:

  • 9 月将发生 7.0 级地震。
  • GPT-5 会在 2024 年发布吗?
  • 比伯的宝宝:男孩还是女孩?
  • 2024 年票房最高的电影?
  • 以太坊会在 2024 年达到 1 万美元吗?

每个预测都有一个验证截止日期:预测是否成真。Polymarket 中有一个特殊的预言机负责确定每个预测的结果。

预言机的作用是什么?Polymarket 使用区块链技术构建,预言机用于将数据传输到网络。预言机的设计使得其结果对于任何预测都是可信的。

通常,一个预测有多种可能的结果。预言机将在这些结果中确定预测的结果。

带有结果的预测示例:

GPT-5 会在 2024 年发布吗?
2024 年票房最高的电影是什么?
  • 头脑特工队 2
  • 其他
  • 死侍 3
  • 小丑 2
  • 卑鄙的我 4
  • 沙丘:第二部分
  • 弗瑞奥萨:疯狂的麦克斯传奇

典型的预测市场可以用以下结构来描述:

在第一阶段,创建一个市场,并添加一个具有固定寿命的新预测(条件)。在此期间,用户可以选择他们认为最有可能的结果。在最后阶段,预言机确定哪组用户是正确的,哪组是错误的。

选择正确结果的用户将获得奖励。该奖励由所有参与者的贡献形成。每个用户通过投票选出特定结果,贡献了预测市场中使用的一定数量的资产。因此,选择错误的用户将一无所获。

这可能会让人得出结论,预测市场本质上就是赌博。是也不是。Vitalik 在他的博客中倡导了预测市场背后的关键思想。他认为,此类服务可以作为预测或分析各种事件发生概率的中立来源。基于这些数据,可以做出明智的管理决策。

3、预测有多准确?

一般来说,有效市场假说支持预测市场可以相当准确的观点。根据这一假设,任何资产的价格都与其真实价值直接对应,因为所有可用信息都已计入价格。

一个简单的例子:

假设投资者知道某种商品的市场价值。只要它有利可图,他们就会继续购买。逐渐地,需求会增加,商品的价格也会随之上涨,直到其价格达到购买不再有利可图的水平。

研究表明,预测市场平均而言比社会调查和专家意见准确得多。许多研究人员已经研究了此类市场的准确性,涉及各个领域,包括测试理论和实验室数据、医疗保健和管理决策。

预测市场的参与者分析各种各样的信息:新闻、体育、创新、事件、发展趋势、环境问题、政治等等。他们的经济激励确保他们对市场价格(或概率)的影响将以如此精确的方式调整,以反映预测的真实性。

因此,预测市场被认为是实时事件概率的最佳来源之一。Polymarket 就是这样一种服务,最近越来越受到关注。

4、Polymarket 是如何工作的?一个简单的解释

为了了解这项服务的工作原理,让我们在 Polymarket 上打开一个随机事件并浏览它的界面。

在屏幕截图中,事件标题“比特币 8 月 30 日超过 60,000 美元?”以及可能的结果被突出显示。在我们的例子中,只有两种结果:“是”和“否”。但是,重要的是要记住,结果可能不止两种。让我们看看下面的截图,以更详细地了解界面。

事件标题下方直接显示多个结果。右侧面板显示最受欢迎的结果——当前大多数用户选择的结果。这允许快速访问此结果选项。

购买按钮是什么意思?

在内部,每个结果都由基于 ERC-1155 标准的特殊共享代币表示。购买按钮用于购买所选结果的代币。作为交换,用户支付基础资产——USDC。

购买过程可以看作是一种投票形式。用户通过用真实资产支持他们的选择来“投票”其中一个结果,这确保了决策的责任感。相应的出售流程允许用户撤销他们的立场。

每次投票都代表用户对特定事件的立场。可以使用各种术语来描述购买过程:“投票”、“赌注”、“立场”或“民意调查”、“购买”。用户可以选择他们觉得最舒服的术语,但所有这些术语都表明用户对事件的看法。

如何理解结果的价格?

“是”结果的价格为 98.8 美分,表示“比特币在 9 月 13 日超过 55,000 美元?”事件发生的可能性为 98%。因此,2.3 美分的价格表示比特币低于 55,000 美元的概率为 2%。

本质上,价格反映了发生这种结果的可能性。根据用户的说法,价格越高,事件发生的感知概率就越大。如果用户认为比特币很有可能超过 55,000 美元,他们可以以每个 98.8 美分的价格购买“是”代币。

如果用户是正确的,比特币确实超过了 55,000 美元,那么购买的每个“是”代币将价值 1 美元。因此,用户将获得每枚代币 1.2 美分的利润。同时,任何持有“否”代币的用户都将失去他们的投资,因为这些代币将变得一文不值。

值得注意的是,用户不需要一直持有他们的头寸到最后;他们可以随时以当前市场价格出售他们的股份。

5、技术分析

现在我们将深入研究协议各个方面的技术分析。系好安全带!🤓

5.1 结果代币化

我们已经确定 Polymarket 上的所有事件结果都是代币化的。让我们回顾一下我们已经知道的内容:

  • 这样的代币可以称为股份(share)代币
  • 股份代币是用基础资产购买的,因此它们是完全抵押的
  • 股份代币可以卖回基础资产

现在来了解一些新信息。共享代币基于 Gnosis 条件代币框架 (CTF) 实现 ERC-1155,该框架已证明其有效性并已通过多种协议测试。

CTF 最多可支持每个事件 256 个结果。

每个预测在 CTF 中都有标识。为此,它被分配了一个 conditionalId。conditionalId 是唯一的,因为它是三个参数的哈希值:

  • oracle。将确定事件结果的 oracle 的地址。这确保只有指定的 oracle 才能解决预测。
  • questionId。预测标识符,由预测的创建者设置。这可以是一个简单的计数器,每个新预测都会增加一,也可以是使用文本和其他数据的哈希值的更复杂的方案。
  • outcomeSlotCount。预测的可能结果数。

下图直观地展示了 CTF(条件代币框架)的工作原理。

用户在下注时提供基础资产并收到股份代币,在 CTF 中称为条件(conditional)代币。在预言机确定预测后,用户可以根据预测结果从 CTF 领取奖励。

当用户收到条件代币时,他们被视为已采取特定立场。在 CTF 中,立场代表每个预测的一组可能结果组合。CTF 为每个预测生成这些立场,每个立场对应于用户可以选择的可能结果组合之一。

例如:

2024 年票房最高的电影?
  • 头脑特工队 2
  • 其他
  • 死侍 3
  • 小丑 2
  • 神偷奶爸 4
  • 沙丘:第二部
  • 疯狂的麦克斯传奇

用户可以投票认为《头脑特工队 2》将成为票房最高的电影,而《沙丘:第二部》绝对不会成为 2024 年票房最高的电影。这种预测组合将被视为他们的立场。

CTF 提供了两种有趣的立场处理机制:拆分(splitting)和合并(merging)。拆分机制允许将单个头寸拆分为多个单独的结果,而合并机制将不同的结果合并为一个头寸。这些机制使用户能够灵活地管理自己的头寸。

在我的观点中,值得注意的是,CTF 为 Polymarket 提供了四个重要优势:

  • 股份代币用于确认用户对特定预测结果的投票。
  • 它实现了一个灵活的系统,用于将用户的投票组合成各种位置。
  • 根据预言机的信号,结果计算的责任委托给 CTF。
  • 根据获胜结果的股份代币数量计算奖励。

特别值得注意的是,CTF 允许组织相关事件,其中可以组合用户的位置。但是,我在 Polymarket 中没有找到这样的例子。

我真的很喜欢 CTF 的概念,尽管它对我来说相当复杂,无法完全理解。你可以在官方文档中了解更多信息。

5.2 订单

现在,让我们继续讨论 Polymarket 最神秘的方面之一——订单。

要进行购买,Polymarket 界面提供三种类型的订单:

  • 市场——以当前市场价格立即购买。
  • 限价 — 延迟订单,允许你指定达到该价格后进行购买的价格。
  • AMM — 根据池中的储备金额,以自动确定的价格购买,类似于去中心化交易所。

目前,AMM 订单功能似乎不起作用。我找不到允许通过 AMM 购买的事件。在搜索协议的 Discord 后,我发现了一位用户的相对较新的评论,这对这种情况有所启​​发。请参见下面的屏幕截图。

根据协议的文档,AMM 使用了作为条件代币框架的一部分开发的智能合约。因此,AMM 用于确定股份代币的购买价格。

这种基本机制需要流动性来确保稳定的定价并降低波动性。流动性提供者需要经济激励,从每次购买中获得奖励,以保持系统运行。

不幸的是,我是 Polymarket 的新手,但我猜最初该协议完全基于 CTF,使用 AMM 来确定价格。随着时间的推移,该协议开发了一种带有订单簿的混合解决方案,另外两种类型的订单(限价和市价)开始在定制解决方案上工作。此解决方案称为 CLOB(中央限价订单簿)或 BLOB(二进制限价订单簿)。

5.3 CLOB 和 BLOB

CLOB(中央限价订单簿)或 BLOB(二元限价订单簿)是一种代表混合分散式订单簿的系统。在此系统中,专门的操作员处理订单匹配并启动智能合约的执行。

无需过多介绍,该系统可以描述如下:

用户创建要执行的订单,可以是限价订单或市价订单。操作员匹配用户订单并在智能合约上启动它们的执行。创建订单意味着根据 EIP-712 标准创建使用用户私钥签名的数据结构。由于订单在执行之前存储在链下,因此可以快速且免费地调整订单条款甚至完全取消。

对于那些想要了解更多细节的人来说,与订单簿和订单匹配相关的所有内容只能通过 API 访问。为了方便起见,Polymarket 提供了两个客户端:一个用于 JavaScript,一个用于 Python

然而,Exchange.sol 智能合约是公开的,负责在 CTF 中创建用户头寸。它还允许管理用户头寸并在它们之间转移资产,确保协议内的安全性和透明度。

智能合约已经过审计。审计报告附在存储库中。

5.4 智能合约

Exchange 智能合约实际上有一个更具体的名称,CTFExchange.sol。它不是很大,包含大约 100 行代码,但它确实有大量的依赖项。

其中大多数是实现有限功能的小型智能合约:

  • BaseExchange.sol。实现接收 ERC-1155 代币能力的抽象智能合约。还负责防止重入攻击。
  • Auth.sol。角色管理器。定义验证函数和修饰符以设置角色:CTFExchange.sol 的管理员和操作员。
  • Assets.sol。定义两种资产:基础资产(抵押品)和 CTF 地址。
  • Fees.sol。定义协议费用。
  • Pausable.sol。定义暂停智能合约操作的能力。协议同意在出现不可预见的情况时采用的一种集中化形式。仅适用于管理员角色。
  • AssetOperation.sol。定义基础资产和 CTF 的操作。包括头寸的转移、拆分和合并。
  • Signature.sol。定义用于验证订单时使用的用户签名的代码。
  • Hashing.sol。定义订单参数的哈希值,用于签名验证。
  • Registry.sol。定义在系统中为预测注册预测和注册代币的过程。

重要!与实际执行订单相关的所有内容都在智能合约 Trading.sol 中实现。

浏览代码并研究智能合约也很简单。结构通过函数明确定义了入口点:

  • fillOrder() — 在创建订单的用户和用户选择的制造商(另一个订单)之间执行订单。
  • fillOrders() — 与 fillOrder() 相同,但用于订单列表。
  • matchOrders() — 操作员选择两个不同的订单并执行它们。

以上所有函数只能由操作员调用。

无论调用如何进入智能合约,结果始终相同:两个用户将根据他们的订单交换代币。

5.5 协议费用

费用是根据输出的资产收取的。对于二元预测,费用是对称的,这意味着:如果用户以 0.99 美元的价格出售代币,他们将支付与以 0.01 美元的价格购买代币的买家相同的费用。

计算公式很简单,详见文档

5.6 流动性奖励计划

该计划的总体目标是激励市场流动性。

我们知道,要使基于订单簿的交易所发挥作用,需要有人创建限价订单。限价订单提供允许立即执行市场订单的流动性。创建限价订单的用户称为做市商。限价订单与市场价格“越紧密”,市场订单的执行速度就越快,数量也越大,这对最终用户来说无疑是有利的。此外,流动性越多,操纵市场就越困难。

为了确保足够的流动性,Polymarket 制定了一个特殊的奖励计划来激励用户创建限价订单。

限价订单越接近平均市场价格,奖励就越高。奖励每天在 UTC 午夜自动支付。

该系统以 dYdX 为模型。原始 dYdX 程序在此处描述。Polymarket 的原始程序可在此处获得。

5.7 Oracle

Oracle 用于提供预测结果 — 无论事件是否发生。Oracle 是协议的最重要组件之一,但它是由第三方服务而不是 Polymarket 团队实现的。这个 Oracle 称为 UMA

UMA 是一个去中心化的 Oracle,专门用于在区块链上记录任何类型的数据,但无法验证的数据除外。Oracle 被认为是乐观的,因为除非有争议,否则数据被认为是正确的。UMA 有自己的仲裁系统来解决争议,其中仲裁员是真实的人 — UMA 生态系统的参与者,特别是 UMA 代币持有者。这个系统称为 DVM(数据验证机制)。

以下多步骤过程用于确定预测结果并将其记录在区块链上:

  • 声明。预测与奖励一起添加到 Oracle 中。任何成功质疑预测结果的人都可以领取奖励。
  • 挑战期。在此期间,任何人都可以质疑预测结果。如果没有人提出质疑,时间到期,则认为预测结果已准备好进行最终结算,这表明其准确性。
  • 争议。任何协议参与者都可以对结果提出异议,无论是为了索取奖励还是为了公平(开玩笑)。实际上,这种情况很少发生,因为博弈论表明大多数参与者的行为都是诚实的。
  • 投票。如果发起争议,UMA 代币持有者将投票解决争议。UMA 是用于投票的协议代币,参与者因参与投票而获得奖励。
  • 结算。最后阶段是结算过程,即在区块链上实际记录数据。在此之后,可以认为预测结果可靠准确。

整个协议基于深思熟虑的博弈论,任何参与者参与恶意行为在经济上都是不利的。

示例:

  • 提交预测结果进行投票的参与者为智能合约提供抵押品。如果他们的结果有争议,他们将失去抵押品;否则,他们将取回抵押品并获得奖励。这产生了强烈的激励,促使他们只提交准确的结果。
  • 对预测结果提出异议的参与者也会提供抵押品。如果他们是正确的,他们会拿回抵押品并获得奖励;否则,他们会失去抵押品。这激励参与者只质疑那些他们确信不正确的结果。
  • 解决争议的参与者。他们必须质押 UMA 代币,并将因解决争议而获得奖励。如果他们投票错误或根本没有投票,他们将失去部分质押余额;否则,他们会获得奖励。没有办法偷懒。

特别值得注意的是争议中的投票过程使用提交/披露方案分为两个阶段:

  • 提交。参与者通过向智能合约提交投票的哈希值来秘密投票。这意味着没有人可以通过查看哈希值来判断参与者的投票方式。
  • 披露。投票阶段结束后,参与者披露他们的投票。智能合约会验证他们是否与之前提交的哈希值匹配。

这种两阶段投票过程可防止选民之间串通抹黑预言机或攻击依赖预测结果的服务。

预测结果可以多次受到质疑。在这种情况下,UMA 允许在之前的争议结束后重新启动决策过程。

争议发起过程如下所示:

6、结束语

看似简单的投注和预测系统实际上由三个主要模块组成,每个模块由不同的协议和团队开发:

  • CTF(条件代币框架):管理预测中的组合、定位和用户份额。非常感谢 Gnosis 创建了如此灵活的框架,非常适合预测市场。
  • CLOB(中央限价订单簿):Polymarket 用于实施订单簿和限价订单的内部解决方案。CLOB 使用户能够有效地参与生态系统并帮助聚集流动性。
  • UMA:具有独特争议解决仲裁系统的去中心化预言机。UMA 是该系统的核心,通过区块链传输预测结果。

该系统可以看作是一个投注系统,但当我开始深入研究 Polymarket 时,我没想到必须将我的研究分解为三个不同的协议,也没想到要花这么多时间。从技术上讲,这个协议令人印象深刻且引人入胜,成功地结合了来自不同项目的技术,对开发人员特别有吸引力。

我的最终意见:我真心希望看到这个协议有用,正如 Vitalik Buterin 所建议的那样。希望它成为预测、决策和分析的工具。然而,尽管有这种潜力,但该协议仍然最常与选举有关,而选举对预测的需求激增。


原文链接:Polymarket Explained: How Blockchain Prediction Markets Are Shaping the Future of Forecasting

DefiPlot翻译整理,转载请标明出处

通过 NowPayments 打赏