2021年4月29日、Filecoinネットワークがバージョン12にアップグレードしました。このアップグレードでは、Filecoinプロトコルのルールを規定する組み込みアクターのセットであるspecs-actorsの実装バージョン4が導入されました。specs-actorsの新バージョンは、パフォーマンスが大幅に向上するように設計されているため、ブロック検証時間が短縮されました。lotus、venus、forestのFilecoinコア開発者が一丸となって、わずか数週間でこのアップグレードを実装しました。また、複数の地域に跨るノードオペレーターたちは、このアップグレードをネットワーク全体にもたらすために、迅速に対応しました。
すべてのブロックチェーンプロジェクトにとって、ブロックの検証にかかる時間を、ブロックが生成される頻度よりも短くすることが重要です。Filecoinネットワークでは、ブロックは30秒ごとに生成されるため、ブロックの検証にかかる時間を30秒よりも大幅に短縮することが重要です。もちろん、ブロックの検証はノードのハードウェアスペック、チェーンデータベースのサイズ、ノード上で実行されている他のプロセスなど、さまざまな要因に依存します。
v12へのアップグレード前は、中央値品質のノードでは、ブロック検証が30秒を大きく下回り、スムーズに動作していました。しかし、遅いノードや、チェーン履歴を完全に保存している(つまりデータベースが非常に大きい)ノードでは検証時間が長くなり、スローダウン時に同期が取れなくなるリスクがありました。高速なハードウェアと小規模なチェーンデータベースを持つほとんどのマイナーには影響がありませんでしたが、取引所やアーカイブノードを含むエコシステムの他の重要なメンバーには、速度低下や同期問題が発生し始め、ネットワーク全体の健全性に悪影響を及ぼしました。
この同期時間の低下の原因の一つは、新しく作成されたマイナーの処理に関するアクターコードの非効率性にありました。過去数ヶ月間、ネットワークでは、チェーン上にマイナーを作成するスパムメッセージの波があり、空のマイナーエントリが過剰に発生していました。空のマイナーの処理にかかる時間を短縮することで、ブロック検証時間を大幅に短縮することができるため、パフォーマンスを大幅に向上させる好機となりました。この改善をv12のネットワークアップグレードに反映させたことで、今後のCreateMinerスパムが迷惑行為から低速ノードへの攻撃手段になることを未然に防ぐことができました。
パフォーマンスの向上
バージョン12で導入された内容を理解するには、システムの詳細を理解する必要があります。アドレスf03にあるFilecoin cronアクターは、ネットワークがエポック毎に実行するシステムアクタです。これは、Filecoinネットワークを円滑かつ正確に運営するための状態変換を実行するために存在します。cronアクターは60エポック(30分)ごとにマイナーアクターを処理し、マイナーがチェックされるべきセクターの部分の保存を正しく証明しているかどうかを検証します。cronアクターの処理により、Filecoinプロトコルは、ネットワーク全体が24時間ごとにFilecoin上のストレージ全体をチェックし、失われたデータや破損したデータを自動的に検出してペナルティを課すという、中心的な保証を確保することができます。
バージョン12までは、cronアクターがすべてのマイナーアクターに対してこの処理を行っていました。ファイルコインのバージョン12では、クーロンアクターを変更し、必要とするマイナーアクターにのみこの処理を行うようにしました。マイナーアクターがcronジョブを必要とするのは、ストレージを積極的に証明している場合です。具体的には、以下の基準のいずれかが60エポック毎にクーロン・ジョブを必要とします。
1.アクティブなPreCommitを持つこと
2.アクティブなセクターを持つこと
3.ベスティング・テーブルにロックされたベスティング報酬を持つこと
これらの基準を満たしていないマイナーアクターは、cronジョブ中に行うべき重要な作業がないため、安全にスキップすることができます。特に、新しく作成されたマイナーは、すぐにはcronジョブを要求せず、ネットワークにストレージを担保する最初の段階でのみcronジョブを取得します。
この最適化により、ファイルコインのネットワークでは、60エポックごとに約375,000のマイナーを処理していたのが、2,000強になりました。その結果、平均ブロック同期時間は約2倍になり、1日の状態のスナップショットサイズは20GB以上削減され、約2倍の改善となりました。ノード運用者は、平均ブロック同期時間と最大ブロック同期時間が大幅に短縮され、大規模なアーカイブノードが同期不能に陥るケースがほぼ完全になくなったことを実感しています。
図1.v12アップグレード後の同期時間の短縮
図2.V12アップグレード後の同期停止の減少(エポック単位で計測)
■アップグレードの展開
v4アクターを導入したネットワークv12のアップグレードは、Lotus v1.8.0とvenus v0.9.5でリリースされました。Lotusチームは、リリースからネットワークへの適用までわずか48時間という短いスケジュールでリリースを行いました。ファイルコインのコミュニティにとって、重要なセキュリティ問題を短期間で修正する必要があるため、迅速なアップグレードを実行できることは重要です。このようなイベントへの準備として、メインネットのリフトオフ直前の2020年9月に開催されたスペースレース大会で、ネットワークは様々な「ウォーゲーム」シナリオを経験しました。
コミュニティは48時間以内にv12へのアップグレードを行い、今後も必要に応じて迅速なアップグレードが可能であることを証明しました。このような迅速なアップグレードは、ファイルコインプロトコルを実装するチームと、ストレージマイナー、ストレージクライアント、仮想通貨取引所を含む様々なノードオペレーターとの間の効率的なコミュニケーションチャンネルに依存しています。すべての人に情報を提供するために、ファイルコインのコミュニティエンジニアは、コミュニティフォーラムでアップグレードのハイライト、アップグレードエポック、実装リリース、タイムラインへのリンクを含むアップグレードの詳細を発表し、Filecoinネットワークステータスページを更新して通知を行いました。その後、開発チームはフォーラムやSlackチャンネルなどの複数のサポートチャンネルで、全員が時間内にスムーズにノードをアップグレードできるように、迅速なサポートを行いました。
このような変更を短期間で正しく実装するには、厳格なテストとリリースのプロセスも必要です。Lotusチームは、ここ数カ月で開発された新しいリリースチェックリストを使ってそれを実現しました。さらに、コミュニティからのフィードバックを受けて、Lotusチームは、このような強制的なリリースでは、テストされていないオプション機能を導入しないように注意しました。その代わり、ネットワークアップグレードの変更は、Lotusの最新の安定したバージョンであるLotus v1.6.0の上で行われました。最新の機能を求める冒険的なユーザーのために、ネットワークアップグレードの変更と新しい機能を組み込んだLotus v1.9.0-rc1というリリース候補が提供されました。
今回のように、パフォーマンスを大幅に向上させる迅速なアップグレードは簡単ではありません。過去数ヶ月の間に寄せられたフィードバックと改善のおかげで、コア開発者はFilecoinネットワークを改善する高品質なコードを実装・テスト・リリースすることができました。さらに、ファイルコインコミュニティの様々なノードオペレーターの継続的な関与、献身的なサポート、迅速な対応により、必要に応じてネットワークが迅速にアップグレードできるようになりました。皆様に感謝を!
コメント