Slide 1

Slide 1 text

福岡ブロックチェーンエコノミー勉強会 「規制対象としての「仮想通貨」「暗号資産」とブロックチェーンによる金融技術の進化」 
 Bitcoinで作る金融商品


Slide 2

Slide 2 text

Copyright © 2019 chaintope Inc. All rights reserved. Discreet Log Contract
 https://adiabat.github.io/dlc.pdf 2 Lightning Networkのホワイトペーパーの共著 者であるThaddeus Dryjaが提案するオラクル へのトラストを最小限とした
 ● スケーラビリティ
 ● プライバシー保護
 を備えたコントラクトのプロトコル。
 
 オラクルが公開した情報を元に
 コントラクトが実行され、暗号通貨を使ったデリ バティブ取引を可能にする。


Slide 3

Slide 3 text

Copyright © 2019 chaintope Inc. All rights reserved. DLCを利用した予測市場取引 
 3 アリス ボブ オリビア (Oracle) 金曜日に日本円を購入する 
 金曜日に日本円を売却する 
 Setup Contract 水曜日に売買契約を結ぶ 
 水曜日時点では 
 1円 = 160 satoshi
 金曜日時点では 
 1円 = 200 satoshi
 Oracleであるオリビアは 
 日々、通貨価格を公開する 
 Contractは
 1円 = 200 satoshi
 換算で取引を実行する 


Slide 4

Slide 4 text

Copyright © 2019 chaintope Inc. All rights reserved. コントラクトのセットアップ 
 4 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を
 大量に作成し、お互いに署名を作成し、各自保存しておく。


Slide 5

Slide 5 text

Copyright © 2019 chaintope Inc. All rights reserved. Schnorr署名 
 5 公開鍵や署名の集約特性があるデジタル署名スキーム
 
 ● 楕円曲線の生成点: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 が成立する か検証する。

Slide 6

Slide 6 text

Copyright © 2019 chaintope Inc. All rights reserved. Oracleが予め公開する情報 
 6 ● 自身の公開鍵V = vG
 オリビアが公開する情報はこの公開鍵Vに対して
 有効な署名が含まれる。
 
 ● nonce R = kG
 Vは使いまわされるが、Vとは別に日々価格を
 発表する際に使用する署名のnonceの値を
 事前に公開する。
 Oracleであるオリビアは予め以下の2つの点を公開する。

Slide 7

Slide 7 text

Copyright © 2019 chaintope Inc. All rights reserved. Contract Execution Txの中身 
 7 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 ● アリスの公開鍵+タイムロック

Slide 8

Slide 8 text

Copyright © 2019 chaintope Inc. All rights reserved. 金曜日の終値が1円 = 200 satoshiだった場合、
 オリビアは、200の値にコミットするSchnorr署名を作成する。
 nonce は予め公開しているR = kGの値を使用。
 
 s = k + H(200, R)v を計算し、
 
 マーケットの終わり値200と署名(R, s)を公開する。
 Oracleが公開する終値 
 8 ※ 公開はWeb上で公開してもいいし、Twitterで流すのでも何でもいい。

Slide 9

Slide 9 text

Copyright © 2019 chaintope Inc. All rights reserved. Contract Execution
 9 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を作る。 


Slide 10

Slide 10 text

Copyright © 2019 chaintope Inc. All rights reserved. DLCのトリック
 10 Contract Execution Tx i Funding Txの UTXO ボブへのP2PKH 以下のロック条件を持つスクリプトハッ シュへの支払い ● Pub_Ai ● ボブの公開鍵+タイムロック ● Pub_Ai = アリスの公開鍵 + siG
 
 ● Pub_Bi = ボブの公開鍵 + siG
 Contract Execution Tx i’ Funding Txの UTXO アリスへのP2PKH 以下のロック条件を持つスクリプトハッ シュへの支払い ● Pub_Bi ● アリスの公開鍵+タイムロック si = k + H(i, R)v
 siG = kG + H(i, R)vG
 = R + H(i, R)V 
 Rが公開されているから事前にsiGが計算できる


Slide 11

Slide 11 text

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


Slide 12

Slide 12 text

Copyright © 2019 chaintope Inc. All rights reserved. DLCの特徴
 12 ● ブロックチェーンを見ても、単純にマルチシグと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


Slide 13

Slide 13 text

Copyright © 2019 chaintope Inc. All rights reserved. Atomic Loans
 13 ブローカーのような第三者を抜きに
 借り手と貸し手の間で担保付き融資契約を
 結ぶためのプロトコル。
 
 BIP-197 
 Hashed Time-Locked Collateral Contract とし ても定義。
 https://github.com/bitcoin/bips/blob/master/bip-0197.mediawiki
 https://arxiv.org/pdf/1901.05117.pdf

