概要
v1.20.4-bl.2 は、Injectiveメインネット(injective-1) 向けの v1.20.4 リリースライン上の緊急パッチです。コンセンサスのブロックリストはブロック 184,950,000 で有効化されており、このブロックはすでに通過しています。今すぐアップグレードしてください。このパッチには、予定されたチェーン停止、ガバナンスのアップグレードハンドラー、state移行はありません。停止を待ったり、新たに --halt-height を設定したりしないでください。
これは、バリデーター、セントリー、フルノード、パブリックおよびプライベートのRPC/ブロードキャストノード、取引所・エクスプローラー・その他のインテグレーションにサービスを提供するノードに適用されます。
1. リリースの選択と検証
バイナリアーカイブまたはDockerイメージのいずれかを選択してください。Dockerオペレーターはアーカイブのダウンロードを省略し、イメージを直接使用できます。オプションA:バイナリアーカイブ
公式リリースマニフェストに、ホストされているバイナリが記載されています。お使いのプラットフォーム用のアーカイブをダウンロードしてください:
Linux AMD64の場合は、実行中のバイナリを置き換えずに、ステージング用ディレクトリにダウンロードします:
OK と表示された場合のみ続行してください。その後、アーカイブを展開します:
shasum -a 256 を使用し、アーカイブをチェックサムファイル内の対応するエントリと照合してください。
オプションB:Dockerイメージ
初回リリースでは、パッチは以下のDockerイメージとして配布されました:libwasmvm をホストにインストールする必要はありません。
2. ノードの停止とstateのバックアップ
既存のサービスマネージャーまたはコンテナデプロイメントを通じてノードを停止します。復旧中に自動的に再起動しないよう、スーパーバイザーも停止してください。ノードのデータディレクトリにアクセスしているinjectived プロセスがないことを確認してください。
続行する前に、ノードの設定、鍵、データをバックアップしてください。必要なロールバックが完了するまで、既存のバイナリは残しておいてください。以下のコマンドはデフォルトのホームディレクトリ ~/.injectived を前提としています。異なる場合は、設定済みの --home パスを使用してください。
Docker Composeの例: 通常のデプロイメントと同じComposeファイルと環境を使用し、既存のComposeプロジェクトからコマンドを実行します。node_service を実際のサービス名に、container_node_home を コンテナ内の 既存のホームパスに設定してください。以下の値は例です。このホームが既存のバインドマウントまたは名前付きボリュームに保存されていることを確認してから、サービスを停止します:
3. 影響を受けたノードの復旧(必要な場合)
この手順は、ノードで10月7日のAppHash不一致が発生した場合にのみ実行してください。報告されたエラーの例:PATH 上にある別の injectived ではなく、サービス設定で使用されている実際の実行ファイルを使用してください。
- Cosmovisor: 既存の
$DAEMON_HOME/cosmovisor/current/bin/injectivedを使用し、--homeをそのノードのホームディレクトリに指定してロールバックを実行します。 - コンテナ: 古いイメージ と、同じデータボリューム、ノードホーム、ユーザー権限を使用して、ロールバックを単発のコマンドとして実行します。通常のノードコンテナは停止したままにしてください。
image を影響を受けたノードで使用していた古いイメージそのままにしておいてください。バックアップの完了後、上記のホスト用ロールバックコマンドの 代わりに 以下を実行します:
injectived がイメージ内で直接利用可能であることを前提としています。デプロイメントでカスタムラッパーを使用している場合は、必要な初期化処理を維持してください。
バイナリを置き換える前に、ロールバックが正常に完了するまで待ってください。インシデント時の復旧手順では、所要時間はおよそ10秒〜1分と見積もられていますが、大規模なデータベースやアーカイブデータベースでは大幅に長くかかる場合があります。コマンドが失敗した場合や不一致が解消されない場合に、追加のブロックを繰り返しロールバックしないでください。ノードを停止したままにし、バージョン、ブロック高、ログを添えてサポートに連絡してください。
ロールバックが利用できない場合や失敗した場合は、Chain PortalまたはInjectiveのサポート窓口から適切なスナップショットを入手してください。ブロック 186,223,485 より前のスナップショットであれば、パッチ適用済みのバイナリでリプレイできます。バリデーターの署名stateを保持し、スナップショット復旧の手順に従ってください。
4. パッチのインストール
必要なロールバックが完了したら:- バイナリデプロイメント: サービスが使用している
injectived実行ファイルを、検証済みアーカイブに含まれるものに置き換えます。同梱のlibwasmvmライブラリをデプロイメントで使用しているライブラリの場所にインストールし、サービスの所有者と権限を維持してください。 - Cosmovisor:
$DAEMON_HOME/cosmovisor/current/bin内のinjectivedを置き換え、同梱のライブラリをサービスが読み込む場所に配置します。このパッチにはアップグレードハンドラーがないため、新しいupgradesディレクトリに配置しても自動的には有効になりません。 - コンテナ: データボリューム、設定、ユーザー、起動フラグを維持したまま、既存のデプロイメントを
injectivelabs/injective-core:v1.20.4-bl.2に更新します。
image の値(またはそれを指定する環境変数)のみを injectivelabs/injective-core:v1.20.4-bl.2 に変更します。ノードを停止したまま、設定したイメージをプルして検証します:
version を実行し、以下を確認してください:
オプション:ローカルmempoolブロックリスト
コンセンサスのブロックリストはパッチ適用済みのバイナリに組み込まれており、設定は不要です。以下のapp.toml のエントリは、ローカルでのトランザクション受け入れフィルタリングを追加するもので、任意 です。バイナリのアップグレードの代わりにはなりません。
有効にする場合は、~/.injectived/config/app.toml の トップレベル、つまり [api] などのTOMLセクションヘッダーより前に、このエントリを追加してください:
5. 再起動と検証
バリデーターは、再起動する前に、ノード停止後に取得した署名stateのバックアップを復元して検証する必要があります。既存のサービスマネージャーまたはコンテナデプロイメントを通じてノードを起動します。 Docker Composeの場合は、新しいイメージでサービスを再作成し、実行中のコンテナ内でバイナリを検証してログを確認します:up を使用してください。古いコンテナを再起動するだけでは、イメージは置き換わりません。プレーンなDockerや他のオーケストレーターの場合は、既存のマウント、ポート、環境、ユーザー、起動引数を使用して、停止したノードコンテナをパッチ適用済みのイメージから再作成してください。ノードのデータとバリデーター鍵を使用するインスタンスは1つだけにしてください。
ログで正常に起動したことを確認し、AppHashの不一致が表示されなくなったことを確認してください。ノードのローカルRPCエンドポイントに問い合わせます(必要に応じてアドレスを調整してください):
- ネットワークが
injective-1であること。 - 確認を繰り返すたびにブロック高が進み、ネットワークに追いつくこと。
- 同期が完了すると
catching_upがfalseになること。 - バリデーターが署名を再開し、取引所/RPCオペレーターは下流のサービスが最新のブロックを受信していることを確認すること。
