2022年4月30日Solana mainnet Beta 障害報告と緩和策について(公式記事和訳)
当記事は以下の公式サイトの公式声明の和訳になります。
https://solana.com/news/04-30-22-solana-mainnet-beta-outage-report-mitigation
5月1日(日)日本時間AM5:00頃、Solanaのメインネットベータクラスターは、コンセンサスの停止により、ブロックの生成を停止しました。 その後7時間にわたり、バリデータ・オペレーターは最も進展のあったポイントを特定し、一斉にネットワークを再開させました。ブロック生成は5月2日(日)12:30(JST)に再開され、ネットワーク・オペレーターはその後数時間にわたってクライアント・サービスの復旧を続けました。
障害の原因は何でしょうか?
膨大な量のインバウンドトランザクション(600万tps)がネットワークに殺到し、個々のノードで100Gbpsを超えるトラフィックが発生しました。サービス妨害攻撃の証拠はありませんが、その代わりに、ボット人気のあるCandy Machineプログラムを使用してミントされる新しいNFTを、プログラムで獲得しようとしたことを示す証拠があります。ミントの価格は固定で、ダイナミックなダッチオークションではないため、ミントに最初に接続したユーザーがNFTを受け取ります。そのため、ミントを獲得しようと膨大な数のトランザクションを送信する経済的インセンティブが生まれました。
何が行われていますか?
1月上旬以降、SolanaはNFTミントを狙ったボット活動により、断続的に輻輳の問題が発生しています。前回のメインネットβの停止は2021年9月に発生し、17時間続きました。4月30日の障害は9月の障害と共通しますが、今回はその後のバリデータコミュニティの更新を反映して、取引要求量が9月の1万%(100倍)レベルに達してもネットワークは機能し続けました。
現在テストネット上で安定しているベータ版リリースブランチv1.10では、ノードのコンセンサスの遅さや停止に耐えられる時間を長くするために、メモリ使用の改善が施されています。メインネットベータで展開されたv1.10を実行するテストノードは、同様の仕様のv1.9のピアを上回る2000スロットの追加を継続しました。
ネットワークの安定性と回復力に対応するため、3つの緩和策を実施中です。
1.QUIC-現在、SolanaはRPCノードとカレントリーダー間のトランザクションを渡すために、カスタムの生のUDPベースのプロトコルを使用しています。UDPはコネクションレスで、フロー制御も受信確認もないため、悪用行為を阻止したり軽減したりする意味のある方法はありません。Solanaのコアプロトコルはネットワークトラフィックの制御に影響を与えるため、Googleが開発したQUICをベースに再実装されています。このプロトコルは、UDPのような高速非同期通信と、TCPのようなセッションとフロー制御のために設計されています。このプロトコルが採用されれば、データ取り込みを最適化するためのオプションがさらに増えることになります。
2.ステーク加重トランザクション QoS-リーダーネットワークの帯域には一定の容量があり、それを有効に活用するためには、先着順でソースを無視して無差別にトランザクションを受け付ける現在のやり方をやめ、優先順位をつけることが必須となります。このモデルでは、0.5%のステークを持つノードは少なくとも0.5%のパケットをリーダーに送信する権利を持ち、残りのネットワークと残りのステークとの組み合わせでは、それらを完全に洗い出すことはできません。ステークウェイトQoSは、現在QUICと並行して開発されています。ステークウェイトQoSはQUICと連携することで、より強固なものになるでしょう。
3.フィー執行優先-いったん取り込まれたトランザクションは、共有アカウントデータを変更するためにまだ争うことができます。 この競合はネットワークデータの取り込みと同様に単純な先着順で対処されており、ユーザーは自分のトランザクションの実行の緊急性を表現する手段がないままです。誰でもネットワークにトランザクションを送信できることを考えると、ステークウェイト方式はこの優先順位付けに適していません。 その代わりにCompute Budgetプログラムに新しい命令が導入され、ユーザーは取引の実行とブロックへの組み込み時に徴収する任意の"追加手数料"を指定することができるようになりました。
Solanaにフィーがやってきます!
Solana上の手数料は、Ethereum上のグローバルな手数料市場と同じではありません。Solanaでは、NFTのミンティングコントラクトのような特定の状態のピースに書き込む能力よりも、ブロックスペースの競争が少ないです。Solanaのトランザクションは、Solanaにおけるすべての状態と対話するのではなく、どの状態を読み取る必要があるか、どの状態を書き込む必要があるかを指定します。読み込みは重複して並列化できますが、書き込みはそうもいきません。これは一般にデータベースの"ホットスポット"問題と呼ばれ、状態オークションはこれを解決するために設計されています。
例えば、同じ状態で10秒分の書き込みが必要なのにその量が1秒だとしたら、どの作業を優先して、どの作業が失敗したかを判断する仕組みが必要です。
トランザクションは"最高料金/計算単位"の優先順位でブロックに詰め込まれるため、バリデータが自己利益のために行動していれば、より高い料金を支払うトランザクションが最初に書き込みを行うことになります。
それに比べ、Ethereumはブロックスペースという希少なリソースを割り当てるために手数料市場を使用しています。Solanaにおける手数料の優先順位付けは、ブロック全体ではなく、特定の状態にのみ影響するはずです。これは、"グローバルフィー"ではなく、"ネイバーフッドフィー"のようなシステムを構築しています。高い手数料を払っているのに、アカウントへの書き込みの上限に達しているためこのブロックに収まりきらない後続のトランザクションは、流出して次のブロックに予定されるますが、他のアカウントとやり取りする取引は、たとえ低い手数料を払っていても同じブロックに追加することが可能です。
手数料(フィー)の優先順位付け作業は現在進行中で、v1.11のリリースを目標としています。