
BTCエコシステムのスケーリングソリューション巡礼:BitVM、エッチングの芸術
TechFlow厳選深潮セレクト

BTCエコシステムのスケーリングソリューション巡礼:BitVM、エッチングの芸術
ビットコインネットワーク上でスマートコントラクトはどのように実現されているのか?
執筆:Simon shieh
序章 回顧
前回の『BTCエコシステムのスケーリングソリューション探訪:インスクリプションはどこへ向かうのか』では、人気のあるインスクリプションエコシステムの技術的原理や潜在的なセキュリティ問題について議論し、インスクリプションの再帰的利用によるスマートコントラクト実現の可能性にも触れました。しかし、LukeによるTaprootスクリプトの制限により、再帰的インスクリプションにはいくつかの障壁が生じており、ビットコインネットワーク上でスマートコントラクトを実現する他の可能性はあるのでしょうか?
ブロックチェーン開発企業ZeroSyncの共同創業者であるRobin Linusは、2023年10月9日に「BitVM:ビットコイン上であらゆる計算を実行する(BitVM: Compute Anything on Bitcoin)」と題する論文を発表しました。この論文では、スマートコントラクトをビットコインブロックチェーンに導入する計画が提示されています。

この論文は非常に興味深いアイデアを提案しており、taprootを利用して事実上すべての任意計算を可能にし、その計算を使ってビットコインのオンチェーン外で発生したことを検証できるようにしています。ポイントは、すべてのロジックをオフチェーンに置き、誰かが不正な結果を主張した場合に、オンチェーン上で少数の計算ステップだけでその結果に異議を唱えるという仕組みです。
言い換えると、ビットコインネットワーク内にVerifierのロジックを配置し、ビットコインの強力なコンセンサスセキュリティを活用して、あらゆるチューリング完全な演算レイヤーに対する信頼できる第三者とし、Optimistic Rollupsの原理を用いてオフチェーン計算結果の検証を実現するということです。
では、一体どのようにしてVerifierのロジックをビットコインネットワーク上に配置できるのでしょうか?前のセクションの「刻印」と呼応させるため、私はこれをビットコインネットワーク上で回路を「エッチング(蝕刻)」する技術と呼びたいと思います。
論理ゲート回路
あなたのパソコンやスマートフォン内部では、電流が一連の1と0を伝達することで、コンピュータのすべての機能を実現しています。これは数百万もの微小な部品――論理ゲート(logic gates)――によって実現されています。これらの論理ゲートは、コンピュータチップを構成する基本要素です。
各論理ゲートは、1つまたは2つの「ビット(bit)」情報を受信します。各ビットは1か0のいずれかです。次に、論理ゲートは「AND(論理積)」「OR(論理和)」「NOT(否定)」などのルールに基づいて単純な論理演算を実行します。この演算の結果もまた、1または0のいずれかのビットとなり、次の論理ゲートに渡されます。
このような単純な論理演算に基づくシステムから得られる示唆は、最も複雑な計算や機能であっても、多数の単純な論理演算を組み合わせることで実現できるということです。こうした論理ゲートの組み合わせと協働こそが、現代のコンピュータおよび電子機器が複雑なタスクを遂行できる基礎となっています。これらの基本的な論理操作を通じて、コンピュータは複雑な算術演算、データ保存、画像レンダリングなどの機能を処理できます。
下図は非常に特殊な論理ゲートであり、「NANDゲート(NAND gate)」と呼ばれます。これを使うことで任意の種類の論理ゲート回路を構築できます。もちろん、他の専用タイプのゲートほど効率的ではありませんが、それでも可能です。BitVMの論理ゲート回路は、このNANDゲートで構成されています。

