Validity Rollupsとビットコイン

ビットコイン上でzk-rollupをする提案「Validity rollup」についての備忘録。ゼロ知識証明の検証にはそれ専用のOPコードの追加が必要ですが、それを使ったユースケースを考える場合、どうしても再帰的なコベナンツが必要になります。ビットコインの場合、コインを送信するためには署名が必要で、署名さえあればそのコインを自由に扱うことができます。逆に言えばコインの送金金額や送金先の制限をかけることができません。以前の記事でこれらの制約をかけることのできる特徴をリッチステートフルネスと呼び、それをもつイーサリアムともたないビットコインについて紹介しました。このリッチステートフルネスを持たないビットコインだとどうしても表現できることが少なくなりますが、一方でバグが少ないシステムだと言えます。そのため、ビットコイン上でzk-rollupをするには1.ゼロ知識証明の検証と2.再帰的なコベナンツが必要になります。

ゼロ知識証明について、イーサリアムではどのように検証しているか見てみました。その検証には、楕円曲線上での加算、乗算とペアリング暗号が必要で(イーサリアムでは主にzk-SNARKを対象としている)、そのため2017年にプレコンパイルされたコントラクトの導入をしています(EIP196, EIP197)。これらのOPコードを使いゼロ知識証明の検証をスマートコントラクト(ブロックチェーン/フルノード)で実行させて、その証明が有効だったらオフチェーンで管理しているユーザーの残高情報などをマークル木でまとめたデータ(コミットメントと呼ぶ)を次の状態として更新させています。ちなみに以下がイーサリアムのプレコンパイル一覧。

ビットコインで同じようなことをしようとした場合、ゼロ知識証明の検証に必要な新しいOPコード(OP_STARKやOP_ZKP)が必要なのはもちろんですが、再帰的なコベナンツの導入が必要不可欠です。なぜならロールアップによる状態遷移をする度に必ず指定されたロールアップ用アドレスへビットコインを移転させる必要があるからです。現状のビットコインではUTXOを消費するために署名をしてしまうと、コインの送付先を自由に決めることができてしまいます。ロールアップ用アドレスとは無関係なアドレスへ送付できてしまうと、ロールアップに参加しているユーザーの出庫用コインがなくなってしまいます。なので、再帰的なコベナンツを使って状態遷移するごとに指定されたアドレスに対してコインを送付させる必要があります。

Validity Rollupsをするにはコベナンツを使いビットコインの送付先を制御する必要があることは分かりました。さらに面白いことに、コベナンツさえあればゼロ知識証明の検証に必要なOPコードがなくても、それを表現することができると言われています。イーサリアムでもEIP196, EIP197がなくてもzk-SNARKは可能だけど、それだと実行コスト(ガス代)が高くなるので、プレコンパイル済みのOPコードにしているみたいです。以下、EIP196の一部抜粋です。

While the Ethereum Virtual Machine can make use of zkSNARKs in theory, they are currently too expensive to fit the block gas limit.

再帰的なコベナンツはとても強力ですが、意図していなかった使い方による脆弱性を出現させたり使い方を間違えて資産を失ったりする可能性があります。そのためコベナンツの導入には慎重を期する必要があります。

Remaining : 0 characters / 0 images
1,000

Sign up / Continue after login

Related stories

Writer

ちょビットコイナー nostr id: npub1l83ycz54gng3nd8suvww43fardjsca37x7z5rcwlmeqzudg027fqe9hwaa

Share

Popular stories

LNノードの運用益はどれぐらい?パート1

1838

【Muun】ちょっと変わったライトニング搭載ノンカストディアルウォレット

1823

LNノードの運用益はどれぐらい?パート3

1097