Polygon エンジニア:なぜ Blast は完全に L2 ではないと言われているのか?
原文タイトル:《コード分析:なぜ Blast は完全に L2 ではないと言われるのか》
原文著者:Jarrod Watts
原文翻訳:金色财经 0xjs
編者の注:新しい L2 ネットワーク Blast は今週の開始以来、常に世間の注目を集めています。NFT の大口保有者 Christian が 500 枚の stETH を Blast に預け入れたほか、22日には Blast が 2000 万ドルの資金調達を完了したと発表しました。多くの開発者が Blast のコードとその本質について議論を交わしており、Polygon の Jarrod Watts は Blast が Layer2 ネットワークではないと明言しています。本記事は彼の X の投稿から翻訳したものです。
誰かが「Blast はただの 3/5 マルチシグです……」と言っています。
過去数日間、私はソースコードを深く調査し、この主張が真実かどうかを確認しました。
以下は私が見たすべてです:
- 新しいウォレット 0x52c31 が二つのコントラクトをデプロイしました:1)0xa01:Blast Deposit プロキシコントラクト;2)0x5f6:Blast Deposit 実装コントラクト。
これらの「プロキシコントラクト」の設定に不慣れな場合、後で再び触れます。
- 0x52c31 がこれらのコントラクトをデプロイした後、所有権を Gnosis Safe スマートコントラクトに移転しました。
Gnosis Safe または「Safe2」コントラクトは、最も人気があり、信頼されているマルチシグスマートコントラクトです。これらは、取引を実行するために大多数の署名者の署名を要求します。
- 現在、Blast コントラクトを所有している Safe コントラクトには 5 人の署名者がいます。
これは、大多数(つまり 3/5)の署名者がこの Safe コントラクトを代表して取引を実行する必要があることを意味します。この 5 つのウォレットは非常に新しいウォレットですが、所有者は不明です。
- したがって、3/5 マルチシグコントラクトが現在 Blast Deposit コントラクトの「所有者」です。
前述のように、Blast Deposit コントラクトは二つのコントラクトで構成されています:プロキシと実装。
それらの「所有者」になることは実際に何を意味するのでしょうか?
- 通常のスマートコントラクトの場合、一度ブロックチェーンにデプロイされると、コードを変更することはできません。プロキシスマートコントラクトは、スマートコントラクトを「アップグレード」(変更)することを可能にし、全体のコントラクトを置き換える必要がありません。これは通常、バグを修正したり機能を追加したりするために使用されます。
- Blast プロキシは OpenZeppelin の UUPSUpgradeable コントラクトを実装しています。これには「_upgradeTo」のような関数が含まれており、実装コントラクトのロジックを変更することを可能にします。これは、ユーザーが相互作用するコントラクトが同じコントラクトアドレスを維持できることを意味します。
- この可アップグレード性の最悪のシナリオは(マルチシグ)所有者がコントラクトのロジックを悪意のある内容に変更することです。
これは少し恐ろしい響きですね?……実際、これらの「補助機能」は今日のほとんどの L2 に採用されています。
- Optimism や Arbitrum のような Optimistic Rollups もこの機能を持っています。
L2Beat によると:
· OP Mainnet と Base システムを保護するコードは、事前通知なしに任意に変更できます。
· Arbitrum One のアップグレードには約 12 日の遅延が必要ですが、理事会は遅延なく承認できます。
- zkEVM の世界も同様です
L2Beat によると:
· Linea、Scroll、zkSync システムを保護するコードは、事前通知なしに任意に変更できます。
· Polygon zkEVM のアップグレードには約 10 日の遅延があります(緊急状態が発動しない限り)。
- これらの Rollup がアップグレードを実行できるマルチシグを持つ理由は、技術が成熟する際に一時的な安全性を実現するためです。L2Beat がその L2 ステージブログで概説しているように、Rollup の最終段階は、これらの安全委員会が「重大な欠陥」を解決する能力を制限する必要があります。
- 安全理事会の能力は時間とともに弱まります。しかし、メンバーの知名度は重要です。
例えば、Polygon PIP-29 は 13 人のメンバーによって「システムスマートコントラクトに対する狭い範囲の時間制限の変更」を管理することを提案しました。
- したがって、Blast は確かにマルチシグを通じてコードのアップグレードを実行し、即座に資金を盗む可能性がありますが、*現在*多くの他の L2 ソリューションも同様の機能を持っています。
これまでのところ、私は Blast を擁護してきました。しかし、ここからが悪いニュースです……続けましょう。
- Blast は L2 ではありません。
Blast は、ユーザーの資金を受け入れるという二つの機能を持つスマートコントラクトです。1、ユーザーの資金を受け入れる。2、ユーザーの資金を Lido などのプロトコルに投入する。
テストネットも、取引も、ブリッジも、ロールアップも、イーサリアムに取引データを送信することもありません。これは L2 ではありません。
- Blast コントラクトに預金することで、基本的に 3-5 人の見知らぬ人があなたの資金をステーキングすることを信頼することになります。
この 3-5 人が将来的に正しいことをすることを決定しない限り、あなたはいつでもこのお金を引き出すことができません。再度言いますが、ここにはブリッジがありません。
- これは私にとって本当に狂気の沙汰です……
あなたは Blast からお金を取り戻すことができないのは、次の条件が満たされるまでです:
見知らぬ人で構成された 3/5 マルチシグが新しいコントラクトをデプロイする;
そのコントラクトには資金を引き出す機能がある;
彼らはすべての資金を新しいコントラクトに移転する。
- しかし、さらに悪い状況があります。
私は彼らが「アップグレード」を行わなくても、コントラクト内のすべての資金を盗むことができることをお伝えできます。このコントラクトにユーザーが預けた資金は他の誰も引き出すことができません。
次に進みましょう。
- 関数「enableTransition」は「mainnetBridge」コントラクトをパラメータとして要求します。
この「mainnetBridge」コントラクトの機能:すべてのステーキングされた ETH、DAI を取得する。
では、この「mainnetBridge」コントラクトはどのようなものでしょうか?
- それは絶対に何でもあり得ます!Blast は任意の「mainnetBridge」コントラクトを承認し、最大限の LIDO と DAI を消費することができます……
このコントラクトの正当性には何らかの制限があるはずですか?まあ、*はい*、そのコードを見てみましょう。
- 以下は「_setMainnetBridge」関数内のアサーションステートメントです。
それは……そのアドレスにコードがあるかどうかをチェックします!はい、それが EOA アドレスでない限り;それはコントラクト内のすべての資金を持つことを承認しました。現在の資金総額は 2 億ドルを超えています。
- したがって、彼らは次のことができると仮定できます:
1)非常にシンプルなスマートコントラクトを作成し、それを mainnetBridge コントラクトとして設定する;
2)そのスマートコントラクトがすべてのステーキングされた ETH と DAI(2 億以上)を受け取るようにする;
スマートコントラクトを呼び出して、すべての資金を EOA ウォレットに引き出す。
- 私たちが発見した二つの主要な脅威は:
· 3/5 マルチシグによって悪意のあるコードをアップグレードして資金を盗むこと。
· 悪意のあるスマートコントラクトを作成し、それを「mainnetBridge」スマートコントラクトとして設定して資金を盗むこと、同様に 3/5 マルチシグを通じて。
- これは本当に起こるのでしょうか?私個人の意見としては、資金が盗まれることはないと思います。
いずれにせよ、私は実際に Blast のネイティブ収益のアイデアが非常に興味深いトレードオフだと考えています。
- したがって、私は個人的に現在の状態で Blast に資金を送ることはリスクがあると思いますが、送るかどうかは最終的にユーザーの決定であり、私はここで見たことを共有しているだけです。
私は引き続き Blast チームとすでに預金をしたすべての人に幸運を祈ります。