ビットコイン上でのNANDゲートのエッチング方法
既存のビットコインスクリプト上でNANDゲートを構築するには、ハッシュロックとあまり知られていない2つのオペコード:OP_BOOLANDおよびOP_NOTを組み合わせることが可能です。
まず、ハッシュロックを使用して、2つの方法のいずれかで使用可能な分岐スクリプトを作成できます。つまり、ハッシュロックAを満たすか、ハッシュロックBを満たすかのどちらかです。これにより、パスAはスタックに1を出力し、パスBはスタックに0を出力します。
特定のハッシュロックを満たすことで、「ビット」を「アンロック」でき、これが構築しようとしているNANDゲートの入力の一つとなります。ユーザーはどちらか一方のパスのみを満たせるため、この方法では一度に1ビットしか提出できません。
NANDゲートのロジックは、2つのビットを入力として受け取り、1つのビットを出力します。両方の入力ビットが1の場合、出力は0になります。それ以外の組み合わせでは、出力は1になります。2つのハッシュロックテクニックを使用することで、これらの2つの入力を提出し、出力が正しいかどうかを検証できます。ここでOP_BOOLANDとOP_NOTの出番です。
OP_BOOLANDの動作はNANDゲートとは逆です。2つの入力がともに1の場合、出力は1になります。それ以外の入力の組み合わせでは、出力は0になります。OP_NOTは、入力と反対の値を出力します。したがって、これら2つのオペコードを組み合わせることで、スクリプトスタック内で2つの入力を取り、NAND演算と同等の結果を得ることができます。最後に、OP_EQUALVERIFYおよびハッシュロックテクニックを使って、主張された出力が正しいかを検証できます。スタック内の実際のNAND演算結果とユーザーが主張する出力が一致しない場合、スクリプトは検証に失敗します。
こうして、ビットコインスクリプト内にNANDゲート回路を「エッチング」したことになります。実質的には、ビットコインスクリプトを使って仮想的なNANDゲート操作を強制的に実行しているのです。

大規模回路のエッチング方法
Taprootスクリプトを用いた回路のエッチングというアイデアは非常に魅力的ですが、PCのような超大規模回路はもちろんのこと、任意の一連の計算を実現するには数千あるいは数万のNANDゲートが必要になります。ビットコインのTaprootスクリプト空間には限りがある中で、複雑な計算に対応することは可能でしょうか?
BitVMは、Taprootスクリプトツリー(Taproot Tree)という方法を提案しています。ビットコインスクリプト内で複雑な計算プロセスを実現するために、論理ゲートを直列接続して計算回路を構築できます。この方式では、ハッシュロックを使って各ゲートを連結し、順次実行されるロジック操作を実現します。具体的には、あるゲートのスクリプトが異なるハッシュ原像(ハッシュプレインテキスト)の入力に対して異なる出力C1またはC2を生成する場合、次のゲートはそれに一致するハッシュロック値を入力として使用します。
この方法により、前段のゲートの結果を偽った場合、もう一方のハッシュロックの原像を明らかにするしかないというペナルティメカニズムを実現できます。このメカニズムは、2人のユーザー間のインタラクティブな計算に利用できます。彼らは特定の計算タスクへの参加に事前に合意し、それをNANDゲートのみで構成される回路に分解します。そして、回路内の各ゲートに対して適切なハッシュロックを選択し、それをUTXOをロックするスクリプトツリーにエンコードする必要があります。
その後、複数のアドレスを組み合わせてTaprootアドレスマトリックスを形成し、Taproot Treeの方式で論理回路を一連の木構造で接続されたUTXOトランザクションのTaprootスクリプトに「エッチング」することで、一定の計算タスクを処理できる「コントラクト風」のロジック回路を最終的に形成します。
詐欺チャレンジ
詐欺チャレンジは、OP(Optimism Rollup)技術の核心です(ただし、まだ実際に実装されていませんが)。その思想は、一括で複数の取引(バッチ)が提出される前に、挑戦者が誤っていると考える取引に対して詐欺チャレンジを発動すること(賭けを伴う)です。メインチェーン上のVerifierコントラクトは、状態ルートの変化に基づいて提出者が悪意を持って行動したかどうかを判断し、双方の預け金を分配します。
一方、BitVMでは、スクリプトツリーは2つの回路で設計されており、証明者が一方の回路に提出できるだけでなく、挑戦者が証明者の主張に異議を唱えられるようにしています。これは、一連のトランザクションを事前に署名することで実現できます。これらの事前署名済みトランザクションは「チャレンジ→応答→チャレンジ→…」という形でつながっています。いずれかの当事者が一定時間停止すると、他方はチャレンジに勝利し、双方の預け金を取り戻せます。

