原文:Pavel Naydanov

編纂 | Odaily星球日报Golem(@web3_golem)

超详细揭秘Polymarket背后的技术实现方式

編者注:Polymarketは今回のアメリカ選挙でより多くの注目を集めました。予測テーマの累計取引量が360億ドルを突破しただけでなく、世論調査や伝統的なメディアに対してトランプが勝利することを早期にかつ成功裏に予測したため、人々はPolymarketが単なる賭けサイトではなく、より真実で信頼できる「ニュースサイト」となることを認識しました(推奨読書:(Vitalik新文:予測市場から情報金融へ))。Polymarketはこのブロックチェーン革命において最も輝かしい「風景」となるかもしれません。

では、「ブロックチェーン革命」という意義を持つPolymarketは技術的にどのように実現されたのでしょうか?スマートコントラクト開発者Pavel Naydanovは、Polymarketが採用した技術を詳細に分解して説明しました。特に新たに予測市場を構築する開発者にとって啓発的です。Odaily星球日报は、その技術実現に関する部分を以下にまとめました。次に、このプロトコルの各側面の技術的詳細を深く掘り下げていきましょう。

CTF:結果をトークン化する

Polymarket上のすべてのイベント結果はトークン化されています:

  • このようなトークンはShareトークンと呼ばれます;

  • Shareは基礎資産で購入されるため、完全に担保されています;

  • Shareは基礎資産を得るために売却可能です。

ShareトークンはGnosis条件トークンフレームワーク(CTF)に基づいて実装されたERC-1155であり、このフレームワークはその有効性が証明され、さまざまなプロトコルでテストされています。CTFは、各イベントに最大256の結果をサポートできます。

各予測はCTF内で識別されます。そのためには、三つのパラメータのハッシュ値からなる独自の条件IDが割り当てられます:

  • オラクル:イベント結果を決定するオラクルのアドレス、これにより指定されたオラクルのみが予測を決済できることが保証されます;

  • 問題ID:予測識別子で、予測の作成者によって設定されます。これは単純なカウンターであり、新しい予測ごとに以前の予測のカウンターを増加させることができますし、テキストや他のデータのハッシュを使用したより複雑なスキームも可能です;

  • outcomeSlotCount:予測の可能な結果の数。

下の図はCTF(条件トークンフレームワーク)の動作を視覚的に示しています:

超详细揭秘Polymarket背后的技术实现方式

ユーザーはベッティング時に基礎資産を提供し、CTFで条件トークンと呼ばれるShareトークンを受け取ります。オラクルが予測を決定した後、ユーザーは予測結果に基づいてCTFから報酬を受け取ることができます。

ユーザーが条件トークンを受け取ると、特定のポジションが確定したと見なされます。CTF内では、ポジションは各予測の可能な結果の組み合わせのセットを表します。CTFは各予測にこれらのポジションを生成し、各ポジションはユーザーが選択できる可能な結果の組み合わせの一つに対応します。

例えば:

2024年のボックスオフィスで最高の映画は何ですか?

  • 頭脳特工隊 2

  • デッドプール 3

  • ジョーカー 2

  • ミニオンズ 4

  • 沙丘2

  • マッドマックス 4

  • その他

ユーザーは(頭脳特工隊2)がボックスオフィスで最高の映画になると投票することができます、または(沙丘2)が2024年のボックスオフィスで最高の映画には絶対にならないと投票することができます。この予測の組み合わせは彼らのポジションと見なされます。

CTFは、ポジションを処理するための2つの興味深いメカニズムを提供します:分割と統合。分割メカニズムは、単一のポジションを複数の個別の結果に分割することを可能にし、統合は異なる結果を一つのポジションに統合します。これらのメカニズムは、ユーザーが柔軟にポジションを管理できるようにします。

