
概要
ADAMANT Node v0.10.2は、同期回復を改善し、派生状態の検証済みチェックポイントを導入し、RESTおよびSocket.IOの機能を拡張し、いくつかのAPIエッジケースを修正し、データベースクエリを最適化し、依存関係を更新します。本リリースは既存のプロトコル動作を維持し、コンセンサスフォークを導入しません。
完全な変更履歴はGitHubで確認できます。
同期回復
分散型ネットワークは、さまざまな条件下でノードを運用する独立したオペレーターに依存しています。ノードソフトウェアに継続的な介入や専門的なレベルの回復作業が必要であれば、参加が困難になり、実際にはネットワークの分散性が低下します。
これまで、同期パイプラインにおけるコールバックの中断やデータベースエラーにより、ブロック高が進行を停止しているにもかかわらず、ノードがまだ同期中であると誤認する状態が発生する可能性がありました。オペレーターがそれに気づいて再起動するまで、ノードは停止したままになっていました。
v0.10.2では、進行状況に基づく同期ウォッチドッグを追加し、ブロックを適用し続けている遅いノードと、実際に停止した同期実行を区別します。設定されたウィンドウ内でブロック高の進行が見られない場合、ノードはその実行を安全に中止し、処理中の状態変更をすべて完了させた上で、同期を再開できるようにします。また、ブロック処理コールバックが未完了のままサイレントに終了してしまう可能性のあったデータベース拒否パスも修正しています。
これはコンセンサスの変更ではありません。どのブロックが有効かを決定するものではなく、周囲の実行パイプラインが停止した際にノードが正常な動作に戻ることを支援するものです。
派生状態の検証済みチェックポイント
ADAMANTノードは、残高、デリゲート、ラウンド、および関連状態のための派生mem_*テーブルを維持しています。ブロックチェーンは正規のものとして保持されますが、中断されたシャットダウン後にすべての派生状態を再構築するには、成熟したチェーンでは長時間かかる場合があります。
v0.10.2では、そのような派生状態に対してローテーションされる永続化チェックポイントを導入します。各チェックポイントは既知のブロックおよびネットワークに紐付けられ、正規のダイジェストを持ち、使用前に検証されます。メモリミラーが一貫性のない状態でノードが起動した場合、最新の検証済みチェックポイントを復元し、その後のブロックのみをリプレイできます。
安全性モデルは保守的です。チェックポイントは、メタデータ、ダイジェスト、チェーン参照、ネットワーク、および状態の不変量がすべて検証された後にのみ受け入れられます。未確認の状態はチェックポイントから信頼されるのではなく、再構築されます。検証または部分的なリプレイステップのいずれかが失敗した場合、ノードは既存の完全な決定論的再構築にフォールバックします。正規のブロックと決定論的リプレイが真実の情報源であり続けるため、チェックポイントはプロトコル状態ではなく、より高速な回復パスとなります。
REST APIの改善
ADAMANTは単なるブロックチェーンデータベースではなく、コミュニケーション製品のための分散型信頼レイヤーです。v0.10.2では、決定論的な順序付け、ページネーション、デリゲートフィルタリング、およびカウントのみのリクエストを備えた一貫性のあるトップアカウントエンドポイントを追加し、エクスプローラーや分析ツールにおけるノード固有の回避策を排除します。
また、ノードのアクティブなコンセンサスコードネーム、有効なアクティベーションスケジュール、完全な報酬マイルストーンスケジュール、および各デリゲートの生涯 forging 量を公開します。モニタリングシステムやエクスプローラーは、すべてのクライアントで設定を複製するのではなく、ノードから直接有効なスケジュールを読み取れるようになりました。
いくつかの既存のデリゲートAPIがより正確になりました。単一デリゲートのレスポンスは、再度実際のランクと生産性のコンテキストを報告します。デリゲートの投票者クエリは、アドレスリストフィルタが使用された場合に関係のないアカウントを返すリスクがなくなりました。次のフォージャーの予測は、ラウンド境界で正しい次のブロック高を使用するようになりました。
ブロックAPIには正確性とパフォーマンスの両方の修正が施されました。numberOfTransactions=0を正しく処理するようになり、新しい複合データベースインデックスにより、デフォルトの高さ順序で不明なジェネレーターをクエリする際の高コストなスキャンが防止されます。
Socket.IOライブイベント
タイムリーな更新が必要なアプリケーションは、2つの新しいクライアントSocket.IOイベントファミリーをオプトインできるようになりました。コンパクトなnewBlock通知、および確認済み残高、未確認残高、またはその両方に関するbalances/change通知です。
ノードは専用のサブスクリプションインデックスを維持し、ブロックの適用およびロールバック時に影響を受けるアカウントの読み取りをバッチ処理するため、変更されたデータにサブスクライブしているクライアントがいない場合でも、接続されているすべてのクライアントをスキャンしたり、不要なアカウントクエリを実行したりすることはありません。
これらのイベントはベストエフォート型であり、永続化されません。アプリケーションは再接続後にサブスクリプションを復元し、RESTを通じて重要な状態の整合を継続する必要があります。ライブイベントはポーリングを削減しますが、検証を置き換えるものではありません。
依存関係のベースライン
本リリースでは、既存のメジャーバージョン内で依存関係を更新し、未使用の直接npmランタイム依存関係とその大規模なバンドルサブツリーを削除し、推移的なツールチェーン依存関係に対して狭い互換性オーバーライドを適用しています。検証済みのnpm監査ベースラインは、中程度4件および高1件の検出から、中程度、高、または重大の検出ゼロに移行しました。
暗号プロトコル、署名、ニーモニック、ピアハンドシェイク、またはトランザクション検証の動作は、このメンテナンスの一環として変更されていません。
アップグレードに関する注意事項
v0.10.2への更新はネットワーク互換性のために必須ではありません。本リリースは、ブロックまたはトランザクションのシリアライゼーション、署名、デリゲートの順序付け、報酬、手数料、アクティベーション高、スロットタイミング、または決定論的リプレイを変更しません。既存の互換性のあるノードは引き続き参加できます。cryptofoundryは、より良い同期回復、中断されたシャットダウン後の高速な復元、セキュリティメンテナンス、改善されたクエリパフォーマンス、および新しいAPI機能を希望するオペレーターに更新を推奨します。
ADAMANT Nodeは引き続きNode.js 22.13.0以降を必要とします。アップグレード後の初回起動時に新しいデータベースマイグレーションが適用されます。オペレーターは通常のバックアップ手順に従い、ノードを優雅に停止し、Cleaned up successfullyを待機し、チェックポイントテーブルと新しいインデックスの作成に十分な時間とディスク容量を確保する必要があります。起動後、ノードのステータス、同期の進行状況、ライブブロック処理、および接続されたサービスで使用されているRESTまたはSocket.IOの機能を確認してください。
その他のリソースは、ADAMANT Nodeドキュメント、ADAMANT APIスキーマ、および技術リリースディスカッションで確認できます。