上図は、一連の事前署名済みトランザクションを示しています:
-
チャレンジ:Vicky(挑戦者/検証者)は、スクリプトパス内で原像を解放します(これらの原像は挑戦者のみが知っています)。これが証明に対するチャレンジとなります;
-
応答:Paul(証明者)は対応する論理ゲートを実行し、資金を元のスクリプトに戻します;
数回の照会後、矛盾する主張を迅速に反駁できます。証明者がオフチェーンで挑戦者と協力しなくなった場合、挑戦者は証明者をオンチェーン上で強制的に協力させます。挑戦者が1つずつハッシュロックを解除していくことで、証明者のUTXO内の各NANDゲートに対応するTaprootリーフノードは、証明者が挑戦者が保持する原像を知っている場合にのみ使用可能になります。証明者は、入力と出力を明らかにすることで、特定のTaprootリーフノードが正しく実行されたことを証明できます。前提は、挑戦者が対応するTapleafのハッシュの原像を明らかにしてそれを解除することであり、二分探索法を用いることで、挑戦者は有限回数(O(logn))のチャレンジと応答後に証明者の誤りを特定できます。
このプロセスには複数回のやり取りが含まれ、コントラクトが正しく決済されることを保証します。挑戦者は証明者に繰り返しチャレンジをかけ、証明者がすべてのゲートの正しい結果を証明するまで続けるか、証明者がチャレンジに応答できない場合には、所定の時間が経過した後に資金を引き出すことができます。理想の状況では、すべての操作がオフチェーンで行われ、双方が協力して決済を完了しますが、協力が破綻した場合は、オンチェーン上のチャレンジゲームを通じてコントラクトが正しく解決されることを保証できます。
実装上の障壁とセキュリティ問題
この提案は、極めて膨大な量のデータの処理と生成を必要とします。使用されるTaprootスクリプトツリーは数十億のリーフノードを含む可能性があり、関連する事前署名済みトランザクションの処理には正確な決済を保証するために最低でも数時間かかるかもしれません。各Taprootアドレスの事前設定されたロック解除条件の実行にはマイナー手数料が発生するため、アドレスの組み合わせが多くなるほどコストも大きくなります。
この方式の主な制限の一つは、2人の参加者間でのみ有効だということです。一人は証明者として自身の実行の正確性を証明し、もう一人は検証者として前者の主張に異議を唱えます。将来の研究でより多くの参加者を加える方法が見つかる可能性はありますが、現時点では明確な解決策はありません。
協力による決済のシナリオでは、すべての参加者がオンラインである必要があります。これはプロトコルの実用性と利便性に一定の制約を課します。
セキュリティ面では、以下の主要なリスクがあります:
1. コストの制約により、必然的に大量の計算作業がオフチェーンで行われることになり、オフチェーン計算にはセンター型サービスに共通するセキュリティリスクが存在します。
2. 大量のデータがオフチェーンに保存されるため、データ可用性とデータセキュリティも考慮すべきリスクポイントです。
3. エッチングされた回路自体に論理的な脆弱性が存在するかどうかもセキュリティリスクの一つです。回路は読みづらく、より多くの監査コストまたは形式的検証コストが発生します。
MetatrustはかつてUniswapの包括的形式的検証を支援しており、ZK回路の監査および形式的検証において豊富な経験を持っています。BitVMエコシステムの安全な実装をサポートすることが可能です。
ここまでの2つの提案は今年話題になったばかりの技術ですが、次回はさらに古く、より「正統的」なソリューションである、ライトニングネットワークのアップグレード版――Taproot Assetsについて紹介します。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News