Slide 14

Slide 14 text

Copyright © 2019 chaintope Inc. All rights reserved. HTLCベースのAtomic Swap
 14 HTLC(Hashed Time-Locked Contracts)はハッシュのプリイメージ
 (シークレット)とコインを交換するタイムロック付きのコントラクト
 
 
 
 
 
 
 
 アリスはLitecoin上でシークレットSを公開してLTCを入手し、
 ボブは公開されたSを使ってBitcoin上でBTCを入手する。
 アリスはBitcoinを以下のアンロック条件のスクリプトに送る。
 ● H(S)のプリイメージ=シークレットSが
 分かればボブはBTCを入手できる。
 ● 10日経過したらアリスはBTCを入手できる。
 Secret S H(S) ボブはLTCを以下のアンロック条件のコントラクトに送る。
 ● H(S)のプリイメージ=シークレットSが
 分かればアリスはLTCを入手できる。
 ● 5日経過したらボブはLTCを入手できる。
 BTC/LTCを交換


Slide 15

Slide 15 text

Copyright © 2019 chaintope Inc. All rights reserved. HTLCベースのAtomic Swap
 15 ● Bitcoinのスクリプト(BIP-199)
 
 
 
 
 
 
 ● ボブが償還する際の scriptSig
 
 
 ● アリスが償還する際の scriptSig
 
 
 ※実際は、P2SHになるのでredeem scriptが追加される。 
 OP_IF
 OP_HASH160 OP_EQUALVERIFY OP_DUP OP_HASH160 <ボブの公開鍵のハッシュ>
 OP_ELSE
 <ロック期間> OP_CHECKLOCKTIMEVERIFY OP_DROP OP_HASH160 <アリスの公開鍵のハッシュ>
 OP_ENDIF
 OP_EQUALVERIFY
 OP_CHECKSIG
 <ボブの鍵で生成した署名> <ボブの公開鍵> OP_TRUE
 <アリスの鍵で生成した署名> <アリスの公開鍵> OP_FALSE
 scriptPubKey
 scriptSig
 scriptSig


Slide 16

Slide 16 text

Copyright © 2019 chaintope Inc. All rights reserved. Hashed Time-Locked Collateral Contract
 16 Bitcoin Network 融資元本の通貨 アリス (借り手) ボブ (貸し手) ② 融資の担保をロック 
 ① 融資の元本をロック 
 ③ 担保と融資の条件に合意したら融資実行可能になる。 
 ④ 返済期限までに元金+利息を返済したら 
  担保はアリスに戻る。 
 ④ 債務不履行になった場合、 
 ● 担保の精算の両者が合意する場合は入札を行う。 
 ● 担保の精算に合意しない場合、担保の一定割合を差し押 さえ、精算する。
 入札者 bid

Slide 17

Slide 17 text

Copyright © 2019 chaintope Inc. All rights reserved. 融資プロセス
 17 Bitcoin Network 融資元本の通貨 ① 融資情報を送信
 融資要求 ● 金額 ● 融資開設期間 ● 精算期間 ● 差し押さえ期間 A1 A2 借り手がローンを引き出した際に
 明らかになるシークレット
 入札者が担保資金を引き出す際に
 明らかになるシークレット
 B1 B2 借り手の担保のロックを受け入れ、借り手が
 ローンを引き出す際に明らかになるシークレット
 借り手の担保のロックを拒否 or 
 借り手による元本+利息の返済を受け入れる
 際に使われるシークレット
 それぞれシークレットを作成し、
 そのハッシュを交換する。
 B3 入札者が担保資金を引き出す際に
 明らかになるシークレット


Slide 18

Slide 18 text

Copyright © 2019 chaintope Inc. All rights reserved. 融資プロセス
 18 Bitcoin Network 融資元本の通貨 ② 融資額をHTLCにロック 
 ● シークレットA1, B1が分かれば、アリスは融資の資金を 入手できる。
 ● 有効期間経過したらボブはシークレットB2を公開して資 金を取り戻す。
 Hashed Time-Locked Principal Contract ③ 融資金がロックされた確認し、 
  担保となるBitcoinをHTLCにロックする。 
 B1 B2 A1 A2 ● シークレットB2 & アリスの鍵の署名
 ● 以下のいずれかでアンロック可
 ○ ローン期間後、A2およびB3の情報、
 アリスとボブのマルチシグ
 ○ 精算期間後、アリスの鍵の署名
 Refundable Collateral Contract B2はボブが返済を受け入れる際に明らかになるので、 返済が無事終わればアリスに戻り、 債務不履行の場合は、精算するか、精算に合意しない場合は アリスに戻ってくる資金。 B3

