ビットコインのスケーリングの場合、主なテクノロジーには、ステートチャネル、サイドチェーン、およびクライアント側の検証が含まれます。ステートチャネルは、安全で多様な決済ソリューションを提供しますが、任意に複雑な計算を検証する能力は限られています。この制限により、複雑で条件付きのロジックと相互作用を必要とするさまざまなシナリオでの適用性が低下します。サイドチェーンは幅広いアプリケーションをサポートし、ビットコインの機能を超えた多様性を提供しますが、セキュリティは低くなります。このセキュリティの違いは、独立したコンセンサスメカニズムを使用するサイドチェーンに起因しており、ビットコインのコンセンサスメカニズムよりもはるかに堅牢ではありません。ビットコイン UTXOモデルを使用したクライアント側の検証は、より複雑なトランザクションを処理できますが、ビットコインとの双方向のチェックと制約がないため、セキュリティが低下します。クライアント側の検証プロトコルのオフチェーン設計は、サーバーまたはクラウドインフラストラクチャに依存しているため、中央集権化や、侵害されたサーバーによる検閲の可能性につながる可能性があります。また、クライアント側の検証をオフチェーンで設計すると、ブロックチェーンのインフラがより複雑になり、スケーラビリティの問題につながる可能性があります。
2023年12月、ZeroSyncのプロジェクトリーダーであるロビン・リヌスが、「」というタイトルのホワイトペーパーを公開しました。BitVM:Bitcoin上で何でも計算ビットのプログラマビリティを向上させるために多くの考察を呼び起こした。論文では、ネットワークの合意ルールを変更することなく、Bitcoinの基本原則を変更することなく、どのような複雑な計算も実行できるチューリング完全Bitcoin契約ソリューションが提案されています。BitVMは、BitcoinスクリプトとTaprootを利用して楽観的なロールアップを実装します。 Lamport署名(ビットコミットメントとしても知られています)を使用して、2つのBitcoin UTXO間の接続を確立し、状態を持つBitcoinスクリプトを可能にします。大規模なプログラムはTaprootアドレス内にコミットされ、オペレータとバリデータは包括的なオフチェーンの相互作用に従事し、ブロックチェーンにほとんどの足跡を残しません。両当事者が協力すれば、どのような複雑な状態を持つオフチェーン計算も、ブロックチェーンに痕跡を残すことなく実行できます。ただし、当事者が協力しない場合、紛争が発生した場合にはオンチェーンの実行が必要です。そのため、BitVMはBitcoinの潜在的なユースケースを大幅に拡大し、通貨だけでなく、さまざまな分散型アプリケーションや複雑な計算タスクの検証プラットフォームとしても機能するようにしています。
しかし、ビットVM技術の利点にもかかわらず、ビットコインのスケーリングにおける技術はまだ初期段階にあり、いくつかの効率性およびセキュリティの問題に直面しています。たとえば、(1)課題と応答には複数のやり取りが必要で、高い取引手数料と長い課題期間をもたらします。(2) Lamportワンタイム署名はデータ長が長く、データサイズを削減する必要があります。(3)高いハッシュ関数の複雑さにより、コスト削減のためにビットコインに適したハッシュ関数が必要です。(4)既存のビットVM契約は大きく、ビットコインのブロック容量が限られているため、スクリプトレススクリプトを使用することでスクリプトレススクリプトビットVMを実現し、ビットコインのブロックスペースを節約し、ビットVMの効率を向上させるのに役立ちます。(5)現在のビットVMは許可モデルで動作し、課題はコンソーシアムメンバーによってのみ開始され、2者に限定されていますが、これを許可されていない多者間の課題モデルに拡張することで、信頼仮定をさらに削減できます。これらの問題に対処するため、論文ではビットVMの効率性とセキュリティを向上させるためのいくつかの最適化アイデアを提案しています。
BitVMの計算はオフチェーンで発生しますが、これらの計算の検証はオンチェーンで行われます。 Bitcoinブロックの1MB制限があるため、複雑な計算の検証が必要な場合、OPテクノロジーをチャレンジレスポンスモードで使用して、より高い複雑さの計算検証をサポートできます。
Optimistic RollupやMATT提案(Merkelize All The Things)に類似して、BitVMシステムは詐欺証明と挑戦応答プロトコルに基づいていますが、Bitcoinのコンセンサスルールの変更は必要ありません。 BitVMの基本的なプリミティブはシンプルで、主にハッシュロック、タイムロック、および大規模なTaprootツリーに基づいています。
プルーバーはプログラムをバイト単位でコミットしますが、すべての計算をチェーン上で検証することはコストがかかりすぎます。そのため、検証者は、プルーバーの誤った主張を簡潔に反論するために、注意深く設計された一連のチャレンジを行います。プルーバーと検証者は、紛争を解決するために一連のチャレンジとレスポンストランザクションに共同で署名し、ビットコイン上での一般的な計算検証を可能にします。
BitVMの主要なコンポーネントには、次のものがあります:
BitVMのチャレンジプログラムの最大ステップ数が2^{32}であると仮定すると、約17GBのメモリ(2^{32}×4バイト)が必要になります。最悪の場合、約40ラウンドのチャレンジとレスポンスが約6ヶ月かかる可能性があり、合計スクリプトサイズは約150KBです。このようなシナリオではインセンティブが不十分ですが、実際にはまれにしか発生しません。
BitVMでのチャレンジの数を減らすためにゼロ知識証明を使用すると、その効率が向上する可能性があります。ゼロ知識証明理論によれば、データDataがアルゴリズムFを満たす場合、証明が検証アルゴリズムVerifyを満たすとTrueが出力されます。逆に、DataがFを満たさない場合、証明はVerifyを満たさずFalseが出力されます。BitVMシステムでは、チャレンジャーがプローバーのデータを受け入れない場合、チャレンジが開始されます。
アルゴリズムFについて、2^n回の反復が必要であると仮定し、バイナリサーチアプローチを使用すると、エラーポイントを見つけるのに2^n回の反復が必要です。アルゴリズムの複雑さが高すぎ、nが大きいため、完了に長い時間がかかります。ただし、Zero-Knowledge Proof検証アルゴリズムVerifyの複雑さは固定されています。証明および検証プロセスVerifyを公開することで、Falseの出力を見ることが可能です。Zero-Knowledge Proofsの利点は、バイナリサーチを使用して元のアルゴリズムFを開く際に必要な計算量よりも、検証アルゴリズムVerifyを開くのに必要な計算量が低いことにあります。したがって、Zero-Knowledge Proofsを使用すると、BitVMは元のアルゴリズムFに挑戦するのではなく、検証アルゴリズムVerifyに挑戦し、挑戦ラウンドの数を減らし、挑戦期間を短縮することができます。
ゼロ知識証明と詐欺証明の有効性は異なるセキュリティの前提に依存していますが、これらを組み合わせてZK詐欺証明を構築し、オンデマンドZK証明を実装することができます。完全なZKロールアップとは異なり、オンデマンドモデルではチャレンジが発生したときにのみZK証明が必要で、生成された状態がチャレンジされるまで有効であると仮定される楽観的な設計が維持されます。状態がチャレンジされない場合、ZK証明は必要ありません。ただし、チャレンジが発生すると、チャレンジされたブロック内のすべてのトランザクションの正確性のためにZK証明が生成される必要があります。将来的には、個々の争議中の命令に対してZK詐欺証明を生成することが可能になり、ZK証明を継続的に生成する計算コストを回避できます。
コンセンサスルールによると、レガシー(非Segwit)トランザクションの最大サイズは1MBであり、これはブロック全体を埋めることができます。しかし、レガシートランザクションの標準限界は100kBに設定されています。Segwitトランザクションの場合、コンセンサスルールによる最大サイズは4MBで、これは重みの限界として知られていますが、標準限界は400kBです。
ランポート署名はBitVMの基本的な構成要素であり、署名と公開鍵の長さを短縮することは取引データサイズを減らし、取引手数料を削減するのに役立ちます。ランポートワンタイム署名にはハッシュ関数(1方向の置換関数fのようなもの)が必要です。ランポートワンタイム署名方式では、メッセージ長はvビットであり、公開鍵と署名の長さは両方とも2vビットです。これらの長い署名と公開鍵は大量のストレージガスを消費します。したがって、署名と公開鍵の長さを短縮できる署名方式を探ることが必要です。ランポートワンタイム署名と比較して、ウィンタニッツワンタイム署名は署名と公開鍵の長さを大幅に短縮しますが、署名と検証の計算複雑さを増加させます。
ヴィンターニッツのワンタイム署名方式では、特殊関数 P が v ビット メッセージを長さ n のベクトル s にマッピングし、s の各要素は {0,...,d} の値を取ります。ランポートのワンタイム署名方式は、ヴィンターニッツ方式の特殊なケースで、d=1 です。ヴィンターニッツスキームでは、n、d、v の関係はほぼ n≈v/log2(d+1) です。d=15 のとき、n≈(v/4)+1 です。n 個の要素を持つ Winternitz 署名の場合、公開鍵と署名の長さは Lamport の 1 回限りの署名スキームよりも 4 倍短くなりますが、検証の複雑さは 4 倍になります。ヴィンターニッツのワンタイム署名に BitVM で d=15,v=160,f=ripemd160(x) を使用すると、ビットコミットメントサイズを 50% 削減できるため、BitVM のトランザクション手数料を少なくとも 50% 削減できます。将来的には、既存のヴィンターニッツビットコインスクリプトの実装を最適化しながら、ビットコインスクリプトで表現可能なよりコンパクトなワンタイム署名スキームの探求を追求することができます。
現在、BitcoinネットワークはOP_CATをサポートしていないため、Merkleパスの検証のために文字列を連結することはできません。したがって、既存のBitcoinスクリプトを使用して、スクリプトサイズとスクリプトウィットネスサイズの両方において最もサイズ効率の良い方法でBitcoinに対応したハッシュ関数を実装する必要があります。Merkle検証証明をサポートするために。
BLAKE3は、BLAKE2ハッシュ関数の最適化バージョンであり、Baoツリーモードを導入しています。BLAKE2sベースと比較して、その圧縮関数のラウンド数は10から7に削減されています。BLAKE3ハッシュ関数は、入力を1024バイトのチャンクに分割し、最後のチャンクは短くても空ではない可能性があります。1つのチャンクのみの場合、それはルートノードとツリーの唯一のノードとして機能します。これらのチャンクはバイナリツリーの葉ノードとして配置され、各チャンクは独立して圧縮されます。
BitVMを使用してMerkle包含証明を検証する場合、ハッシュ操作の入力は、合計64バイトの2つの連結された256ビットハッシュ値で構成されています。 BLAKE3ハッシュ関数を使用すると、これらの64バイトは単一のチャンク内に収まるため、BLAKE3ハッシュ操作はこの単一のチャンクに対して圧縮関数を1回だけ適用する必要があります。BLAKE3の圧縮関数では、7つのラウンド関数と6つの置換関数が必要です。
BitVMは、u32値に基づいてXOR、モジュラー加算、および右ビットシフトなどの基本操作をすでに実装しており、Bitcoinスクリプトを使用してBLAKE3ハッシュ関数を組み立てるのは簡単です。スタックは、u32ワードを表すために4つの別々のバイトを使用し、BLAKE3で必要とされるu32加算、u32ビット単純XOR、およびu32ビット回転を容易にします。 Bitcoinスクリプト内のBLAKE3ハッシュ関数は現在約100kBで、BitVMのおもちゃバージョンを構築するのに十分です。
さらに、これらのBLAKE3コードを分割することで、検証者と証明者は、全体を実行するのではなく、チャレンジ・レスポンスゲームに分割することで、オンチェーンデータ要件を大幅に削減することができます。最後に、Keccak-256やGrøstlのようなハッシュ関数をBitcoinスクリプトに実装することで、最もBitcoinに優しいハッシュ関数を特定し、他の新しいBitcoinに優しいハッシュ関数を探索します。
Scriptless Scriptsの利点には、機能性、プライバシー、効率性が含まれています:
Scriptless Scriptsは、Schnorrマルチサインチャーとアダプターシグネチャーを使用して、BitVM回路内でロジックゲートのコミットメントを実装するために使用できます。これにより、BitVMスクリプトスペースを節約し、BitVMの効率を向上させることができます。現在のScriptless Scriptsスキームは、BitVMスクリプトスペースを削減できますが、公開鍵の組み合わせにはproverとchallengerの間で広範なやり取りが必要です。将来の改善点は、Scriptless Scriptsを特定のBitVM機能モジュールに統合することを目指しています。
ホワイトリストなしで誰でも参加できる許可なしのマルチパーティチャレンジは、信頼された第三者の関与なしにL2から引き出すことができることを意味します。さらに、OPチャレンジプロトコルに参加したいユーザーは、無効な引き出しを疑問視して削除することができます。
BitVMを許可されていないマルチパーティチャレンジモデルに拡張することは、次の攻撃に対処することを意味します:





