ニュース暗号資産Polygon、有効なトランザクションがノードを遅延させるバグを修正

Polygon、有効なトランザクションがノードを遅延させるバグを修正

著者: Coindoo·

重要ポイント

  • •Polygonは、有効なトランザクションが過大なノード側の作業を生み出しブロック処理を遅延させる可能性のあったBlockSTM V2の中程度の深刻度を持つ2つの脆弱性を修正しました。
  • •これらのバグはトランザクション結果やコンセンサスには影響せず、可用性のみのリスクであり、PolygonはメインネットやAmoyテストネットでの悪用は把握していないとしています。
  • •Bor v2.10.3の更新は投機的実行用の共有キャッシュを制限し、コードハッシュの再利用を可能にしました。ハードフォーク、データベース移行、再同期は不要です。
  • •プライベートビルドは10月5日にAmoyテストネットへ、10月8日にメインネットへ配布され、公開開示前に大多数のバリデーターと主要RPCプロバイダーがすでに修正版を実行していました。
  • •リリースにはプロトコルレベルのアップグレード期限がないため、Bor v2.10.2以前を実行しているオペレーターによるパッチ適用の普及が、注目すべき主要なシグナルとなります。
Polygon、有効なトランザクションがノードを遅延させるバグを修正

Polygonは、Polygon PoSブロックチェーンを支えるBorクライアント内の並列実行システム「BlockSTM V2」に存在し、有効なトランザクションがネットワークノードを遅延させる可能性のあった2つの脆弱性を修正しました。Polygonが公開した技術レビューによると、これらのバグはトランザクション結果を変更したりコンセンサスを脅かしたりするものではありませんでした。リスクは可用性に関するもので、ノードはブロックの正しい結果を計算できても、その処理に時間がかかりすぎてネットワークの他の部分に遅れを取る可能性がありました。同社は、修正を含むクライアントバージョンBor v2.10.3の公開リリースとともに、この調査結果を開示しました。

Polygonは、メインネットおよびAmoyテストネットでの悪用は把握していないとしています。

なぜシリアル実行が先に終了しても遅延が止まらなかったのか

Borは、着信ブロックをシリアル実行と並列実行の両方で処理し、先に完了した経路を採用します。シリアル実行はトランザクションの順序に従い、並列実行はトランザクションを同時に処理しようとした後、想定した依存関係が正しかったかを検証します。このアプローチは、トランザクション同士が依存していない通常のワークロードを高速化できますが、もはや有用でなくなった時点で即座に停止すべき投機的な作業も生み出します。

この設計により、Borは楽観的並列実行システムの一族に位置付けられます。クライアントはほとんどのトランザクションが独立していると仮定して並行して実行し、仮定が誤っていた場合には検証コストを支払います。こうしたシステムにおけるパフォーマンスバグは、誤った結果ではなく無駄な作業として現れる傾向があり、これはPolygonが説明した特性と一致しています。

Polygonの繰り返しコードハッシュ化テストがこのギャップを暴露しました。シリアル実行はトランザクションを数十ミリ秒で完了した一方、並列経路は約11秒間処理を続けました。当時、キャンセルはトランザション間でのみ確認されていたため、シリアル実行が結果を生成した後でも、並列で実行中の高負荷なトランザクションは完了しなければなりませんでした。

だからこそこのテストは重要でした。トランザクションは有効であり、Borは最終状態を迅速に判断できましたが、ノードは不要な処理の終了を待たなければならなかったのです。

ガスが十分に価格付けできなかった2つの欠陥

2つの脆弱性は、異なる原因による過剰な作業に起因していました。1つは投機的実行が計算済みデータを過剰に保持することを許すもので、もう1つは以前の結果を再利用できたはずの場面でコントラクトのコードハッシュを繰り返し再計算するものでした。

ガス上限はユーザーに特定のトランザクション操作の費用を課しますが、クライアントの実装によって生じるすべてのコストを常に捉えているわけではありません。これらのケースでは、キャッシュの増加と冗長なハッシュ化により、トランザクションの見かけのコストに見合わない過大なノード側の作業が発生する可能性がありました。

Polygonは両方のバグを中程度の深刻度に分類し、いずれもコンセンサスに影響しないと述べました。この評価は調査結果の特性と一致しています。リスクはノードの低速化とリソースの浪費であり、トランザクション結果の改変やコンセンサスの損傷ではありませんでした。

Bor v2.10.3パッチの変更点

v2.10.3の修正は、実行結果を変更することなくこのオーバーヘッドを抑制します。この更新は、投機的実行中に使用される共有キャッシュを制限するとともに、繰り返し読み取りの際にコードハッシュを再計算する代わりに既存の結果を再利用できるようにしました。狙いは、有効だが扱いにくいワークロードが過剰なリソースを消費したり、ブロック処理時間を不必要に延ばしたりすることを防ぐことです。

Bor v2.10.3のリリースノートによると、公開リリースにハードフォーク、データベース移行、ノードの再同期は不要です。オペレーターは各ノードを個別にアップグレードできます。

公開開示に先立つ非公開でのパッチ適用

Polygonは、10月5日にAmoyテストネット向けのプライベートビルドを配布し、続いて10月8日にメインネット向けのプライベートビルドを配布したと述べています。アップグレードがネットワークの大部分に届いた後、10月15日にPolygonガバナンスフォーラムで技術開示を公開しました。別のリリース発表が、メインネットとテストネットでの展開を扱っています。

リリースノートは、大多数のバリデーターと主要RPCプロバイダーがすでにプライベート版を実行していたと述べています。しかし、それは接続されたすべてのノードがアップグレード済みであることを意味しないため、Polygonのオペレーター向け告知は、Bor v2.10.2以前のユーザーに速やかな更新を呼び掛います。すでにプライベートビルドを使用しているオペレーターは、次のメンテナンス期間中に公開リリースへ移行できます。

残る課題はパッチ適用の普及

ウォレット、アプリケーション、その他のサービスにとって、遅れを取っているノードは遅延したチェーン情報を返したり、トランザクションの送信に時間がかかったりする可能性があります。Polygonの開示は、ユーザーがそのような障害を経験したことを裏付けるものではなく、同社はメインネットやAmoyでの悪用を把握していないとしています。

v2.10.3はハードフォークなしで提供されるため、遅れている運用者を強制的にアップグレードさせるプロトコルレベルの期限は存在せず、採用は各オペレーターの判断に委ねられます。そのため、注目すべき観察可能なシグナルはパッチ適用の普及状況、すなわちBor v2.10.2以前を使用しているオペレーターがどれほど速く修正版へ移行するかです。

Polygonの高速処理と決済インフラに関する幅広い取り組みを考えると、この運用上の信頼性は重要です。パッチは特定された2つの過剰作業の原因を取り除いたものであり、実務上の次のステップは、残っているBorオペレーターがそれを適用することです。

本記事は情報提供のみを目的としています。脆弱性の説明および悪用に関する評価は、Polygonが公開した開示内容に基づいています。

出典:Coindoo