アルゴリズムfの場合、相互に信用しない参加者であるアリスとボブは、以下の方法で信頼関係を確立することができます:
上記の2、3、4について、xをレイヤー2トランザクションと初期状態、fをレイヤー2コンセンサスプログラム、yをトランザクションの終了状態とします。これはブロックチェーンのレイヤー2スケーリングソリューションに対応しています。
表1:信頼を確立する方法
さらに、重要なことに注意することが重要です:
現在、Solidityのチューリング完全スマートコントラクトから利益を得て、詐欺証明および有効性証明技術は、Ethereum Layer2スケーリングで広く使用されています。しかし、Bitcoinの範囲内では、Bitcoinの限られたオペコード機能、1000のスタック要素、およびその他の制限により、これらの技術の適用はまだ試験的な段階にあります。この記事では、Bitcoinの範囲内でのBitcoin Layer2スケーリングの文脈での制限とブレークスルー技術をまとめ、有効性証明と詐欺証明技術を研究し、Bitcoinの範囲内でのユニークなスクリプトセグメンテーション技術を概説しています。
ビットコインのパラダイムの下では多くの制限がありますが、これらの制限を克服するためにさまざまな巧妙な方法やテクニックを使うことができます。例えば、ビットコミットメントはUTXOの状態制限を突破することができ、タップルートはスクリプト空間の制限を突破することができ、コネクタ出力はUTXOの支出方法の制限を突破することができ、契約は事前署名の制限を突破することができます。
ビットコインはUTXOモデルを採用しており、各UTXOはロックスクリプトにロックされており、そのUTXOを支払うために満たす必要がある条件を定義しています。ビットコインスクリプトには以下の制限があります:
現在、ビットコインスクリプトは完全にステートレスです。ビットコインスクリプトを実行すると、その実行環境は各スクリプトの後にリセットされます。これにより、ビットコインスクリプトは、同じx値を持つ制約スクリプト1と2をネイティブにサポートできなくなります。ただし、この問題はいくつかの方法で回避でき、核となる考え方は何らかの方法で値に署名することです。値に対して署名を作成できる場合は、ステートフルなビットコインスクリプトを実現できます。つまり、スクリプト 1 と 2 の x 値の署名をチェックすることで、両方のスクリプトで同じ x 値が使用されるように強制できます。矛盾するシグネチャがある場合、つまり、同じ変数 x に対して 2 つの異なる値に符号が付けられている場合、ペナルティが適用される可能性があります。このソリューションは、ビットコミットメントと呼ばれます。
ビットコミットメントの原則は比較的単純です。各ビットに対して、署名されるメッセージ内の各ビットに対して、hash0とhash1の2つの異なるハッシュ値を設定することを指します。署名されるビット値が0である場合、hash0のpreimage0が公開されます。署名されるビット値が1である場合、hash1のpreimage1が公開されます。
単一のビットメッセージm ∈{0,1}を例に取ると、対応するビットコミットメントアンロックスクリプトはいくつかのプレイイメージです。ビットの値が0の場合、対応するアンロックスクリプトはpreimage0である「0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140」です。ビットの値が1の場合、対応するアンロックスクリプトはpreimage1である「0x47c31e611a3bd2f3a7a42207613046703fa27496」です。したがって、ビットコミットメントを使用することで、UTXOの状態制限を突破し、状態を持つBitcoinスクリプトを実現し、さまざまな興味深い新機能を実現することが可能です。
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3 // これはハッシュ1です
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // これはhash0です
OP_EQUAL
OP_BOOLOR
OP_VERIFY
これで、ビットコミットメントの値がスタック上にあります。「0」または「1」のいずれか。
現在、ビットコミットメントの実装は2つあります:
現在、BitVM2ライブラリは、Blake3ハッシュ関数に基づいたWinternitz署名を実装しています。1ビットに対応する署名の長さは約26バイトです。したがって、ビットコミットメントを介して状態を導入することはコストがかかることがわかります。したがって、BitVM2の実装では、メッセージはまず256ビットのハッシュ値にハッシュ化され、その後、ハッシュ値に対してビットコミットメントが行われ、元の長いメッセージの各ビットに直接コミットメントするのではなく、オーバーヘッドを節約します。
2021年11月にアクティブ化されたBitcoin Taprootソフトフォークアップグレードには、3つの提案が含まれています:Schnorr署名(BIP 340)、Taproot(BIP 341)、およびTapScript(BIP 342)。新しいトランザクションタイプであるPay-to-Taproot(P2TR)トランザクションを導入します。P2TRトランザクションは、Taproot、MAST(Merkel Abstract Syntax Tree)、およびSchnorr署名の利点を組み合わせることで、よりプライベート、柔軟でスケーラブルなトランザクションフォーマットを作成できます。
P2TRは、キーパスまたはスクリプトパスに従って支出する2つの方法をサポートしています。
Taproot(BIP 341)の規定によれば、スクリプトパスを介して支出する場合、対応するMerkleパスの長さは最大128を超えることはできません。これは、taptree内のtapleafの数が2^128を超えることはできないことを意味します。2017年のSegWitアップグレード以来、Bitcoinネットワークはブロックサイズをウェイトユニットで測定し、最大サポートは4百万ウェイトユニット(約4MB)です。P2TR出力がスクリプトパスを介して支出される場合、1つのtapleafスクリプトのみを公開する必要があります。つまり、ブロックには1つのtapleafスクリプトがパックされています。これは、P2TRトランザクションの場合、各tapleafに対応するスクリプトサイズは最大約4MBになる可能性があることを意味します。ただし、Bitcoinのデフォルトポリシーでは、多くのノードが400K未満のトランザクションのみを転送します。より大きなトランザクションは、マイナーと協力してパックする必要があります。
Taprootがもたらすスクリプト空間のプレミアムは、既存のオペコードを使用して乗算やハッシュなどの暗号化操作をシミュレートする価値を高めます。
P2TRに基づいて検証可能な計算を構築する場合、対応するスクリプトサイズは4MBの制約に制限されなくなり、複数のTapleafに分散された複数のサブファンクションに分割できるため、4MBのスクリプトスペースの制限を突破できます。実際、現在のBitVM2に実装されているGroth16検証アルゴリズムのサイズは最大2GBです。しかし、約1000個のタップリーフに分割して分散させることができ、ビットコミットメントと組み合わせることで、各サブ関数の入力と出力の整合性を制約することができ、計算全体の完全性と正確性を確保することができます。
現在、ビットコインは1つのUTXOに対して、スクリプトによる支払いと公開鍵による支払いの2つのネイティブな支払い方法を提供しています。したがって、正しい公開鍵署名またはスクリプト条件が満たされている限り、UTXOを使用することができます。2つのUTXOは独立して使用することができ、2つのUTXOを制約する制限を追加することはできません。
しかし、Arkプロトコルの創始者であるBurakは、SIGHASHフラグを巧みに利用してコネクタ出力を実現しました。具体的には、アリスはBTCをボブに送信するための署名を作成できます。ただし、署名は複数の入力にコミットできるため、アリスは署名を条件付きに設定できます:署名は、そのトランザクションが2番目の入力を消費する場合にのみ、Taketxトランザクションに対して有効です。2番目の入力はコネクタと呼ばれ、UTXO AとUTXO Bをリンクします。言い換えれば、Taketxトランザクションは、UTXO BがChallengetxによって使用されていない場合にのみ有効です。したがって、コネクタ出力を破棄することで、Taketxトランザクションの有効性をブロックできます。
図1: コネクタ出力のイラスト
BitVM2プロトコルでは、コネクタの出力はif...else関数として機能します。コネクタの出力がトランザクションによって使用されると、他のトランザクションによって使用されることはできず、排他的な使用が確保されます。実際の展開では、チャレンジ・レスポンス期間を許可するために、タイムロック付きの追加のUTXOが導入されます。さらに、対応するコネクタの出力は必要に応じて異なる支出戦略を設定することも可能であり、チャレンジトランザクションの場合は任意の当事者が支出できるようにし、レスポンストランザクションのタイムアウト後にオペレータのみが支出できるようにすることもできます。
現在、ビットコインスクリプトは、UTXOをさらに使用する方法を制限することなく、主にロック解除の条件を制限しています。これは、ビットコインスクリプトがトランザクション自体の内容を読み取ることができないため、トランザクションのイントロスペクションを実現できないためです。ビットコインスクリプトがトランザクションの内容(アウトプットを含む)をチェックできれば、コントラクト機能を実現できます。
現在の契約の実装は2つのカテゴリに分けることができます:
有効性の証明と詐欺証明の両方がビットコインのレイヤー2スケーリングに使用されることがあります。主な違いは表2に示されています。
表2:有効性証明 vs 詐欺証明
ビットコミットメント、Taproot、事前署名、およびコネクタ出力に基づいて、ビットコインに基づく詐欺の証拠を構築できます。Taprootをベースに、 ビットコインに基づく有効性の証明は、 OP_CATなどのコントラクトオペコードを導入することで構築することもできます。さらに、ボブにアドミッションシステムがあるかどうかに応じて、詐欺の証拠は許可された詐欺の証拠と許可のない詐欺の証拠に分けることができます。許可制の不正証明では、特定のグループのみがボブとしてチャレンジを開始できますが、パーミッションレスの不正証明では、第三者がボブとして行動してチャレンジを開始できます。パーミッションレスの不正証明のセキュリティは、許可されたものよりも優れており、許可された参加者間の共謀のリスクを軽減します。
AliceとBobの間のチャレンジレスポンスインタラクションの数に応じて、詐欺証明は1ラウンドの詐欺証明とマルチラウンドの詐欺証明に分けることができます。図2に示すように。
図2:ワンラウンドの詐欺証明対マルチラウンドの詐欺証明
表3に示されているように、詐欺証明は、1ラウンドの相互作用モデルとマルチラウンドの相互作用モデルを含むさまざまな相互作用モデルを介して実装することができます。
表3: ワンラウンドインタラクション対マルチラウンドインタラクション
BitcoinのLayer2スケーリングパラダイムでは、BitVM1はマルチラウンドの詐欺証明メカニズムを採用し、BitVM2はワンラウンドの詐欺証明メカニズムを使用しています。また、bitcoin-circle starkは有効性の証明を利用しています。これらのうち、BitVM1とBitVM2はBitcoinプロトコルに変更を加えることなく実装することができますが、bitcoin-circle starkでは新しいopcode OP_CATの導入が必要です。
ほとんどの計算タスクでは、Bitcoinのシグネット、テストネット、およびメインネットでは4MBのスクリプトを完全に表すことができません。そのため、完全な計算スクリプトを4MB未満のチャンクに分割し、さまざまなtapleafに分散するスクリプト分割技術が必要となります。
表3に示すように、マルチラウンドの詐欺証明は、オンチェーンの仲裁計算を削減したい場合や、1回で問題のある計算セグメントを特定することができない場合に適しています。名前が示すように、マルチラウンドの詐欺証明には、問題のある計算セグメントを特定し、その後特定されたセグメントに基づいて仲裁を行うために、証明者と検証者の間で複数のラウンドのやり取りが必要です。
Robin Linusの初期のBitVMホワイトペーパー(一般的にはBitVM1と呼ばれる)では、マルチラウンド詐欺証明が使用されていました。各チャレンジ期間が1週間続き、問題のある計算セグメントを特定するためにバイナリサーチメソッドを使用すると、Groth16 Verifierのオンチェーンチャレンジ応答期間は最大30週間になり、タイムリネスが悪くなります。バイナリサーチよりも効率的なn-aryサーチメソッドを研究しているチームも現在ありますが、そのタイムリネスは1ラウンドの詐欺証明の2週間サイクルと比較して依然として著しく低いです。
現在、Bitcoinパラダイムのマルチラウンド詐欺証明では、許可されたチャレンジを使用していますが、ワンラウンド詐欺証明では許可されていないチャレンジ手法が採用されており、参加者間の共謀のリスクを低減し、セキュリティを向上させています。このため、Robin LinusはTaprootの利点を最大限に活用してBitVM1を最適化しました。インタラクションラウンドの数は1つに減少し、チャレンジ手法も許可されていないアプローチに拡大されましたが、オンチェーンの仲裁計算の増加が発生しました。
このモデルでは、詐欺証明の検証はプルーバとベリファイヤーの間で単一のインタラクションを通じて完了することができます。ベリファイヤーはただ1つのチャレンジを開始するだけでよく、プルーバは1回だけ応答するだけでよいです。この応答では、プルーバは計算が正しいと主張する証拠を提供しなければなりません。もしベリファイヤーがその証拠に矛盾点を見つけることができれば、チャレンジは成功となります。そうでなければ、失敗となります。ワンラウンドのインタラクティブ詐欺証明の特徴は、表3に示されています。
図3:1ラウンドの詐欺証明
2024年8月15日、Robin LinusはBitVM2:ビットコインをセカンドレイヤーに接続する技術的なホワイトペーパーを発表しました。このホワイトペーパーでは、図3に示されているようなワンラウンドの詐欺証明メソッドを使用したクロスチェーンブリッジが実装されています。
OPCATは、Bitcoinがリリースされた当初のスクリプト言語の一部でしたが、2010年にセキュリティの脆弱性のために無効化されました。しかし、Bitcoinコミュニティは何年もの間、その再活性化について議論してきました。OPCATは現在、番号347が割り当てられ、Bitcoinのsignetで有効化されています。
OP_CATの主な機能は、スタック内の2つの要素を結合し、結合された結果をスタックに戻すことです。この機能により、Bitcoin上の契約とSTARK検証者の可能性が広がります。
SNARK/STARK証明後の証明を検証するために対応する検証アルゴリズムを実行するために必要な計算負荷は、元の計算fを直接実行するために必要な負荷よりもはるかに小さいですが、ビットコインスクリプトで検証アルゴリズムを実装するために変換するときに必要なスクリプトの量は依然として膨大です。現在、既存のビットコインオペコードに基づいて、最適化されたGroth16検証ツールスクリプトサイズとFflonk検証ツールスクリプトサイズはどちらも2GBを超えています。ただし、単一のビットコインブロックのサイズはわずか4MBであり、1つのブロック内で検証スクリプト全体を実行することは不可能です。ただし、Taprootのアップグレード以降、ビットコインはTapleafによるスクリプトの実行をサポートしているため、検証スクリプトを複数のチャンクに分割し、各チャンクをタップツリーを構築するためのタップリーフとして機能させることができます。チャンク間の値の一貫性は、ビットコミットメントによって保証できます。
OP_CAT契約の存在下では、STARK検証者を400KB以下の複数の標準トランザクションに分割することができ、マイナーとの協力なしにSTARK有効性証明の検証を完了することができます。
このセクションでは、新しいオペコードを導入またはアクティブ化することなく、既存の条件下でのビットコインスクリプトの関連する分割技術に焦点を当てます。
スクリプト分割を実行する際には、次の情報の次元をバランスする必要があります:
現在、スクリプト分割の方法は次の3つの主なカテゴリに分けることができます:
例えば、複数の最適化ラウンドの後、Groth16検証者のスクリプトサイズは約7GBから約1.26GBに削減されました。この全体的な計算最適化に加えて、各チャンクはスタックスペースを最大限に活用するために個別に最適化することもできます。たとえば、より良いルックアップテーブルベースのアルゴリズムを導入したり、ルックアップテーブルの動的な読み込みとアンロードを行うことで、各チャンクのスクリプトサイズをさらに削減することができます。
web2プログラミング言語の計算コストとランタイム環境は、ビットコインスクリプトとはまったく異なるため、さまざまなアルゴリズムの既存の実装を単純にビットコインスクリプトに翻訳することは不可能です。そのため、ビットコインのシナリオに特化した最適化が考慮される必要があります:
この記事はまず、Bitcoinスクリプトの制限について説明し、UTXOの状態制限を克服するためにBitcoinコミットメントを使用し、スクリプト空間の制限を突破するためにTaprootを使用し、UTXOの支出方法の制限を回避するためにコネクタ出力を使用し、事前署名の制限を克服するために契約を使用する方法について議論します。その後、詐欺証明と有効性証明の特徴、許可された詐欺証明と許可されていない詐欺証明の特徴、1ラウンドとマルチラウンドの詐欺証明の区別、およびBitcoinスクリプト分割の技術の包括的な概要と要約を提供します。
アルゴリズムfの場合、相互に信用しない参加者であるアリスとボブは、以下の方法で信頼関係を確立することができます:
上記の2、3、4について、xをレイヤー2トランザクションと初期状態、fをレイヤー2コンセンサスプログラム、yをトランザクションの終了状態とします。これはブロックチェーンのレイヤー2スケーリングソリューションに対応しています。
表1:信頼を確立する方法
さらに、重要なことに注意することが重要です:
現在、Solidityのチューリング完全スマートコントラクトから利益を得て、詐欺証明および有効性証明技術は、Ethereum Layer2スケーリングで広く使用されています。しかし、Bitcoinの範囲内では、Bitcoinの限られたオペコード機能、1000のスタック要素、およびその他の制限により、これらの技術の適用はまだ試験的な段階にあります。この記事では、Bitcoinの範囲内でのBitcoin Layer2スケーリングの文脈での制限とブレークスルー技術をまとめ、有効性証明と詐欺証明技術を研究し、Bitcoinの範囲内でのユニークなスクリプトセグメンテーション技術を概説しています。
ビットコインのパラダイムの下では多くの制限がありますが、これらの制限を克服するためにさまざまな巧妙な方法やテクニックを使うことができます。例えば、ビットコミットメントはUTXOの状態制限を突破することができ、タップルートはスクリプト空間の制限を突破することができ、コネクタ出力はUTXOの支出方法の制限を突破することができ、契約は事前署名の制限を突破することができます。
ビットコインはUTXOモデルを採用しており、各UTXOはロックスクリプトにロックされており、そのUTXOを支払うために満たす必要がある条件を定義しています。ビットコインスクリプトには以下の制限があります:
現在、ビットコインスクリプトは完全にステートレスです。ビットコインスクリプトを実行すると、その実行環境は各スクリプトの後にリセットされます。これにより、ビットコインスクリプトは、同じx値を持つ制約スクリプト1と2をネイティブにサポートできなくなります。ただし、この問題はいくつかの方法で回避でき、核となる考え方は何らかの方法で値に署名することです。値に対して署名を作成できる場合は、ステートフルなビットコインスクリプトを実現できます。つまり、スクリプト 1 と 2 の x 値の署名をチェックすることで、両方のスクリプトで同じ x 値が使用されるように強制できます。矛盾するシグネチャがある場合、つまり、同じ変数 x に対して 2 つの異なる値に符号が付けられている場合、ペナルティが適用される可能性があります。このソリューションは、ビットコミットメントと呼ばれます。
ビットコミットメントの原則は比較的単純です。各ビットに対して、署名されるメッセージ内の各ビットに対して、hash0とhash1の2つの異なるハッシュ値を設定することを指します。署名されるビット値が0である場合、hash0のpreimage0が公開されます。署名されるビット値が1である場合、hash1のpreimage1が公開されます。
単一のビットメッセージm ∈{0,1}を例に取ると、対応するビットコミットメントアンロックスクリプトはいくつかのプレイイメージです。ビットの値が0の場合、対応するアンロックスクリプトはpreimage0である「0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140」です。ビットの値が1の場合、対応するアンロックスクリプトはpreimage1である「0x47c31e611a3bd2f3a7a42207613046703fa27496」です。したがって、ビットコミットメントを使用することで、UTXOの状態制限を突破し、状態を持つBitcoinスクリプトを実現し、さまざまな興味深い新機能を実現することが可能です。
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3 // これはハッシュ1です
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // これはhash0です
OP_EQUAL
OP_BOOLOR
OP_VERIFY
これで、ビットコミットメントの値がスタック上にあります。「0」または「1」のいずれか。
現在、ビットコミットメントの実装は2つあります:
現在、BitVM2ライブラリは、Blake3ハッシュ関数に基づいたWinternitz署名を実装しています。1ビットに対応する署名の長さは約26バイトです。したがって、ビットコミットメントを介して状態を導入することはコストがかかることがわかります。したがって、BitVM2の実装では、メッセージはまず256ビットのハッシュ値にハッシュ化され、その後、ハッシュ値に対してビットコミットメントが行われ、元の長いメッセージの各ビットに直接コミットメントするのではなく、オーバーヘッドを節約します。
2021年11月にアクティブ化されたBitcoin Taprootソフトフォークアップグレードには、3つの提案が含まれています:Schnorr署名(BIP 340)、Taproot(BIP 341)、およびTapScript(BIP 342)。新しいトランザクションタイプであるPay-to-Taproot(P2TR)トランザクションを導入します。P2TRトランザクションは、Taproot、MAST(Merkel Abstract Syntax Tree)、およびSchnorr署名の利点を組み合わせることで、よりプライベート、柔軟でスケーラブルなトランザクションフォーマットを作成できます。
P2TRは、キーパスまたはスクリプトパスに従って支出する2つの方法をサポートしています。
Taproot(BIP 341)の規定によれば、スクリプトパスを介して支出する場合、対応するMerkleパスの長さは最大128を超えることはできません。これは、taptree内のtapleafの数が2^128を超えることはできないことを意味します。2017年のSegWitアップグレード以来、Bitcoinネットワークはブロックサイズをウェイトユニットで測定し、最大サポートは4百万ウェイトユニット(約4MB)です。P2TR出力がスクリプトパスを介して支出される場合、1つのtapleafスクリプトのみを公開する必要があります。つまり、ブロックには1つのtapleafスクリプトがパックされています。これは、P2TRトランザクションの場合、各tapleafに対応するスクリプトサイズは最大約4MBになる可能性があることを意味します。ただし、Bitcoinのデフォルトポリシーでは、多くのノードが400K未満のトランザクションのみを転送します。より大きなトランザクションは、マイナーと協力してパックする必要があります。
Taprootがもたらすスクリプト空間のプレミアムは、既存のオペコードを使用して乗算やハッシュなどの暗号化操作をシミュレートする価値を高めます。
P2TRに基づいて検証可能な計算を構築する場合、対応するスクリプトサイズは4MBの制約に制限されなくなり、複数のTapleafに分散された複数のサブファンクションに分割できるため、4MBのスクリプトスペースの制限を突破できます。実際、現在のBitVM2に実装されているGroth16検証アルゴリズムのサイズは最大2GBです。しかし、約1000個のタップリーフに分割して分散させることができ、ビットコミットメントと組み合わせることで、各サブ関数の入力と出力の整合性を制約することができ、計算全体の完全性と正確性を確保することができます。
現在、ビットコインは1つのUTXOに対して、スクリプトによる支払いと公開鍵による支払いの2つのネイティブな支払い方法を提供しています。したがって、正しい公開鍵署名またはスクリプト条件が満たされている限り、UTXOを使用することができます。2つのUTXOは独立して使用することができ、2つのUTXOを制約する制限を追加することはできません。
しかし、Arkプロトコルの創始者であるBurakは、SIGHASHフラグを巧みに利用してコネクタ出力を実現しました。具体的には、アリスはBTCをボブに送信するための署名を作成できます。ただし、署名は複数の入力にコミットできるため、アリスは署名を条件付きに設定できます:署名は、そのトランザクションが2番目の入力を消費する場合にのみ、Taketxトランザクションに対して有効です。2番目の入力はコネクタと呼ばれ、UTXO AとUTXO Bをリンクします。言い換えれば、Taketxトランザクションは、UTXO BがChallengetxによって使用されていない場合にのみ有効です。したがって、コネクタ出力を破棄することで、Taketxトランザクションの有効性をブロックできます。
図1: コネクタ出力のイラスト
BitVM2プロトコルでは、コネクタの出力はif...else関数として機能します。コネクタの出力がトランザクションによって使用されると、他のトランザクションによって使用されることはできず、排他的な使用が確保されます。実際の展開では、チャレンジ・レスポンス期間を許可するために、タイムロック付きの追加のUTXOが導入されます。さらに、対応するコネクタの出力は必要に応じて異なる支出戦略を設定することも可能であり、チャレンジトランザクションの場合は任意の当事者が支出できるようにし、レスポンストランザクションのタイムアウト後にオペレータのみが支出できるようにすることもできます。
現在、ビットコインスクリプトは、UTXOをさらに使用する方法を制限することなく、主にロック解除の条件を制限しています。これは、ビットコインスクリプトがトランザクション自体の内容を読み取ることができないため、トランザクションのイントロスペクションを実現できないためです。ビットコインスクリプトがトランザクションの内容(アウトプットを含む)をチェックできれば、コントラクト機能を実現できます。
現在の契約の実装は2つのカテゴリに分けることができます:
有効性の証明と詐欺証明の両方がビットコインのレイヤー2スケーリングに使用されることがあります。主な違いは表2に示されています。
表2:有効性証明 vs 詐欺証明
ビットコミットメント、Taproot、事前署名、およびコネクタ出力に基づいて、ビットコインに基づく詐欺の証拠を構築できます。Taprootをベースに、 ビットコインに基づく有効性の証明は、 OP_CATなどのコントラクトオペコードを導入することで構築することもできます。さらに、ボブにアドミッションシステムがあるかどうかに応じて、詐欺の証拠は許可された詐欺の証拠と許可のない詐欺の証拠に分けることができます。許可制の不正証明では、特定のグループのみがボブとしてチャレンジを開始できますが、パーミッションレスの不正証明では、第三者がボブとして行動してチャレンジを開始できます。パーミッションレスの不正証明のセキュリティは、許可されたものよりも優れており、許可された参加者間の共謀のリスクを軽減します。
AliceとBobの間のチャレンジレスポンスインタラクションの数に応じて、詐欺証明は1ラウンドの詐欺証明とマルチラウンドの詐欺証明に分けることができます。図2に示すように。
図2:ワンラウンドの詐欺証明対マルチラウンドの詐欺証明
表3に示されているように、詐欺証明は、1ラウンドの相互作用モデルとマルチラウンドの相互作用モデルを含むさまざまな相互作用モデルを介して実装することができます。
表3: ワンラウンドインタラクション対マルチラウンドインタラクション
BitcoinのLayer2スケーリングパラダイムでは、BitVM1はマルチラウンドの詐欺証明メカニズムを採用し、BitVM2はワンラウンドの詐欺証明メカニズムを使用しています。また、bitcoin-circle starkは有効性の証明を利用しています。これらのうち、BitVM1とBitVM2はBitcoinプロトコルに変更を加えることなく実装することができますが、bitcoin-circle starkでは新しいopcode OP_CATの導入が必要です。
ほとんどの計算タスクでは、Bitcoinのシグネット、テストネット、およびメインネットでは4MBのスクリプトを完全に表すことができません。そのため、完全な計算スクリプトを4MB未満のチャンクに分割し、さまざまなtapleafに分散するスクリプト分割技術が必要となります。
表3に示すように、マルチラウンドの詐欺証明は、オンチェーンの仲裁計算を削減したい場合や、1回で問題のある計算セグメントを特定することができない場合に適しています。名前が示すように、マルチラウンドの詐欺証明には、問題のある計算セグメントを特定し、その後特定されたセグメントに基づいて仲裁を行うために、証明者と検証者の間で複数のラウンドのやり取りが必要です。
Robin Linusの初期のBitVMホワイトペーパー(一般的にはBitVM1と呼ばれる)では、マルチラウンド詐欺証明が使用されていました。各チャレンジ期間が1週間続き、問題のある計算セグメントを特定するためにバイナリサーチメソッドを使用すると、Groth16 Verifierのオンチェーンチャレンジ応答期間は最大30週間になり、タイムリネスが悪くなります。バイナリサーチよりも効率的なn-aryサーチメソッドを研究しているチームも現在ありますが、そのタイムリネスは1ラウンドの詐欺証明の2週間サイクルと比較して依然として著しく低いです。
現在、Bitcoinパラダイムのマルチラウンド詐欺証明では、許可されたチャレンジを使用していますが、ワンラウンド詐欺証明では許可されていないチャレンジ手法が採用されており、参加者間の共謀のリスクを低減し、セキュリティを向上させています。このため、Robin LinusはTaprootの利点を最大限に活用してBitVM1を最適化しました。インタラクションラウンドの数は1つに減少し、チャレンジ手法も許可されていないアプローチに拡大されましたが、オンチェーンの仲裁計算の増加が発生しました。
このモデルでは、詐欺証明の検証はプルーバとベリファイヤーの間で単一のインタラクションを通じて完了することができます。ベリファイヤーはただ1つのチャレンジを開始するだけでよく、プルーバは1回だけ応答するだけでよいです。この応答では、プルーバは計算が正しいと主張する証拠を提供しなければなりません。もしベリファイヤーがその証拠に矛盾点を見つけることができれば、チャレンジは成功となります。そうでなければ、失敗となります。ワンラウンドのインタラクティブ詐欺証明の特徴は、表3に示されています。
図3:1ラウンドの詐欺証明
2024年8月15日、Robin LinusはBitVM2:ビットコインをセカンドレイヤーに接続する技術的なホワイトペーパーを発表しました。このホワイトペーパーでは、図3に示されているようなワンラウンドの詐欺証明メソッドを使用したクロスチェーンブリッジが実装されています。
OPCATは、Bitcoinがリリースされた当初のスクリプト言語の一部でしたが、2010年にセキュリティの脆弱性のために無効化されました。しかし、Bitcoinコミュニティは何年もの間、その再活性化について議論してきました。OPCATは現在、番号347が割り当てられ、Bitcoinのsignetで有効化されています。
OP_CATの主な機能は、スタック内の2つの要素を結合し、結合された結果をスタックに戻すことです。この機能により、Bitcoin上の契約とSTARK検証者の可能性が広がります。
SNARK/STARK証明後の証明を検証するために対応する検証アルゴリズムを実行するために必要な計算負荷は、元の計算fを直接実行するために必要な負荷よりもはるかに小さいですが、ビットコインスクリプトで検証アルゴリズムを実装するために変換するときに必要なスクリプトの量は依然として膨大です。現在、既存のビットコインオペコードに基づいて、最適化されたGroth16検証ツールスクリプトサイズとFflonk検証ツールスクリプトサイズはどちらも2GBを超えています。ただし、単一のビットコインブロックのサイズはわずか4MBであり、1つのブロック内で検証スクリプト全体を実行することは不可能です。ただし、Taprootのアップグレード以降、ビットコインはTapleafによるスクリプトの実行をサポートしているため、検証スクリプトを複数のチャンクに分割し、各チャンクをタップツリーを構築するためのタップリーフとして機能させることができます。チャンク間の値の一貫性は、ビットコミットメントによって保証できます。
OP_CAT契約の存在下では、STARK検証者を400KB以下の複数の標準トランザクションに分割することができ、マイナーとの協力なしにSTARK有効性証明の検証を完了することができます。
このセクションでは、新しいオペコードを導入またはアクティブ化することなく、既存の条件下でのビットコインスクリプトの関連する分割技術に焦点を当てます。
スクリプト分割を実行する際には、次の情報の次元をバランスする必要があります:
現在、スクリプト分割の方法は次の3つの主なカテゴリに分けることができます:
例えば、複数の最適化ラウンドの後、Groth16検証者のスクリプトサイズは約7GBから約1.26GBに削減されました。この全体的な計算最適化に加えて、各チャンクはスタックスペースを最大限に活用するために個別に最適化することもできます。たとえば、より良いルックアップテーブルベースのアルゴリズムを導入したり、ルックアップテーブルの動的な読み込みとアンロードを行うことで、各チャンクのスクリプトサイズをさらに削減することができます。
web2プログラミング言語の計算コストとランタイム環境は、ビットコインスクリプトとはまったく異なるため、さまざまなアルゴリズムの既存の実装を単純にビットコインスクリプトに翻訳することは不可能です。そのため、ビットコインのシナリオに特化した最適化が考慮される必要があります:
この記事はまず、Bitcoinスクリプトの制限について説明し、UTXOの状態制限を克服するためにBitcoinコミットメントを使用し、スクリプト空間の制限を突破するためにTaprootを使用し、UTXOの支出方法の制限を回避するためにコネクタ出力を使用し、事前署名の制限を克服するために契約を使用する方法について議論します。その後、詐欺証明と有効性証明の特徴、許可された詐欺証明と許可されていない詐欺証明の特徴、1ラウンドとマルチラウンドの詐欺証明の区別、およびBitcoinスクリプト分割の技術の包括的な概要と要約を提供します。