Discreet Log Contract

Discreet Log Contract

GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2019/05/discreet-log-contract/

C403a9e0b7bfed4c94020220b5ab89f7?s=128

shigeyuki azuchi

May 23, 2019
Tweet

Transcript

  1. 2.

    1 Discreet Log Contract https://adiabat.github.io/dlc.pdf Lightning Networkのホワイトペーパーの共著 者であるThaddeus Dryjaが提案するオラクル へのトラストを最小限とした


    • スケーラビリティ
 • プライバシー保護
 を備えたコントラクトのプロトコル。
 
 オラクルが公開した情報を元に
 コントラクトが実行され、暗号通貨を使ったデリ バティブ取引を可能にする。

  2. 3.

    2 DLCを利用した予測市場取引 アリス ボブ オリビア (Oracle) 金曜日に日本円を購入する 
 金曜日に日本円を売却する 


    Setup Contract 水曜日に売買契約を結ぶ 
 水曜日時点では 
 1円 = 160 satoshi
 金曜日時点では 
 1円 = 200 satoshi
 Oracleであるオリビアは 
 日々、通貨価格を公開する 
 Contractは
 1円 = 200 satoshi
 換算で取引を実行する 

  3. 4.

    3 コントラクトのセットアップ Funding Tx
 アリスのBTC
 2-of-2のマルチシグ 
 資金をアリスとボブの2-of-2のマルチシグにロック するFunding Txを作成する


    Contract Execution Tx 1 
 Funding TxのUTXO
 アリス宛の送金
 ボブ宛送金
 Contract Execution Tx 2 
 Funding TxのUTXO
 アリス宛の送金
 ボブ宛送金
 Contract Execution Tx 3 
 Funding TxのUTXO
 アリス宛の送金
 ボブ宛送金
 Contract Execution Tx 4 
 Funding TxのUTXO
 アリス宛の送金
 ボブ宛送金
 1円 = 150 satの場合
 1円 = 151 satの場合
 1円 = 152 satの場合
 1円 = 153 satの場合
 Funding Txの資金をインプットとし、1円の価格に応じて
 アウトプットの取り分が変わるContract Execution Txを
 大量に作成し、お互いに署名を作成し、各自保存しておく。

  4. 5.

    4 Schnorr署名 公開鍵や署名の集約特性があるデジタル署名スキーム
 
 • 楕円曲線の生成点:G
 • 秘密鍵:x、公開鍵:P = xG


    • 暗号学的ハッシュ関数: H
 • メッセージダイジェスト: m
 
 【署名の生成】
 • ランダムなnonce kを選択する。
 • R = kGを計算する。
 • s = k + H(P, R, m) x を計算する。
 • (R, s)が署名データ
 秘密鍵 x の情報を知らなければ、 この式を満たす s は導出できない。 【署名の検証】 • sG = R + H(P, R, m)P が成立する か検証する。
  5. 6.

    5 Oracleが予め公開する情報 • 自身の公開鍵V = vG
 オリビアが公開する情報はこの公開鍵Vに対して
 有効な署名が含まれる。
 
 •

    nonce R = kG
 Vは使いまわされるが、Vとは別に日々価格を
 発表する際に使用する署名のnonceの値を
 事前に公開する。
 Oracleであるオリビアは予め以下の2つの点を公開する。
  6. 7.

    6 Contract Execution Txの中身 Contract Execution Tx 150 Funding TxのUTXO

    ボブへのP2PKH 以下のロック条件を持つスクリプト ハッシュへの支払い • Pub_A150 • ボブの公開鍵+タイムロッ ク • Pub_Ai = アリスの公開鍵 + siG
 • Pub_Bi = ボブの公開鍵 + siG
 siGは、siG = R + H(i, R)Vで計算する。iは1円のsatoshiの値を指す。
 
 Pub_Aiのコインを入手するには、アリスの秘密鍵の他、siの情報が必要になる。
 Pub_Biのコインを入手するには、ボブの秘密鍵の他、siの情報が必要になる。
 Contract Execution Tx 150’ Funding TxのUTXO アリスへのP2PKH 以下のロック条件を持つスクリプト ハッシュへの支払い • Pub_B150 • アリスの公開鍵+タイムロッ ク
  7. 8.

    7 Oracleが公開する終値 金曜日の終値が1円 = 200 satoshiだった場合、
 オリビアは、200の値にコミットするSchnorr署名を
 作成する。
 nonce は予め公開しているR

    = kGの値を使用。
 
 s = k + H(200, R)v を計算し、
 
 マーケットの終わり値200と署名(R, s)を公開する。
 ※ 公開はWeb上で公開してもいいし、Twitterで流すのでも何でもいい。
  8. 9.

    8 Contract Execition Contract Execution Tx 200 Funding Txの UTXO

    ボブへのP2PKH 以下のロック条件を持つスクリプトハッ シュへの支払い • Pub_A200 • ボブの公開鍵+タイムロック アリス(もしくはボブ)は該当する価格のCETをブロードキャストする
 Contract Execution Tx 200’ Funding Txの UTXO アリスへのP2PKH 以下のロック条件を持つスクリプトハッ シュへの支払い • Pub_B200 • アリスの公開鍵+タイムロック Pub_A200 = アリスの公開鍵 + s200G であり、
 アリスはOracleが公開した署名データの s200 = k + H(200, R)v を知っているので、 Pub_A200に対して有効な署名は 「アリスの秘密鍵 + s200」 を秘密鍵として作成することが できる。(タイムロックが経過するとボブに没収される。)
 ※ 通常はそのままブロードキャストするより、協力してお互いの取り分を直接送るClosing Txを作る。 

  9. 10.

    9 不正への対応 Contract Execution Tx 150 Funding Txの UTXO ボブへのP2PKH

    以下のロック条件を持つスクリプトハッ シュへの支払い • Pub_A150 • ボブの公開鍵+タイムロック Contract Execution Tx 150’ Funding Txの UTXO アリスへのP2PKH 以下のロック条件を持つスクリプトハッ シュへの支払い • Pub_B150 • アリスの公開鍵+タイムロック Oracleが公開した値と異なる条件のトランザクションをブロードキャストする不正をした場 合、トランザクションを投げた側が、siが分からずアンロックに必要な署名が作れず、タイム アウトを経過すると結局全額相手に持っていかれる。

  10. 11.

    10 DLCの特徴 • ブロックチェーンを見ても、単純にマルチシグとP2PKH宛とスクリプト
 (中身も公開鍵宛と、タイムロックが付いた公開鍵宛のいずか)なので、
 DLCを使って予測取引をしていたことは当事者以外分からない。
 • Oracleが虚偽の報告をしない前提となっており最低限のトラストが必要。
 ◦ 相手とOracleの共謀に対応する場合、複数のOracleを立てる。


    ◦ n-of-mのOracleもやれなくはない(ただし複雑になる)。
 • 価格などの扱う場合は、作成するトランザクション数が極端に大きくなる場合、値を指 数と仮数で表現することでトランザクション数を減らせる。
 • Lightning Networkを利用したオフチェーン環境での実行も可能。
 • 多分、Mimblewimbleを実装しているGrin等でも実現可能(CSV次第)。
 • 具体サービスも誕生間近?
 https://www.garage.co.jp/ja/pr/2019/04/20190419.html