ベルリンアップグレード後の OpenEthereum クライアントエラーの技術的分析

ベルリンアップグレード後の OpenEthereum クライアントエラーの技術的分析

元のタイトル: 「Popular Science | OpenEthereum クライアント「Berlin」のアップグレード後に発生したエラーの全容」
アレックス・ストークス
翻訳:アジアン

ご存知かもしれませんが、@OpenEthereum クライアントのバグにより、Ethereum ネットワークをサポートするいくつかの重要なサービスがダウンしました。

事故の原因となった取引について考えてみましょう。

まず、このインシデントに迅速に対応し、問題を解決してくれたすべてのエンジニアに感謝したいと思います。

また、私はすべての詳細を自分で追跡したわけではありませんが、以下の重要な事実は Eth R&D のユーザー eb によって提起されました。不和のサーバー。

エラーを引き起こしたトランザクションから始めましょう。

これは、KuCoin 取引所から送信され、ETH を多くのアドレスに配布する契約呼び出しトランザクションです。このトランザクションの呼び出しデータの ABI エンコーディングが正しくなかったため、最終的にチェーン分割が発生しました。このトランザクションの「入力データ」は Etherscan で確認できます。

1/ コントラクトで sendEths を呼び出すときは、2 つのパラメータを指定する必要があります。1 つはターゲット アドレスの動的にサイズが調整される配列です。もう 1 つは、転送量 (wei 単位) の動的サイズ配列です。これら 2 つを組み合わせることで、どのアドレスにいくら送金すればよいかがわかります。

2/ 通話データを解析して何が問題だったのかを確認できます。最初の行 (Etherscan では「[0]」としてマークされています) は、アドレス リストがバイト 64 (行「[2]」) から始まることを示しています。 2行目は、バイト416(行「[13]」)から始まる転送量のリストを示しています。

3/ つまり、一般的には、特定の量の ETH を上から下へペアで特定のアドレスに送信したいのですが、これは簡単なようです。

4/ ただし、このリストを調べ始めると、まず呼び出しデータの正しいバイトにジャンプし、Solidity ABI では、データの最初のワードが不定長配列全体の長さであると規定されています。

5/ これが最終的なバグの原因です。call data の値は「0x10」(16 進数であることに注意してください) ですが、call data は 10 個のアドレスと値のペアしか提供しないためです。この呼び出しデータの正しい ABI エンコーディング (行 [2] と [13] に入力) は、「0x10」ではなく「0xA」である必要があります。

6/ その時に何が起こるかはご想像のとおりですが、実行トレースで確認できます。

7/ 契約は最初の 10 個のアドレスを正常に通過します。この時点でコントラクトの実行は停止しているはずですが、呼び出しデータ ステートメントによると、まだ多くのアドレスが残っています。その後、実行を続行します。

ただし、呼び出しデータの構造によると、「11 番目のアドレス」は 0x10 であり、これはリストの長さをエンコードするために使用されるため、コントラクトは 0 ETH をアドレス 0x10 に送信しようとします。

8/ さらに、コントラクトが存在しない呼び出しデータを読み取ろうとすると、0 ETH が返されるようです。ここでコントラクトがエラーに遭遇したと考えられますが、呼び出しデータから読み取った他の 6 つの「アドレス」には 0 ETH が送信され続けました。

この時点で、0x10 は、EVM プリコンパイル済みコントラクトの範囲内にある、いわゆる「特別なアドレス」の 1 つである可能性が高いことに気付くかもしれません (いわゆる「プリコンパイル済みコントラクト」は、EVM 外部で最適な実装を持つ特殊なタイプのコントラクトですが、ほとんどのコントラクトと同様にコンパイルされます)。

また、プリコンパイルされたコントラクト 0x10 が ETH を返すことは想定されていません。このようにして、ETH ブラックホールになります。ただし、必ずしも問題が発生するわけではありません。クライアント全体がクラッシュした原因は何でしょうか?

その理由は、0x10 は実際には BLS ペアリング暗号化プログラム用に設計された EIP-2537 によってアサートされたコンパイル済みコントラクトですが、この EIP はまだメインネットに展開されていないためです。したがって、このアドレスとやり取りすることはできますが、メインネット上のこのアドレスには契約はなく、それ以上のアクションは実行されません。

さらに、この分裂を説明するために別の事実が必要です。それは、おそらく「ベルリン」ハードフォーク(この問題を表面化したハードフォークでもある)です。つまり、EVM でガス消費量を測定する方法が変更されたのです。

EIP-2929 が実装された後、トランザクション内で同じストレージ スロットに対して状態ストレージ操作を複数回実行すると、最初の実行ではより多くの Gas が消費され、後続の実行ではより少ない Gas が消費されます。この価格変更により、理論的には、クライアントがストレージ アイテムにアクセスするための現在のコストがより正確に反映されるはずです...

また、すべてのクライアント側実行では、このデータは多くの場合、より安価なハードウェア層に保存されることに注意してください。

現在、OpenEthereum のブロック #12244294 で発生したバグがようやく見つかりました。クライアントには、実装されたすべてのプリコンパイルが EIP-2929 アクセス リストの一部として含まれていました。 (翻訳者注:これは「EIP-2930」のはずです)

