「Testnet Wave 2 Recap — Network Learnings」の翻訳記事です
Tesnet Wave2は成功裏に終了し、Suiでのステーキング運用の目標達成に貢献しました。ネットワーク上の膨大なアクティビティは、Mainnetへの旅路において、また一つ重要なステップを踏み出したという確信を与えてくれました。Suiをより良くするために参加してくれたすべての人に、心から感謝します。
Wave2での学びは驚くほど広範なものだったため、Wave2のすべてを振り返る3部構成のブログを発行する予定です。この最初のブログではネットワークの学習について、次の記事ではトークノミクスとFrenemiesについてより深く説明します。
Stats Snapshot
Wave 2では、33のepochにまたがる3週間の実行で、コミュニティが共に複数の新記録を達成しました。
- 7000以上のノードが41のバリデーターに接続
- 169万件のアドレス
- 3650万トランザクション (Wave 1の1.6倍増)
- 324万件のNFT
- 118614個のパッケージが公開 (Wave 1の45倍に増加)
- 134万Suiのステーキング
- 735万件のステーキング処理
- 67のピークTPSを観測
- SuiウォレットのDAUはWave2中に2.2倍の171Kに増加 (1月の前3週と比較)
Suiウォレットのインストール数は3倍以上の333Kに増加 (1月の前3週と比較) - Sui Explorerのページビューは100万回、ユニークビジターは57万1000人となり、過去最高を更新
- Sui Discordコミュニティのメンバーが60万人を超え、世界最大のWeb3コミュニティの1つになりました
特に、4つのスマートコントラクトはWave2期間中に100万件を大きく超えるトランザクションを記録し、合計でWave2全体のトランザクションの40%を占めました。
- Suiのシステムオブジェクトは、730万以上のステーキング関連トランザクションを処理し、リストのトップとなりました
- 2位は Frenemies gameで、わずか5日間のゲームプレイで350万件を超えるトランザクションを行いました
- 3位は8192 gameで、オブジェクトIDは0x137aebf47cd16956b68633b6f6f00a992d87d9c6です
200万件強のトランザクションを扱いました - 4位は、オブジェクトID 0x4c10b61966a34d3bb5c8a8f063e6b7445fc41f93 の Sui Capysで、160万件のトランザクションを処理しました。
8192コミュニティ・プロジェクトが100万トランザクションの大台を超えたことを、特にお祝い申し上げます。また、Wave 2の分析を提供してくださった Suiscan community projectに感謝いたします。
これらの新しい記録と新しいレベルの活動は、ソフトウェアの重要な改善点を特定し、バリデータやノードオペレータのコミュニティとともに運用力をさらに成熟させる機会を与えてくれました。
注目すべきSui Networkの学び
Wave 1と同様に、Wave 2では、Suiのインフラにストレスを与え、改善点を洗い出すことを目的としています。
過剰に大きなメッセージやトランザクションの処理
Wave 2 はステーキングに焦点を当てたため、ネットワークはステーキングとステーキング解除のトランザクションを高頻度で経験し、大きなネットワークメッセージとトランザクションを処理する境界を押し広げるのに役立ちました。
特に、保留中のステーキング委任とステーキング解除の各トランザクションは、エポック変化中にイベントが発生します。
生成されたイベントはすべてトランザクション効果の一部であるため、これはエポック・チェンジトランザクションのトランザクションサイズに影響します。Wave 2 では、1 つのエポック中に最大 230,000 ステーキング操作を確認し、その結果、このエポック変更のトランザクション効果は非常に大きなものとなりました。
このような超大型のトランザクションは、いくつかの問題を引き起こします。エポック・チェンジのトランザクション効果が大きすぎてネットワークを介してダウンロードできない場合、エポック・チェンジは失敗します。トランザクション効果が最大 JSON RPC 応答より大きい場合、トランザクションを取得することができません。エクスプローラーなどのアプリが、このような大きなトランザクションをロードしようとすると、クラッシュする危険性がありました。
また、このような大きなトランザクションは、ネットワークが処理するには計算コストがかかりすぎる可能性もあります。
Wave 2では、大規模なトランザクションを処理しネットワークの運用を維持するために、緊急に何度も上限を引き上げる必要がありました。
これらの発見のおかげで、オブジェクト、パッケージ、およびさまざまなトランザクションデータ(入力引数、トランザクション効果、イベント)に対する保護サイズ制限の追加を加速することができました。これらの制限により、メインネットのストレージ、ネットワーク、および計算リソースが、過度に大きなトランザクションによって圧迫されることがないようにしました。
トランザクションの型引数入力のより堅牢な処理
2 月 1 日に、Move モジュールが型引数のトランザクション入力として指定された場合、トランザクション処理ロジックが Move モジュールの依存関係 (型が属するモジュールが公開されているかどうか) を適切に検証しないバグが発見されました。Moveパッケージの発行はビザンチンの一貫した高速ブロードキャスト経路で行われるため、一部のバリデータが他のバリデータよりも先に発行されたMoveモジュールを認識し、型引数にこのモジュールを使用したトランザクションの有効性に関して意見が分かれる可能性があったのです。
そのようなトランザクションがあったために、システムが次のチェックポイントを形成することができず、結果として多くのフルノードが停止し、バリデータがフォーク(分岐)してしまいました。これが、2月1日早朝に発生したTestnet Wave 2の障害の主な原因です。
型引数に無効な入力モジュールが含まれるコミット済みトランザクションが存在する中で、Testnetを前進させ続けるために、我々のチームは多くの緊急修正を実行しました。
- 型引数のモジュールがパブリッシュされていることを常にチェック
- コミットされた無効なトランザクションが失敗することで実行を終了
- タイプ引数が未公開のトランザクションがさらにコミットされるのを防止
トランザクションの入力チェックロジックが、入力として型引数に挿入されるMoveモジュールでないオブジェクトIDを拒否しないという2つ目のバグを発見しました。型引数はMoveモジュールでなければならないため、トランザクションは決して完了できず、次のチェックポイントを形成することができません。このときも、ネットワークを復旧させるために、問題のあるトランザクションを強制的に実行エラーで失敗させる緊急修正を加えなければなりませんでした。
両方のバグの長期的な修正は、Fix input object generation #7940として Sui レポジトリに追加されました。
Narwhal Consensusの待ち時間の改善
Wave 1 と同様、Testnet Wave 2 では 41 の分散型バリデータを使って Narwhal のコンセンサスをさらに特徴付ける貴重な機会を提供しました。Wave 2 では、コンセンサス待ち時間を短縮するためのいくつかの最適化を行いました(parallel consensus submission to two validators, parallel certificate verification, min_header_delay parameter, one second min_header_delay)。我々はパフォーマンスについて継続的に反復しており、近々さらなる最適化が予定されています。
注目すべきDeveloper Experienceの学び
ネットワークの安定性を確保することはもちろんですが、長期的な目標として、Suiがスマートコントラクト開発者のプラットフォームとなり、開発者がWeb3に最適な体験を提供できるようになることを目指しています。 そのために、Wave 2では開発者とユーザーにとっての課題を調査しました。
コイン管理
Wave 2では、いくつかの要因から、ユーザーがコイン管理の問題に直面する可能性が高くなりました。これらの問題は、ガス代不足のエラーや、ユーザーが取引に十分なSUI残高を持っていると思われるのに、ステーキングボタンが灰色で表示されるといった形で典型的に表れました。
Validator Gameがネットワーク上で活発に行われているため、基準ガス価格が変動し、エポックごとに通常より大きく上昇する可能性がありました。ガス価格が高く変動すると、ガス料金に十分な価値のあるコインを保有する可能性が低くなる可能性があります。
次に、初期の基準ガス価格がDevnetよりも高い数値に設定されていたため、ユーザーが複数のコインを保有しにくく、コインの枯渇が早くなる可能性がありました。最後に、ステーキング操作は本来、ユーザーが既存のSUI残高を1人以上のバリデーターに委ねるものです。しかし、ユーザーのSUI残高のコインレイアウトは、必ずしも意図したステーキング操作と一致しない場合があったのです。
この状況を緩和するために、Wave 2ではいくつかの変更が行われました。
- 基準ガス価格が高い時期には、デフォルトのfaucet量を引き上げました
- SDKで、Suiクライアントがgas_budget * gas_priceではなくgas_budgetより大きいガスオブジェクトを選択するバグに対処しました
- SuiウォレットのStakingに基本的なコイン管理を追加しました。Staking操作ごとに、paySuiトランザクションを使用して、委任用のStakingコインと委任に必要なガスコインを構築しました
近日中に Programmable Transactionsをサポートする予定で、アプリケーションのコイン管理を簡素化することができます。どうぞご期待ください。
テストネットの成功事例をもっと見る
テストネットの各ウェーブは、不安と興奮が入り混じったものとなっています。Suiコミュニティの皆さんと協力して、私たちはネットワークのステーキング能力を意図的に限界まで高め、その精神でTestnet Wave 2ではSuiを強化することに成功しました。
負荷の発生と問題の解明に貢献したコミュニティの驚異的な参加に、大きな感謝を捧げたいと思います。次のマイルストーンは、ビルダーコミュニティのために、もはや一過性ではない恒久的なテストネットを立ち上げることであり、その時にさらなる協力ができることを楽しみにしています。
また、Testnet Wave 2で学んだことを説明する2つの記事にもご期待ください。