Slide 19

Slide 19 text

Copyright © 2019 chaintope Inc. All rights reserved. 融資プロセス
 19 Bitcoin Network 融資元本の通貨 ③ 融資金がロックされた確認し、 
  担保となるBitcoinをHTLCにロックする。 
 ④ ロックされた担保額、内容を確認し、 
 問題なければシークレットB1をアリスに明かす。 
 ● シークレットB2 & アリスの鍵の署名
 ● 以下のいずれかアンロック可
 ○ ローン期間後、A2およびB3の情報 + 
 アリスとボブのマルチシグ
 ○ 以下のいずれかでアンロック可
 ■ 入札期間後、A1とボブの鍵の署名
 ■ 差し押さえ期間後、アリスの鍵の署名
 B1 Seizable Collateral Contract Refundable Collateral Contract A1 A2 B1 B2 B2はボブが返済を受け入れる際に明らかになるので、 返済が無事終わればアリスに戻り、 債務不履行の場合は、精算するか、精算に合意しない場合は ボブが差し押さえるか、差し押さえ期間後にアリスが回収。 B3

Slide 20

Slide 20 text

Copyright © 2019 chaintope Inc. All rights reserved. 融資プロセス
 20 Bitcoin Network 融資元本の通貨 ⑤ 両者条件に合意し、B1を入手したのでA1を 
 使ってボブがHTLCにロックした融資を引き出す。 
 A1 A2 B1 B2 B1 ● シークレットA1, B1が分かれば、アリスは融資の資金を 入手できる。
 ● 有効期間経過したらボブはシークレットB2を公開して資 金を取り戻す。
 Hashed Time-Locked Principal Contract A1 1つめの条件を使って融資の元金を引出し B3

Slide 21

Slide 21 text

Copyright © 2019 chaintope Inc. All rights reserved. 返済プロセス
 21 Bitcoin Network 融資元本の通貨 ① 元金+利息を融資返済HTLCに送金する。 
 A1 A2 B1 B2 B1 ● シークレットB2が分かれば、ボブは融資の
 元金+利息を受け取ることができる。
 ● 有効期間経過したらアリスは元金+利息を
 取り戻す。
 融資返済HTLC A1 ② B2を使って、返済を受け入れる。 
 B2 B3

Slide 22

Slide 22 text

Copyright © 2019 chaintope Inc. All rights reserved. 返済プロセス
 22 Bitcoin Network 融資元本の通貨 ③ 返済によりB2を入手したので、ロックされて いた担保を取り戻す。 
 A1 A2 B1 B2 B1 A1 B2 ● シークレットB2 & アリスの鍵の署名
 ● 以下のいずれかでアンロック可
 ○ ローン期間後、A2およびB3の情報、
 アリスとボブのマルチシグ
 ○ 精算期間後、アリスの鍵の署名
 Refundable Collateral Contract ● シークレットB2 & アリスの鍵の署名
 ● 以下のいずれかアンロック可
 ○ ローン期間後、A2およびB3の情報 + 
 アリスとボブのマルチシグ
 ○ 以下のいずれかでアンロック可
 ■ 入札期間後、A1とボブの鍵の署名
 ■ 差し押さえ期間後、アリスの鍵の署名
 Seizable Collateral Contract B3

Slide 23

Slide 23 text

Copyright © 2019 chaintope Inc. All rights reserved. 債務不履行になると
 23 ● シークレットB2 & アリスの鍵の署名
 ● 以下のいずれかでアンロック可
 ○ ローン期間後、A2およびB3の情報、
 アリスとボブのマルチシグ
 ○ 精算期間後、アリスの鍵の署名
 Refundable Collateral Contract ● シークレットB2 & アリスの鍵の署名
 ● 以下のいずれかアンロック可
 ○ ローン期間後、A2およびB3の情報 + 
 アリスとボブのマルチシグ
 ○ 以下のいずれかでアンロック可
 ■ 入札期間後、A1とボブの鍵の署名
 ■ 差し押さえ期間後、アリスの鍵の署名
 Seizable Collateral Contract 1. アリスとボブ両者が精算に合意すると、担保資金を全て入札にかける。
 2. 精算に合意しない場合
 a. Refundable Collateral Contract分はアリスに戻り
 b. Seizable Collateral Contract分はボブが差し押さえ