Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
BitVM
Slide 2
Slide 2 text
1 BitVM 現状のBitcoinのコンセンサスルールで、 Bitcoin上で任意の計算の検証を可能にする https://bitvm.org/bitvm.pdf
Slide 3
Slide 3 text
2 任意のロジックを回路にコンパイル 【一般的なプログラム】 1. 高級言語を使ってコードを記述する 2. コンパイラが最終的に機械語(0 or 1)に変換 3. 専用回路(CPUなど)でそれが実行される あらゆる計算はなんらかの回路の形で表現できる BitVMではNANDゲートのみを使用↑ (NANDゲートの組み合わせで他の論理ゲートは構築可能) OR AND XOR NOR NAND
Slide 4
Slide 4 text
3 Bitcoin ScriptでNANDゲートを実現 Bitcoin Scriptの2つのopcodeを使えばNANDゲートを実現できる: ● OP_BOOLAND スタックから2つの要素を取得して、両方とも非0であれば1を、 それ以外であれば0をスタックにプッシュする ● OP_NOT スタックから1つ要素を取得して、要素が0 or 1の場合それを反転して スタックにプッシュ 記述を簡素化するため↑の組み合わせをOP_NAND opcodeとする。
Slide 5
Slide 5 text
4 Bit Value Commitment NANDゲートの入力値、出力値に対するコミットメント OP_IF OP_HASH160 OP_EUALVERIFY <1> OP_ELSE OP_HASH160 OP_EUALVERIFY <0> OP_ENDIF 入力値に対して0 or 1の値を出力するスクリプト ● 2つのハッシュ値(hash0、hash1)を使ったハッシュロック ● hash0のプリイメージが提供されると0が ● hash1のプリイメージ提供されると1が出力される 記述を簡素化するためこの機能を OP_BITCOMMITMENT opocdeとする
Slide 6
Slide 6 text
入力A、B、出力YのNANDゲートのコミットメント 各A, B, Yのhash0, hash1のプリイメージが提供されると スクリプトにより、 A NAND B == Y が評価される。これが成立する場合のみアンロック可能 5 Logic Gate Commitment Bit Value Commitmentを組み合わせたゲートへのコミットメント # 出力Yの提供 OP_BITCOMMITMENT OP_TOALTSTACK # 出力値をアルトスタックに移動 # 入力Bの提供
OP_BITCOMMITMENT OP_TOALTSTACK # 入力値となる結果をアルトスタックに移動 # 入力Aの提供
OP_BITCOMMITMENT # 入力Bの値をメインスタックに移動 OP_FROMALTSTACK OP_NAND # A NAND Bの結果がスタックにプッシュされる # アルトスタックからYを読み込み OP_FROMALTSTACK # A NAND B = Yかどうかチェックする OP_EQUALVERIFY
Slide 7
Slide 7 text
Logic Gate Commitmentを組み合わせると任意の回路を構成できる 例:4つの入力(A, B, C, D)と8つのゲートを持つ回路 ※ ただし、任意の計算をする場合、数十億個の巨大な回路になる 6 Binary Circuit Commitment
Slide 8
Slide 8 text
7 Taptreeへのエンコード 回路を構成したら、回路内の 各Logic Gate Commitmentをリーフノードとした Taptreeを構成する 各ゲートに対する入力値と出力値を提供すればツリー内の任意のゲートを実行できる
Slide 9
Slide 9 text
8 チャレンジ&レスポンス 【ここまで】 1. 任意のロジックを回路にコンパイル 2. 回路に対するBinary Circuit Commitmentを作成 3. 回路内の各Gate CommitmentをリーフとしたTaprootスクリプトを構成 → 任意のロジックの検証が可能なBitcoin Scriptを実現 【検証】 基本的に証明者がコミットしたロジックの計算結果をオフチェーンで提供 その結果に誤りがある場合、ペナルティを課せる。 ● 検証者は証明者に特定のゲートの実行を要求 ● 証明者は指定されたゲートの実行結果で応答
Slide 10
Slide 10 text
証明者と検証者はセットアップ時にチャレンジ&レスポンス用の事前署名済みTxチェーンを用意 9 チャレンジ&レスポンス ● 検証者がチャレンジを開始 ● 検証者がFraud Proofを提示 ● 証明者が1週間待機 ● 証明者が結果を返答 ● 検証者が1週間待機 検証者がプリイメージを 提供して実行ゲートを指定 証明者は指定された ゲートを実行
Slide 11
Slide 11 text
証明者が誤った計算結果を提供した場合、検証者が資金を没収できる 10 チャレンジ&レスポンス 証明者のレスポンスでは、2つの入力と出力値について、 0 or 1を返すために各値について、hash0とhash1のいずれかのプリメージを公開する preimage A0 or A1 preimage B0 or B1 preimage E0 or E1 不正な計算結果を提供する場合、 同じ入力/出力値に対して異なる値が提示されることになり その値の0と1を表す2つのプリイメージが公開される。 その場合、2つのプリイメージの提供により 検証者はコインを没収できる。
Slide 12
Slide 12 text
11 BitVMの制限 ● プロトコルの参加者は2名に限定される ● 任意の計算をBitVM用の回路にコンパイルする高級言語はまだない ● 任意の計算の回路を作成する場合、ゲートの数は膨大になり、 保持するデータ量も膨大になる(数百MB〜数GB) ● Fraud Proofベースの仕組みで、基本的に任意の計算をオンチェーンで実行する仕組みではない ● チャレンジの際、どのゲートを実行すれば効率的に証明できるのか判断するのは難しい BitVM 2へ