
Suiメインネット初の中断問題のまとめ
TechFlow厳選深潮セレクト

Suiメインネット初の中断問題のまとめ
問題が発生した際、Suiのエンジニアリングチームは迅速に原因を特定し、修正策を公開しました。その後、検証ノードによる展開が行われ、ネットワークの停止時間を最小限に抑えることができました。

出来事象の概要
太平洋時間2024年11月21日午前1時15分から3時45分頃(日本時間2024年11月21日17時15分から19時45分)に、Suiメインネットで全面的なネットワーク停止が発生しました。すべてのバリデーターノードがクラッシュを繰り返し、トランザクション処理が完全に中断しました。
問題の原因
ブロッキング制御コード内のassert!によりエラーが発生:実行コストの見積もりがゼロの場合、バリデーターノードがクラッシュします。この問題は以下のすべての条件が満たされた場合に発生します:
1. ブロッキング制御がTotalGasBudgetWithCapモードに設定されていること:
-
このモードはプロトコルバージョン63で一時的に有効化された後取り消され、その後プロトコルバージョン68で累積スケジューラとともに再び有効化されました。
2. ネットワークが以下の両方の条件を満たすトランザクションを受信すること:
-
可変共有オブジェクトを入力として持つこと
-
MoveCall命令がゼロ個であること
このようなトランザクションをネットワークが受信すると、すべてのバリデーターノードが即座にクラッシュします。
ブロッキング制御とは?
Suiネットワークはオブジェクト指向アーキテクチャに基づき、異なるユーザーのトランザクションを大規模並列処理することが可能であり、これは他の多くのネットワークでは実現できません。しかし、複数のトランザクションが同時に同じ共有オブジェクトへ書き込む場合、それらのトランザクションは順次実行されなければならず、その特定オブジェクトに関連するトランザクション処理量には上限があります。
ブロッキング制御システムは、同一共有オブジェクトへの書き込みトランザクションのレートを制限することで、チェックポイントの実行時間が長くなりすぎてネットワークが過負荷になることを防ぎます。
最近、共有オブジェクトの利用率を高めるため、トランザクションの複雑さをより正確に見積もり可能なようにブロッキング制御システムをアップグレードしました。しかし、新モードTotalGasBudgetWithCapのコードにバグがあり、それが今回の問題を引き起こしました。
問題の解決方法
問題が特定された後、コードの修正は非常にシンプルでした(PR #20365を参照)。この修正は既にメインネット(v1.37.4)およびテストネット(v1.38.1)にデプロイされています。
PR #20365:bump_object_execution_costを飽和加算を使用するように変更し、コストゼロのトランザクションを許容可能とした。
🌟 メインネット v1.37.4:
https://github.com/MystenLabs/sui/releases
バリデーター・コミュニティの迅速な対応により、修正のリリースからSuiネットワークの復旧までわずか15分しかかかりませんでした。
学んだ教訓
-
インシデント検出と対応体制が正常に機能: 自動アラートとコミュニティからの報告がほぼ同時に発生し、直ちにチームが診断と修正に取り組みました。
-
バリデーター・コミュニティの対応が優れていた: 修正リリース後、Suiネットワークはほぼ瞬時に通常運転に戻りました。
予防策
-
テスト体制の改善: 今回のクラッシュを引き起こしたような攻撃的トランザクションタイプをさらに多く追加し、潜在的な問題を早期に発見できるようにする。
-
ビルドプロセスの最適化: デバッグおよびリリース用バイナリの生成速度を向上させ、インシデント対応時間をさらに短縮する。今回の停止中、一部の時間がリリース版のビルド待ちのために費やされた。
コミュニティおよびバリデーターの皆様のサポートのおかげで、Suiネットワークは迅速に復旧することができました。ありがとうございました!
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News














