全部语种
分享
按:2024年美国大选最大的加密赢家之一是预测市场Polymarket。Polymarket成功预测特朗普全面赢得美国大选,其成交量超过30亿美元。2024年11月14日,大选8天后,FBI突袭了Polymarket CEO Coplan位于纽约的住所,并要求交出电子设备。匿名消息表示,FBI可能怀疑该平台在选举市场中进行操控。有没有人能操控Polymarket,涉及到Polymarket到底怎么工运作的机制。solidity开发者Pavel Naydanov在Hackernoon发文“Polymarket Explained"详解了Polymarket的工作机制。金色财经xiaozou编译了此文,如下:
Polymarket是最大、最受欢迎的区块链预测市场之一。它支持用户对各种事件结果进行下注,包括体育、政治、文化等等。
用户资产存储在非托管钱包中。该协议并不存储用户的私钥,也无法访问用户资产。
用户在第一次使用Polymarket时,他们需要创建一个内部钱包。通常有两种选择:
● 使用他们现有的EOA(外部账户),如Metamask、Coinbase或WalletConnect。
● 通过一种叫做Magic Link的技术使用电子邮件地址。输入电子邮件并接收一个访问该服务的特定链接。
这个内部钱包是通过专门的智能合约工厂创建的,具有1/1多重签名功能,这意味着该钱包完全由用户控制。
使用内部钱包可以让Polymarket提供更好的用户体验,例如一次性启用多个交易。
预测市场始于预测。预测是构建用户场景的基础。在预测市场中,这种陈述被称为条件。它可以是一个问题、陈述、对预期结果、事件、预测等的描述。我们可以把它看作是任何形式的对未来事实的断言。
预测的例子有:
九月份将发生7.0级地震。
GPT-5会在2024年发布吗?
Bieber的孩子会是男孩还是女孩?
2024年票房最高的电影是哪部?
ETH价格会在2024年达到1万美元吗?
每个预测都有一个验证截止日期:无论预测是否成真。Polymarket有一个特殊的oracle负责确定每个预测的结果
Oracle的作用是什么?Polymarket采用区块链技术构建,使用oracle将数据传输到网络。Oracle的设计宗旨是让其结果对于任何一个预测来说都是可信的。
通常,一个预测有多种可能性结果。Oracle将在这些结果中决定预测结果。
结果预测示例如下:
GPT-5会在2024年发布吗?
是的
不会
2024年票房最高的电影是哪部?
头脑特工队2
其他
死侍3
小丑2
卑鄙的我4
沙丘2
疯狂的麦克斯:狂暴女神
一个典型的预测市场结构如下:
第一步是创建一个市场,并添加一个具有一定期限的新预测(条件)。在此期间,用户可以选择他们认为最有可能的结果。最后一步是,oracle来确定哪组用户是正确的,哪组是错误的。
选择正确结果的用户将获得奖励,而奖励来源于所有参与者的贡献。每个用户通过对特定结果进行投票,贡献了一定数量的资产供预测市场使用。所以,选择错误的用户什么也得不到。
这可能会让人得出这样的结论:预测市场本质上就是赌博。是也不是。预测市场背后的主要理念是由Vitalik在他的博客中提出的。他认为,这些服务可以作为预测或分析各种事件发生概率的中立来源。人们可以基于这些数据做出明智的管理决策。
一般来说,预测市场可以相当准确这一观点得到了有效市场假说(Efficient Market Hypothesis)的支持。根据这一假设,任何资产的价格都直接对应于其真实价值,因为所有可用信息都已经包含在价格中。
举一个简单的例子:
假设投资者知道一种商品的市场价值。只要它是有利可图的,他们就会继续购买。渐渐地,需求会增加,商品的价格也会随之增加,直到该商品的价格达到让购买不再有利可图的水平。
研究表明,平均而言,预测市场比社会调查和专家意见要准确得多。预测市场的准确性已经被各领域的众多研究人员研究过,包括测试理论和实验室数据、医疗保健和管理决策。
预测市场的参与者广泛分析各种各样的信息:新闻、体育、创新、事件、发展趋势、环境问题、政治等等。他们的经济动机保证了他们对市场价格(或概率)的影响会进行精确调整以反映预测的真实性。
因此,预测市场被认为是实时事件概率的最佳源之一。Polymarket就是这样一种服务,于近期吸引了越来越多的关注。
Polymarket是如何工作的?下面我们来简单看一下。
为了理解Polymarket服务是如何工作的,首先我们在Polymarket上点开一个随机事件浏览其界面。
在上图中,突出显示了事件标题“8月30日比特币会超过6万美元吗?”以及可能的结果。在这个例子中,只有两种结果:“是”和“否”。然而,重要的是要切记,还可能有两种以上的结果。让我们来看一下下面的截图,以便更详细地了解该界面。
多个结果将直接显示在事件标题下方。右边的面板显示了最受欢迎的结果,也就是目前大多数用户选择的结果。这样就可以快速访问此结果选项了。
“Buy”按钮是什么意思?
在底层,每个结果都由基于ERC-1155标准的具体份额的代币表示的。Buy按钮用于针对所选结果购买代币,而用户则需要支付基础资产USDC。
购买过程可以看作是一种投票形式。用户通过使用实际资产来支持他们的选择来对其中某一结果进行投票,这确保了决策的可问责性。相应的卖出(sell)过程则让用户可以反向持仓。
每次投票都代表了用户对特定事件的立场。可以使用各种话语来描述购买过程:“投票”、“打赌”、“立场”、“购买”等等。用户可以选择他们觉得最舒服的话语,但所有这些都表明了用户对某事件的看法。
“Yes”结果的价格为98.8美分,这表明“比特币在9月13日超过5.5美元”这一事件发生的概率为98%。因此,2.3美分的价格则表示比特币低于5.5万美元的概率为2%。
从本质上讲,价格反映了某结果发生的概率。用户的说法就是,价格越高,事件发生的可能性就越大。如果用户认为比特币很有可能超过5.5万美元,他们可以以98.8美分的价格购买“Yes”代币。
如果用户是正确的,比特币确实超过了5.5万美元,那么买入的每个“Yes”代币将价值1美元。因此,用户将获得每代币1.2美分的利润。与此同时,所有持有“No”代币的用户都将面临投资损失,因为这些代币将变得一文不值。
值得注意的是,用户不需要持仓到最后;他们可以在任何时候以当前市场价格出售他们的shares。
现在我们来全方位深入研究协议技术。准备好了吗?
(1)结果代币化
我们已经明确Polymarket上的所有事件结果都被代币化了。让我们回顾一下我们已经知道的:
● 这种代币可以称为share代币。
● Share代币是用基础资产购买的,因此它们是完全抵押的。
● Share代币可以卖出兑换回基础资产。
现在我们来看一些新信息。Share代币基于Gnosis条件代币框架(CTF)部署ERC-1155,该框架已经证明了其有效性,并已通过多个协议的测试。
CTF每个事件最多可以支持256个结果。
各预测在CTF中被识别。为此,它被分配了一个conditionalId。因为以下三个参数的哈希值,conditionalId是唯一的:
● oracle:决定事件结果的oracle地址。这确保了只有指定的oracle可以解决预测。
● questionId:预测标识符,由预测创建者设置。这可以是一个简单的计数器,其中每个新预测的增量为1,也可以是使用文本和其他数据哈希计算的更复杂的方案。
● outcomeSlotCount:预测可能结果的数量。
下图描绘了CTF(条件代币框架)的工作原理。
用户在下注时提供基础资产并接收share代币,这在CTF中称为条件代币。在oracle完成预测后,用户可以根据预测结果从CTF中获得奖励。
当用户接收到一个条件代币时,他们被认为已经采取了特定的position(立场)。在CTF中,position表示各预测的一组可能性结果组合。CTF为每个预测生成这些position,每个position对应一个用户可选的结果组合。
例如:
2024年票房最高的电影是哪部?
● 头脑特工队2
● 其他
● 死侍3
● 小丑2
● 卑鄙的我4
● 沙丘2
● 疯狂的麦克斯:狂暴女神
用户可以投票选出《头脑特工队2》将成为票房最高的电影,而《沙丘2》肯定不会成为2024年票房最高的电影。这种预测组合将被视为他们的position。
CTF提供了两种有趣的position处理机制:拆分和合并。拆分机制允许将单个position拆分为多个独立结果,而合并机制则将不同的结果合并为一个position。这些机制为用户的头寸管理增加了灵活性。
在我看来,CTF为Polymarket提供了四个重要优势:
● Share代币用于确认用户对特定预测结果的投票。
● 它实现了一个灵活的系统,可以将用户的投票组合为各种position。
● 根据oracle的信号,结果计算责任被委托给CTF。
● 根据获胜结果的share代币金额计算奖励。
尤其需要注意的是,CTF可以组织相关事件,组合用户的position。然而,我并没有在Polymarket中找到这样的例子。
我真的很喜欢CTF概念,尽管对我来说这个概念很复杂,我并不能完全理解。
(2)订单
现在,让我们来看Polymarket最神秘的一面——订单。
针对购买,Polymarket界面提供三种类型的订单:
● 市价单——以当前市场价立即购买。
● 限价单——延迟订单可以让用户指定一个价格,一旦达到该价格,将启动购买。
● AMM订单——基于池中的储备金数量以自动确定的价格进行购买,类似于去中心化交易所。
目前,AMM订单功能似乎不好用。我没有找到一个允许通过AMM购买的事件。在搜索了该协议的Discord后,我发现了一位用户最近发布的评论,这让我对这一情况有了一些了解。请看下面的截图。
根据协议的文档,AMM使用了作为条件代币框架组件开发的智能合约。因此,AMM被用来确定share代币的购买价格。
这一基本机制具有流动性要求,以确保价格稳定减少波动。流动性提供者需要一种经济激励,从每次购买中获得奖励,才能保持系统的运行。
遗憾的是,我是Polymarket新手,但我猜最初,协议因该是完全基于CTF框架的, AMM用于价格确定。随着时间的推移,该协议开发了一个带有订单簿的混合解决方案,另外两种类型的订单(限价订单和市场订单)开始着手定制解决方案。这种解决方案被称为CLOB(中央限价订单簿)或BLOB(二进制限价订单簿)。
(3)CLOB和BLOB
CLOB(中央现价订单簿)或BLOB(二进制限价订单簿)是一种混合去中心化订单簿系统。在这个系统中,有一个专门的操作员处理订单匹配并启动智能合约的执行。
在不涉及太多细节的情况下,该系统可以描述如下:
用户创建执行订单,可以是限价单,也可以是市价单。操作员匹配用户订单并启动智能合约的执行。创建订单意味着根据EIP-712标准创建一个使用用户私钥签名的数据结构。由于订单在执行前存储在链下,因此可以对订单条款进行快速且无成本的调整,甚至可以彻底取消订单。
对于那些想要了解更多细节的人来说,与订单簿和订单匹配相关的所有内容都只能通过API访问。为方便起见,Polymarket提供了两个客户端:一个面向JavaScript,一个面向Python。
Exchange.sol智能合约是开源合约,负责在CTF框架内创建用户头寸。它还支持管理用户头寸以及持仓资产之间的转移,确保协议内的安全性和透明度。
智能合约已经过审计。审计报告附加在repository库中。
(4)智能合约
Exchange智能合约实际上有一个更具体的名称——CTFExchange.sol。它不是很大,只有大约100行代码,但它确实有大量依赖项。
其中大多数都是小型智能合约,只有有限的几个功能:
● BaseExchange.sol。抽象智能合约,实现了接收ERC-1155代币的能力,另外还负责防止重入攻击。
● Auth.sol。角色管理器。为CTFExchange.sol定义验证函数和修饰符,以设置角色:admin和operator。
● Assets.sol。定义两项资产:基础资产(抵押品)和CTF地址。
● Fees.sol。定义协议费用。
● Pausable.sol。定义中止智能合约操作的能力。是在不可预见的情况下协议认同的一种中心化中形式。仅对admin角色可用。
● AssetOperation.sol。定义基本资产和CTF的操作。包括转账、拆分和合并position。
● Signature.sol。定义用于验证订单处理所用用户签名的代码。
● Hashing.sol。定义用于签名验证的订单参数哈希计算。
● Registry.sol。定义在系统中注册预测以及为预测注册代币的过程。
请注意,与实际订单执行相关的一切都部署在智能合约中——Trading.sol。
浏览代码研究智能合约也很简单。该结构通过函数明确定义了入口点:
● fillOrder()——在创建它的用户和用户所选的maker做市商(另一个订单)之间执行订单。
● fillOrders()——与fillOrder()相同,但用于订单列表。
● matchOrders()——操作员选择两个不同的订单并执行。
以上所有函数只能由操作员调用。
无论调用如何进入智能合约,结果都是一样的:两个用户将根据他们的订单交换代币。
(5)协议费用
费用针对输出资产收取。对于二元预测来说,费用是对称的,这意味着:如果用户以0.99美元的价格出售代币,他们将支付与以0.01美元的价格购买代币的买家相同的费用。
计算公式很简单(摘自文档):
(6)流动性奖励计划
该计划的总目标是激励市场的流动性。
我们知道,要使基于订单簿的交易所发挥作用,就需要有人创建限价单。限价单提供流动性,允许市价单立即执行。创建限价单的用户被称为market makers(做市商)。限价单与市场价格越接近,市价单就能越快执行,交易量也就越大,这对最终用户来说当然是有利的。此外,流动性越多,操纵市场的难度就越大。
为确保足够的流动性,Polymarket制定了一个特殊的奖励计划来激励用户创建限价单。
限价单越接近市场平均价格,奖励就越高。奖励将在每天午夜(UTC时间)自动支付。
(7)Oracle
oracle用于传递预测的结果——无论事件是否发生。oracle是该协议最关键的一个组件,但它是由第三方而非Polymarket团队部署的。该oracle叫做UMA。
UMA是一个去中心化oracle,专门记录区块链上除无法验证数据之外的所有类型的数据。oracle被认为是optimistic模式,数据如果没有争议则被认为是正确的。UMA有自己的解决纠纷的仲裁系统,仲裁者是UMA生态系统的参与者,特别是UMA代币的持有者。这个系统被称为DVM(数据验证机制)。
以下多步骤过程用于确定预测结果并将其记录在区块链上:
● 陈述。预测和奖励一起被添加到oracle中。任何成功质疑预测结果的人都可以获得奖励。
● 挑战期。在此期间,任何人都可以对预测结果提出质疑。如果没有发生挑战,并且时间到期,则认为预测结果可以进行最终结算,表明其准确性。
● 争议。任何协议参与者都可以对结果提出异议,要么为了奖励,要么为了公平(只是开玩笑)。实际上,这种情况很少发生,因为博弈论表明,大多数参与者的行为都是诚实的。
● 投票。如果争议被发起,UMA代币持有者投票解决争议。UMA是用于投票的协议代币,参与者将获得参与奖励。
● 结算。最后一步是结算过程,即在区块链上实际记录数据。在此之后,可以认为预测结果是可靠准确的。
整个协议基于精密的博弈论,任何参与者如果从事恶意行为在经济上都是不利的。
举例如下:
● 提交预测结果进行投票的参与者会为智能合约提供抵押品。如果他们的结果有争议,他们将失去抵押品;否则,他们会收回抵押品并获得奖励。这就产生了只提交准确结果的强烈动机。
● 对预测结果有异议的参与者也会提供抵押品。如果他们是正确的,他们将收回抵押品并获得奖励;否则,他们就会失去抵押品。这就激励参与者只对那些他们确信是错误的结果发起挑战。
● 解决纠纷的参与者。他们必须质押UMA代币,并会因解决纠纷而获得奖励。如果他们投票错误或根本不投票,他们就会失去部分质押;否则,他们将得到奖励。所以,懈怠渎职是不可能的。
尤其值得注意的是,使用commit/reveal方案,争议投票过程将分为两个阶段:
● 提交。参与者通过向智能合约提交他们投票的哈希值来秘密投票。这意味着没有人可以通过查看哈希值来辨别参与者的投票选择。
● 披露。在投票阶段结束后,参与者展示他们的投票。智能合约验证投票是否与之前提交的哈希值匹配。
这个两阶段投票过程可以防止选民之间串通一气,诋毁依oracle或攻击赖预测结果的服务。
预测结果可以被多次挑战。在这种情况下,UMA允许在先前的争议结束后重新开启决策过程。
争议发起过程如下:
看似简单的押注和预测系统实际上由三个主要模块组成,各模块分别由不同的协议和团队开发:
● CTF(条件代币框架):管理预测中的组合、position和用户share。多亏了Gnosis创建出如此灵活的框架,这个框架非常适合预测市场。
● CLOB(中央限价订单簿):Polymarket的自家解决方案,用于部署订单簿和限价单。CLOB使用户能够有效地参与生态系统,并有助于聚集流动性。
● UMA:这是一个去中心化oracle,具有独特的争议解决仲裁系统。UMA是该系统真正的核心组件,通过区块链传输预测结果。
这个系统可以看作是一个押注系统,但是当我开始深入研究Polymarket时,我没有想到我必须把我的研究分为三个不同的协议,也没料到要花这么多时间在上面。从技术上讲,该协议令人印象深刻而且非常有趣,它成功地结合了来自不同项目的技术,使其对开发人员特别具有吸引力。
我的最终观点是:我真的希望看到这个协议是有用的,正如Vitalik Buterin所说的那样。愿它成为预测、决策和分析工具。然而,尽管具有这样的潜力,该协议仍然最常用于大选预测,相关预测需求飙升。