Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Discreet Log Contract
Search
shigeyuki azuchi
May 23, 2019
Technology
0
87
Discreet Log Contract
GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2019/05/discreet-log-contract/
shigeyuki azuchi
May 23, 2019
Tweet
Share
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
Fiat-Shamir変換と注意点
azuchi
0
17
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
6
BIP-374 離散対数の等価性証明
azuchi
0
22
BIP-353 DNS Payment Instructions
azuchi
0
38
OP_CAT and Schnorr Trick
azuchi
0
31
Pay to Anchorと1P1Cリレー
azuchi
0
36
プロアクティブ秘密分散法
azuchi
0
54
v3トランザクションリレー
azuchi
0
54
ランポート署名
azuchi
0
96
Other Decks in Technology
See All in Technology
Gaze-LLE: Gaze Target Estimation via Large-Scale Learned Encoders
kzykmyzw
0
360
Webアクセシビリティ入門
recruitengineers
PRO
2
850
あなたの知らない OneDrive
murachiakira
0
240
そのコンポーネント、サーバー?クライアント?App Router開発のモヤモヤを可視化する補助輪
makotot
4
720
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
3
890
KiroでGameDay開催してみよう(準備編)
yuuuuuuu168
1
140
ドキュメントはAIの味方!スタートアップのアジャイルを加速するADR
kawauso
3
420
広島銀行におけるAWS活用の取り組みについて
masakimori
0
150
JuniorからSeniorまで: DevOpsエンジニアの成長ロードマップ
yuriemori
2
270
新規案件の立ち上げ専門チームから見たAI駆動開発の始め方
shuyakinjo
0
190
JOAI発表資料 @ 関東kaggler会
joai_committee
1
430
RAID6 を楔形文字で組んで現代人を怖がらせましょう(実装編)
mimifuwa
1
320
Featured
See All Featured
Docker and Python
trallard
45
3.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.4k
The Cult of Friendly URLs
andyhume
79
6.6k
How to train your dragon (web standard)
notwaldorf
96
6.2k
We Have a Design System, Now What?
morganepeng
53
7.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Music & Morning Musume
bryan
46
6.8k
Optimizing for Happiness
mojombo
379
70k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
4 Signs Your Business is Dying
shpigford
184
22k
Transcript
Discreet Log Contract
1 Discreet Log Contract https://adiabat.github.io/dlc.pdf Lightning Networkのホワイトペーパーの共著 者であるThaddeus Dryjaが提案するオラクル へのトラストを最小限とした
• スケーラビリティ • プライバシー保護 を備えたコントラクトのプロトコル。 オラクルが公開した情報を元に コントラクトが実行され、暗号通貨を使ったデリ バティブ取引を可能にする。
2 DLCを利用した予測市場取引 アリス ボブ オリビア (Oracle) 金曜日に日本円を購入する 金曜日に日本円を売却する
Setup Contract 水曜日に売買契約を結ぶ 水曜日時点では 1円 = 160 satoshi 金曜日時点では 1円 = 200 satoshi Oracleであるオリビアは 日々、通貨価格を公開する Contractは 1円 = 200 satoshi 換算で取引を実行する
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 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 Oracleが予め公開する情報 • 自身の公開鍵V = vG オリビアが公開する情報はこの公開鍵Vに対して 有効な署名が含まれる。 •
nonce R = kG Vは使いまわされるが、Vとは別に日々価格を 発表する際に使用する署名のnonceの値を 事前に公開する。 Oracleであるオリビアは予め以下の2つの点を公開する。
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 Oracleが公開する終値 金曜日の終値が1円 = 200 satoshiだった場合、 オリビアは、200の値にコミットするSchnorr署名を 作成する。 nonce は予め公開しているR
= kGの値を使用。 s = k + H(200, R)v を計算し、 マーケットの終わり値200と署名(R, s)を公開する。 ※ 公開はWeb上で公開してもいいし、Twitterで流すのでも何でもいい。
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 不正への対応 Contract Execution Tx 150 Funding Txの UTXO ボブへのP2PKH
以下のロック条件を持つスクリプトハッ シュへの支払い • Pub_A150 • ボブの公開鍵+タイムロック Contract Execution Tx 150’ Funding Txの UTXO アリスへのP2PKH 以下のロック条件を持つスクリプトハッ シュへの支払い • Pub_B150 • アリスの公開鍵+タイムロック Oracleが公開した値と異なる条件のトランザクションをブロードキャストする不正をした場 合、トランザクションを投げた側が、siが分からずアンロックに必要な署名が作れず、タイム アウトを経過すると結局全額相手に持っていかれる。
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