CTFはPolymarketに四つの重要な利点を提供します:

  • Shareトークンは、ユーザーの特定の予測結果への投票を確認するために使用されます;

  • ユーザーの投票をさまざまなポジションに組み合わせる柔軟なシステムを実現しました;

  • オラクルの信号に基づいて、結果計算の責任はCTFに委任されます;

  • 勝利結果のShareトークン数に基づいて報酬を計算します。

さらに言及すべきは、CTFは関連する活動を組織することを許可し、ユーザーのポジションを統合できることです。しかし、Polymarketでは現在そのような例はありません。CTFについての詳細を知りたい場合は、公式文書を参照してください。

注文メカニズム

超详细揭秘Polymarket背后的技术实现方式

購入を行うために、Polymarketインターフェースは三種類の注文を提供しています:

  • 市場——現在の市場価格で即座に購入;

  • 指値——遅延注文、指定した価格に達した後に購入することを許可します;

  • AMM——分散型取引所のように自動的に決定された価格で購入し、プール内の備蓄額に基づいています。

現在、AMM注文機能は無効であるようで、AMMを通じて購入できる予測は見つかりません。PolymarketのDiscordのあるユーザーのコメントがこの状況をある程度説明しています。

超详细揭秘Polymarket背后的技术实现方式

AMMは時代遅れになりました

Polymarketの文書によると、AMMは条件トークンフレームワークの一部としてスマートコントラクトとして開発されました。したがって、AMMはSharetokenの購入価格を決定するために使用されます。この基本メカニズムは、安定した価格設定を確保し、ボラティリティを低下させるための流動性を必要とします。流動性提供者は、システムを運営するための経済的インセンティブが必要であり、各購入から報酬を得ることが必要です。

おそらく最初、Polymarketは完全にCTFに基づいており、AMMを使用して価格を決定していました。しかし、時間が経つにつれて、このプロトコルは注文書を持つハイブリッド解決策を開発し、他の2種類の注文(指値と市価)がこのカスタムソリューションで機能し始めました。この解決策はCLOB(中央指値注文簿)またはBLOB(二進法指値注文簿)と呼ばれています。

CLOBとBLOB

CLOB(中央指値注文簿)またはBLOB(二進法指値注文簿)は、混合分散型注文簿を表すシステムです。このシステムでは、特定のオペレーターが注文のマッチングを担当し、スマートコントラクトの実行を開始します。

過度の紹介は必要ありません。システムは以下の図のようになります:

超详细揭秘Polymarket背后的技术实现方式

ユーザーは実行するための注文を作成します。これには指値注文または市価注文が含まれます;オペレーターはユーザーの注文をマッチングし、スマートコントラクトで実行を開始します。注文の作成は、EIP-712標準に基づいてユーザーのプライベートキーで署名されたデータ構造の作成を意味します。注文は実行される前にオフチェーンに保存されるため、注文条件を迅速かつ無料で調整でき、完全にキャンセルすることも可能です。

ただし、注文簿と注文マッチングに関連するすべての内容はAPIを通じてのみアクセス可能です。便宜上、Polymarketは二つのクライアントを提供しています:一つはJavaScriptを使用し、もう一つはPythonを使用します。

しかし、Exchange.solスマートコントラクトは公開されており、CTF内でユーザーポジションを作成する責任があります。また、ユーザーポジションを管理し、彼らの間で資産を移動させることも許可されており、プロトコル内の安全性と透明性を確保します。

超详细揭秘Polymarket背后的技术实现方式

このスマートコントラクトは監査を受けており、監査報告書はリポジトリに添付されています。

スマートコントラクト

Exchangeスマートコントラクトは実際にはCTFExchange.solというより具体的な名前を持っています。それはそれほど大きくはなく、約100行のコードですが、多くの依存関係を持っています。

超详细揭秘Polymarket背后的技术实现方式

