チェーン高とファイナライズ高の照会⚓︎
/chain/info GET エンドポイントは、現在のチェーン高と最新の ファイナライズ 高を返します。これら2つの値を比較することで、ファイナライズされた状態がチェーンの先端からどれくらい遅れているかを確認できます。これは、トランザクションの不可逆性を確認する必要があるアプリケーションにとって非常に有用です。
このチュートリアルでは、ループ内でチェーンの状態をポーリングし、各高さが最後に変更されてからどれくらい時間が経過したかを表示する方法を説明します。
前提条件⚓︎
このチュートリアルでは、SDKを必要とせずに Symbol REST API を使用します。HTTPリクエストを行う方法さえあれば実行可能です。
完全なコード⚓︎
このスニペットでは、NODE_URL 環境変数を使用して Symbol API ノード を設定します。値が指定されない場合は、デフォルト値が使用されます。
プログラムは無限ループで実行され、1秒ごとにステータス行を出力します。キーボード割り込み(Ctrl+C)でループを停止できます。
コード解説⚓︎
チェーン情報の取得⚓︎
各イテレーションで、コードは /chain/info GET エンドポイントに GET リクエストを送信します。レスポンスには以下が含まれます:
- height: 現在のチェーン高(ノードが認識している最新の ブロック)。
- latestFinalizedBlock: 直近でファイナライズされたブロックの詳細を含むオブジェクト:
- height: ファイナライズされたブロックの高さ。
- finalizationEpoch: ファイナライズエポック番号。
- finalizationPoint: エポック内のファイナライズポイント。
-
hash: ファイナライズされたブロックのハッシュ。
ブロックがブロックチェーンの一部であることの証明
ファイナライズは、ネットワークが特定のブロックハッシュに合意したことのみを証明します。 ファイナリティを完全に検証するには、このハッシュが実際に現在のブロックチェーンに属していることも確認する必要があります。
これは、報告されたファイナライズ高の周辺のブロックを取得し、そのいずれかの ヘッダー にファイナライズされたハッシュが含まれていることを確認することで実行できます。
チェーン高は、新しいブロックが生成されるたびに(約30秒ごと)増加します。
ブロックは通常、生成されてから10〜20分後にファイナライズされるため、ファイナライズ高はチェーン先端よりも遅れます。ファイナライズのラウンドが完了すると、ファイナライズ高は1ブロックずつ進むのではなく、一度に多くのブロック分ジャンプします。投票ノード がこのプロセスをどのように推進するかについては、テキストブックの コンセンサス のセクションを参照してください。
高さの変更の追跡⚓︎
各高さが最後に変更されてからの経過時間を表示するために、コードは以前の値とそのタイムスタンプを保存します。高さが以前の値と異なる場合、タイムスタンプは現在時刻に更新されます。
変更が観測されるまで、タイムスタンプは未設定のままであり、出力には数値の代わりに - が表示されます。変更が発生すると、カウンターは 0s ago から始まり、次の変更まで1秒ごとに増加します。
ポーリングループ⚓︎
各イテレーションでは、以下の内容を含む1行のステータスを出力します:
- 現在のチェーン高と、最後に変更されてからの経過秒数。
- ファイナライズ高と、最後に変更されてからの経過秒数。
その後、ループはイテレーションの間に1秒間スリープします。
出力⚓︎
以下の出力は、チェーン高とファイナライズ高を監視する典型的な実行例を示しています:
出力のポイント:
-
変更前 (2〜4行目): まだ変更が観測されていないため、どちらのカウンターも
-を表示しています。 -
新しいブロックの承認 (5行目): チェーン高が
3,159,411から3,159,412へ進み、変更カウンターが0sから始まります。 -
ファイナライズラウンドの完了 (7行目): ファイナライズ高が
3,159,388から3,159,411へ 23 ブロック進み、変更カウンターが0sから始まります。
チェーン高とファイナライズ高の間のギャップは正常な状態です。チェーン先端のブロックに含まれるトランザクションは承認(承認済み)されていますが、まだ不可逆(ファイナライズ済み)ではありません。ファイナライズ高がそのブロックに達するかそれを超えると、そのトランザクションはチェーン内に残ることが保証されます。
結論⚓︎
このチュートリアルでは、以下の方法を説明しました:
| ステップ | 関連ドキュメント |
|---|---|
| チェーン情報の取得 | /chain/info GET |
次のステップ⚓︎
新しいブロックやファイナライズを監視するためのイベント駆動型のアプローチについては、WebSocketのチュートリアル 新しいブロックのリスニング を参照してください。