EIP-2537 はすでにほとんどのクライアントに実装されているため (ベルリン アップグレードに組み込むことが提案されていました)、OpenEthereum は 0x10 にアクセスするすべてのトランザクションにガス割引を提供します。

ただし、ネットワーク上のアクティブなクライアントのほとんどは、この方法で EIP-2929 を実装していません。アクティブ化されたプリコンパイル済みコントラクトにアクセスするトランザクションに対してのみガス割引を提供します。EIP-2537 は、まだアクティブ化されていないプリコンパイル済みコントラクトに属します。そのため、OpenEthereum クライアントによるトランザクションで消費された Gas 量の計算は、ネットワーク内の他のクライアントの計算とは異なっていました。

幸いなことに、@mhswende がすぐにバグを見つけ、@sorpaas が修正に取り組みました。

言うべきことはまだまだたくさんありますが、私よりも全体像をよく理解している人が、より良いレポートを書いてくれることを期待しています。

私が言えるのは、このバグはハードフォークの固有のリスクと、より回復力のあるインフラストラクチャの構築に継続的に取り組むことの重要性を浮き彫りにしているということです。

OpenEthereum クライアントに依存する単一クライアント システムは、問題のあるブロックの後にクライアントがネットワークに追いつけなかったため、本日ダウンタイムが発生しました。その結果、Etherscan 自体もダウンしました。

幸いなことに、このバグは大きなチェーンフォークを引き起こすほど深刻ではありませんが、可能性はまだ残っています。マルチクライアント実装を活用することで耐性を向上させることができます。これは、当社の Ethereum エコシステムの大きな強みであり、インフラストラクチャ プロバイダーにも同様の取り組みを促すことができます。

2021 年には前例のない導入が見られ、見通しは非常に明るいです。私たちはこの事件から教訓を学び、より良いイーサリアムを共に構築しなければなりません。

<<:  証券日報:中央銀行の高官がビットコインを「定義」。デジタル通貨とデジタル資産の「ルーツ」は、サービス提供主体にある

>>:  資金調達ニュース |英国の暗号通貨取引所TeraBlock Exchangeは、暗号通貨初心者向けの使いやすいインターフェースを開発するために240万ドルの資金調達を完了しました。

推薦する

金融大手はブロックチェーンと呼ばれる技術に資金を注ぎ込んでいる

Visa、Nasdaq、Citigroupなどの金融業界の大手企業は、ブロックチェーンと呼ばれる技術...

調査:サイバー犯罪者はより秘密裏にデジタル通貨を攻撃している

Cryptovestによると、世界的なサイバーセキュリティソリューションプロバイダーであるトレンドマ...

テスラが正式にビットコインを保有、Coinbaseプラットフォームが購入を支援

米国の暗号通貨取引所Coinbaseは、大企業のビットコインへの投資を支援してきた。以前15億ドル相...

米SECはリップル社とその幹部2名に対して正式に訴訟を起こした。

米証券取引委員会(SEC)は本日、リップル社とその幹部2名に対し、未登録の継続中のデジタル資産証券発...

スイスが暗号通貨決済を推進、65,000の商店がビットコインを受け入れる

仮想通貨ブローカーのビットコイン・スイスは、スイスにおける仮想通貨決済の受け入れを拡大するため、欧州...

トルコの通貨が24時間以内に5%急落、ビットコインのチャンス到来!

トルコの悲惨な状況は、脆弱な世界金融エコシステムにさらに大きな衝撃を与えました。トルコのクーデターの...

これまでの強気相場で儲けたのは誰でしょうか?

これまでの強気相場で儲けたのは誰でしょうか?まず第一に、それは間違いなく VC ではありません。 V...

機関投資家、米国選挙? Solana スポット ETF の背後にいるのは誰ですか?

北京時間6月28日、VanEckはVanEck Solana Trustを立ち上げ、SECにSola...

この人がビットコインで3年間暮らした話を聞いてみよう

オラフ・カールソン・ウィー氏は、2013年2月にビットコインのスタートアップ企業コインベースに雇われ...

USDCは2日前にTRONで発売され、流通量は1億ドルを超えた。

Tronチェーンのデータによると、1か月足らずでTron上のUSDCの発行額は1億800万米ドルを...

ウクライナの治安当局、ビットコインを盗むマルウェアを販売する犯罪組織を摘発

ウクライナの法執行当局は、暗号通貨のハッキングと盗難、違法資金の洗浄を専門とする犯罪組織を摘発した。...

F2poolがBFCマイニングを開始

.view{padding:0;word-wrap:break-word;cursor:text;h...

スコットランドはブロックチェーンの未来の拠点としての地位を確立する計画

クレイジーコメント:スコットランドは、技術リソース、専門的才能、政策や規制において独自の優位性を持っ...

ヨーロッパの高級品小売業者エースがビットコインを受け入れ

世界的なビットコインビジネス決済プロセッサおよびソリューションプロバイダーであるBitpayは、アム...

ポルカドットがイーサリアムに取って代わることができない理由

最近、ポルカドットは暗号通貨界で話題になっています。通貨価格の上昇に加え、PolkadotとKusa...