そのほとんどは限定的な機能を持つ小型のスマートコントラクトの実装です:

  • BaseExchange.sol:ERC-1155トークンを受け取る能力を実装した抽象的なスマートコントラクトで、再入攻撃を防ぐ役割も果たします;

  • Auth.sol:ロール管理者であり、ロールを設定するための検証関数と修飾子を定義し、CTFExchange.solのadminとoperatorです;

  • Assets.sol:基礎資産(担保)とCTFアドレスの二つの資産を定義します;

  • Fees.sol:プロトコル手数料を定義します;

  • Pausable.sol:スマートコントラクト操作を一時停止する能力を定義し、プロトコルは予期しない状況が発生した場合に採用する中心化された形式です。adminロールのみに適用されます;

  • AssetOperation.sol:基礎資産とCTFの操作を定義します。ポジションの移転、分割、統合を含みます;

  • Signature.sol:注文を検証するために使用されるユーザー署名のコードを定義します;

  • Hashing.sol:署名検証のために使用される注文パラメータのハッシュ値を定義します;

  • Registry.sol:システム内に予測を登録し、予測にトークンを登録するプロセスを定義します。

実際の注文の実行に関連するすべては、スマートコントラクトTrading.solに実装されています。コードを通じてスマートコントラクトを研究するのも簡単です。この構造は、関数によってエントリポイントを明確に定義しています:

  • fillOrder()— 作成したユーザーとユーザーが選択したオーダー(別の注文)の間で注文を実行します;

  • fillOrders() — fillOrder()と同様ですが、注文リストに使用されます;

  • matchOrders()— オペレーターが二つの異なる注文を選び、それらを実行します。

上記のすべての関数はオペレーターによってのみ呼び出すことができます。

超详细揭秘Polymarket背后的技术实现方式

コールがスマートコントラクトに入る方法に関係なく、結果は常に同じです:二人のユーザーは彼らの注文に基づいてトークンを交換します。

プロトコル手数料

手数料は出力資産に基づいて課金されます。二元予測の場合、手数料は対称的です。つまり、ユーザーが0.99ドルでトークンを販売する場合、0.01ドルでトークンを購入する買い手と同じ手数料を支払います。

計算式は非常に簡単で、公式文書から取られています:

超详细揭秘Polymarket背后的技术实现方式

流動性報酬プログラム

このプログラムの全体的な目標は、マーケット流動性を促進することです。

オーダーブックに基づく取引所が機能するためには、誰かが指値注文を作成する必要があります。指値注文は、市場価格の注文を即座に実行するための流動性を提供します。指値注文を作成するユーザーはマーケットメイカーと呼ばれます。指値注文が市場価格に対して「密接」であるほど、市場注文の実行速度は速くなり、取引量も増加します。これは最終ユーザーにとって間違いなく有利です。さらに、流動性が高いほど、マーケット操作が難しくなります。

十分の流動性を確保するために、Polymarketは特別な報酬プログラムを策定し、ユーザーが指値注文を作成するように促しています。指値注文が市場の平均価格に近いほど、報酬は高くなります。報酬は毎日真夜中(UTC時間)に自動的に支払われます。

このシステムはdYdXをモデルにしており、詳細については元の dYdXの流動性インセンティブプログラムやPolymarketの詳細な流動性報酬計算式を参照してください。

オラクル

オラクルは予測結果を提供するために使用されます — 事象が発生したかどうかにかかわらず。オラクルはプロトコルの最も重要なコンポーネントの一つですが、Polymarketチームではなく、第三者サービスによって提供され、このオラクルはUMAとして知られています。

UMAは、ブロックチェーン上であらゆる種類のデータを記録するために特化した分散型オラクルです。ただし、検証できないデータは除きます。このオラクルは楽観的であり、異議がない限りデータは正しいと見なされます。UMAは、異議を解決するための独自の仲裁システムを持っており、仲裁者は実際の人間であるUMAエコシステムの参加者、特にUMAトークン保有者です。このシステムはDVM(データ検証メカニズム)と呼ばれています。

以下のプロセスは予測結果を決定し、それをブロックチェーンに記録するために使用されます:

