7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Discreet Log Contractsについて (概要)

Last updated at Posted at 2017-08-15
  • 理解しきれてない部分もあるので間違っていたらごめんなさい

原論文
https://adiabat.github.io/dlc.pdf

解説されてるスライド?
https://bc-2.jp/materials/0305_DiscreetLogContracts.pdf

概要

Bitcoinを使って分散予測市場を作るためのコントラクト(Bitcoinスクリプトとその利用方法)を考えだした論文。
AugurなどはEthereum上にプログラムとして書かれているが、それを用いなくても良くなる。
また、Lightning Networkと共存できるため、高速で手数料のかからないやり取りができる。

この投稿は翻訳ではなく、単なるまとめ的なものなので詳細は原論文を解読してください。

##(前提)Schnorr署名についての知識
詳細は[こちら] (https://blog.visvirial.com/articles/721)

署名者は秘密鍵と、加えて乱数を生成

  • A = aG ( A:公開鍵, a:秘密鍵)
  • R = kG (k:ランダムな自然数)

s = k - h(m, R)a を計算し、(R,s)を署名として公開

署名検証

公開された(A,m,R,s)より

  • sG = R- h(m,R)A

が成立すれば検証完了(代入すると同じになるため)


##Discrete Log Contractsの流れ

###登場人物

Alice <-> Bob (将来のある時点での日本円価格の予測をし、賭けをする)

Olivia: oracle(仲介者)

① Olivia

公開する: V ( V= vG) (G:ベースポイント 楕円曲線?)
公開する: R ( R = kG) k: ランダムな自然数

Rは署名の時に一度だけ使われる。

Oliviaはランダムな自然数kを生成する。

kは複数生成され、毎回R = kGを計算、meta dataと同時にRを公開

 meta data: mに値を入れる時の形式を定義したもの
 
 例)ここではjson形式で {name: value} をテンプレートにしてます。
 
   {jpy-in-satoshis: 1050} 対象の予測値が1つの場合
     
    { btc: 10000, ltc: 20000} 2つの場合
      など
  

今回はm=1000など、そのまま数値をmに代入していきます。

② Bob,Alice

multisigアドレスに二人共BTCをデポジットし、コントラクトを含んだトランザクションに署名してbroadcastする。

③ closing transaction作成

TX1, TX2, .....,TXi,.....

これは以下のPubkeyに送金するトランザクションである。

  • Pubi = PubAlice + siG
  • siG = R - h(i, R)V

iは署名するメッセージ部分だが、ここはOliviaの公開したmeta data形式に従って入力してRを計算しないといけない。

無数のあり得る日本円価格(satohis換算)に対してclosing transactionsをAliceとBobはそれぞれ作成し署名して、お互いに交換しておく。(いつでもClosing Transactionをブロードキャストできる)

=>signed Contract Execution Transactions(CET)

④ Olivia(金曜日になったら)

1050 satohis/yenになっていた。

m=1050として、

s1050 = s = k- h(1050,R)v

が計算できるので、計算し、公開する。

⑤ Bob,Aliceはs1050 に対応した秘密鍵を得ることができる。

PubAlice = aGより

  • Pub1050 = PubAlice + s1050G
    = aG + s1050G
    =(a+s1050)G

Priv1050 = a + s1050

Alice、Bob共にPub1050 に対するトランザクションにPriv1050 を使用して署名し、ブロードキャストする。

これによって最初に作ったmultisig address から双方とも出金できる。

(Aliceの予測が外れてしまって逃げた場合どうなるのか?当初のcontract(Bitcoin Script)にはOP_CLTVなどで期間が設定されており、期間を過ぎたらBobは全額出金できるため、逃げたらBobが得をすることになる。)

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?