Suiのメインネットは、ネットワークの1.72リリースがガス課金とバリデーター再起動ロジックのエッジケースを露呈させた後、5月28日から29日にかけて3度の個別障害を経験した。Sui Foundationのポストモーテムによると、同財団は問題はすでに解決され、ネットワークの活動は再開し、「ユーザー資金はリスクにさらされていなかった」と述べた。
障害は木曜日の5月28日に始まり、SuiのメインネットはPT午前7時頃に停止し、PT午後1時30分頃まで停止したままだった。2度目の障害は金曜日の朝に続き、PT午前5時頃に始まりPT午前8時30分頃に終了した。3度目の停止は金曜日の午後PT午後1時30分頃に始まり、PT午後7時20分頃に解決された。
財団によると、最初の2度の障害はガス課金ロジックとアドレス残高を導入したSuiの1.72アップグレードとの間の相互作用に関わるクラッシュバグに起因していた。3度目の障害は別件で、バリデーターの再起動後にランダム性ステートの保存方法における潜在的なバグが露呈し、スケジュールされたエポック変更中に発動された後に発生した。
「障害中、ユーザー資金はリスクにさらされておらず、ネットワークは再開時にコミット済みのトランザクションを巻き戻しませんでした」とSui Foundationは述べた。「現時点で、バリデーターは元のガス課金バグとランダム性ステートバグの両方によって引き起こされた既知の問題に完全に対処し、ネットワークの活動は再開しています。」
最初の問題は、Suiの新しいアドレス残高機能を中心としており、これによりユーザーはコインオブジェクトだけに依存することなく資金を保存してガス代を支払うことができる。Sui上のトランザクションは、アドレス残高、コインオブジェクト、またはその両方を組み合わせたハイブリッド構造を通じてガス代を支払うことができる。
エッジケースはそのハイブリッドガスパスで発生した。トランザクションが競合するトランザクションをカバーできないアドレス残高から支出しようとしたとき、スケジューラーはInsufficientFundsForWithdrawエラーで正しくキャンセルした。しかし後に、ガススマッシング——入力コインを単一のガス支払いコインにまとめるプロセス——の最中に、同じ予約が再び資金をデビットしようとする可能性があった。
財団の説明では、クラッシュはガススマッシング中に直接発生したのではなく、決済(プレマーケット)中に発生し、残高デルタがシステムトランザクションによって照合された時だった。ゼロ残高に負のデルタが適用され、アンダーフローが発生した。
即時修正は概念的には単純だった:InsufficientFundsForWithdrawでトランザクションがキャンセルされた場合にガススマッシングを回避すること。バリデーターは木曜日にその修正を採用し、ネットワークをオンラインに戻した。しかし財団は、そのパッチはエンジニアがより完全な解決策を開発する間にネットワークを復元するために選択された暫定措置だったことを認めた。
「ガスロジックの変更は繊細な操作です」と財団は書いた。「上記で説明したように、アドレス残高とコインの間には複雑な相互作用があります。バグを修正する以外に、ガスロジックの変更は以前のすべての動作を保持するか、適切なバージョンゲーティングを使用する必要があります。」
その暫定パッチには既知の弱点が含まれていた。トランザクションに複数のキャンセル理由があった場合、別のエラーがInsufficientFundsForWithdraw条件をマスクする可能性があった。金曜日の朝にそれが発生したとき、元のアンダーフローパスに依然として到達する可能性があり、2度目の停止を引き起こした。
3度目の障害は、金曜日の朝にネットワークが通常の動作を再開した後に発生した。次のスケジュールされたエポック変更で、バリデーターはSuiの分散型鍵生成プロトコル(DKG)に関連するバグのために移行を完了できなかった。DKGはオンチェーンのランダム性に依存するトランザクションのためのランダム性をブートストラップする。
以前の再起動サイクル中、参加率が次のエポックのDKGプロセスに十分ではなかったため、設計通りにランダム性が無効化された。問題は、失敗の判定がディスクに書き込まれなかったことだった。バリデーターが再起動すると、DKGが失敗したことを記憶せずに起動した。
「バリデーターがDKGの失敗を記憶しなくなると、どちらも発生できず、一時停止したキューが増大し、クローズ前にそのキューをドレインしなければならないエポック終了ロジックが、決して来ないDKGを待ち続けることになりました」と財団は述べた。
修正には2つの部分があった:再起動をまたいでDKGステータスを永続化することと、バリデーターが調整されたポイントでスタックしたエポックをクローズできるメカニズムを追加すること。そのメカニズムは影響を受けたエポックをクローズするために一度使用され、その後ネットワークは次のエポックに移行し、ランダム性が復元された。
ポストモーテムはSuiにとってより広範なエンジニアリングの教訓として障害を位置づけた。財団はエポック終了の耐障害性にはさらなる投資が必要であり、特にグレースフルデグラデーションと運用上のフォースクローズメカニズムに関してそうだと述べた。また、決済、保全チェック、スケジューリングとの相互作用を考慮すると、ガス課金もMove VMやMysticietiコンセンサスと同等の厳密さが必要だとも述べた。
執筆時点で、SUIは$0.8798で取引されていた。