超详细揭秘Polymarket背后的技术实现方式

  1. ステートメント:予測と報酬がオラクルに追加されます。予測結果に異議を唱えた成功者は報酬を受け取ることができます;

  2. チャレンジ期間:チャレンジ期間中は誰でも予測結果に異議を唱えることができます。異議が提起されず、時間が経過すると、予測結果は最終決済の準備が整ったと見なされ、その正確性を示します;

  3. 争議:争議で、任意のプロトコル参加者は結果に異議を唱えることができます。報酬を求めるためでも、公平性のためでも構いません。実際、この状況はあまり発生しません。なぜなら、ゲーム理論はほとんどの参加者が誠実に行動することを示しているからです。

  4. 投票:投票、異議が提起される場合、UMAトークン保有者は争議を解決するために投票します。UMAは投票に使用されるプロトコルトークンであり、参加者は投票に参加することで報酬を得ます。

  5. 決済:最終段階は決済プロセスであり、ブロックチェーン上にデータを実際に記録することです。その後、予測結果は信頼できるものと見なされます。

全体のプロトコルはゲーム理論に基づいており、悪意のある行動をすることは経済的に不利です。

  1. 予測結果を提出して投票する参加者は、スマートコントラクトに担保を提供します。彼らの結果が異議を唱えられた場合、彼らは担保を失います。そうでなければ、彼らは担保を取り戻し、報酬を得ます。これは、正確な結果のみを提出する強い動機を生み出します。

  2. 予測結果に異議を唱える参加者も担保を提供します。彼らが正しかった場合、担保を取り戻し、報酬を得ます。そうでない場合、担保を失います。これは、参加者が自信を持って間違っている結果だけに挑戦するように促します。

  3. 争議を解決する参加者。彼らはUMAトークンをステークし、争議を解決することで報酬を得ます。彼らが誤って投票したり、全く投票しなかった場合、彼らは部分的にステークバランスを失います。そうでなければ、彼らは報酬を得ます。怠ける余地はありません。

特に注目すべきは、争議中の投票プロセスがコミット/リビール方式で二つの段階に分かれていることです。

  1. コミット:参加者は投票のハッシュをスマートコントラクトに提出して秘密投票を行います。これは、誰もハッシュを見ただけで参加者がどのように投票したかを識別できないことを意味します。

  2. リビール:投票段階が終了した後、参加者は彼らの投票用紙を明らかにし、スマートコントラクトはそれが以前に提出されたハッシュと一致するかどうかを確認します。

この二段階の投票プロセスは、有権者がオラクルを貶めたり、予測結果に依存するサービスを攻撃したりすることを防ぎます。同時に、予測結果は何度も異議を唱えられる可能性があり、その場合、UMAは以前の争議が終了した後に意思決定プロセスを再起動することを許可します。

争議の発起プロセスは以下の通りです:

超详细揭秘Polymarket背后的技术实现方式

結論

Polymarketという一見シンプルなギャンブルと予測のシステムは、実際には異なるプロトコルとチームによって開発された三つの主要なモジュールを含んでいます:

  • CTF(条件トークンフレームワーク):予測における組み合わせ、ポジション、Shareを管理します。この柔軟なフレームワークはGnosisによって作成され、予測市場に非常に適しています。

  • CLOB(中央指値注文簿):Polymarketが注文簿と指値注文を実施するための内部ソリューションです。CLOBはユーザーがエコシステムに効果的に参加し、流動性を集約するのを助けます。

  • UMA:独自の争議解決仲裁システムを持つ分散型オラクルです。UMAはシステムの核心であり、ブロックチェーンを通じて予測結果を送信します。

Polymarketはベッティングシステムですが、技術的には異なるプロジェクトからの技術を組み合わせて成功を収めており、特に開発者にとって魅力的です。

関連記事

アメリカの選挙の後、Polymarketと予測市場の熱潮はどのくらい続くのでしょうか?

選挙の伝統的な世論調査を超えて、Polymarketはどのように実現したのか?