チェーン高と不可逆高を照会する⚓︎
/chain/height GET エンドポイントは、現在のチェーン高を返します。
不可逆高 は、これ以上ロールバックできない最も高いブロックです。 NEM では、現在のチェーン高から 書き換え制限 を引いて計算します。
このチュートリアルでは、ループでチェーン高をポーリングし、不可逆高を計算して、チェーン高が最後に変化してからどれくらい時間が経過したかを追跡する方法を説明します。
前提条件⚓︎
このチュートリアルでは、SDK を必要とせずに NEM REST API を使用します。 HTTP リクエストを送信する方法だけが必要です。
完全なコード⚓︎
スニペットでは、NODE_URL 環境変数を使って NEM API ノードを指定します。
値が指定されていない場合は、デフォルト値を使用します。
プログラムは無限ループで実行され、1 秒ごとにステータス行を表示します。
キーボード割り込み(Ctrl+C)でループを停止できます。
コードの説明⚓︎
チェーン高を取得する⚓︎
ループのたびに、コードは /chain/height GET エンドポイントへ GET リクエストを送信します。
レスポンスには height フィールドが 1 つ含まれ、ノードが認識している最新のブロックである現在のチェーン高を返します。
新しいブロックが生成されるたびに、チェーン高は増加します(およそ 60 秒ごとです)。
不可逆高を計算する⚓︎
書き換え制限 は、NEM でロールバックによって取り消せるブロック数の上限で、360 ブロック(およそ 6 時間)に設定されています。
現在のチェーン高から書き換え制限を引くと、不可逆高 が得られます。
不可逆高以下のブロックは、これ以上ロールバックできません。
ロールバックと書き換え制限の詳細については、テキストブックの コンセンサス セクションを参照してください。
高さの変化を追跡する⚓︎
チェーン高が最後に変化してからの経過時間を表示するため、コードは前回の高さと、最後に更新された時刻を保存します。
新しいブロックが到着して高さが変化するたびに、タイムスタンプを更新します。 その後、経過時間を現在のチェーン高とともに表示します。
ポーリングループ⚓︎
各ループでは、次の情報を示すステータス行を 1 行表示します。
- 現在のチェーン高と、最後に変化してからの経過秒数。
- 不可逆高。
その後、ノードをもう一度照会する前に 1 秒間スリープします。
出力⚓︎
以下の出力は、チェーン高と不可逆高を監視した場合の実行例です。
出力の要点は次のとおりです。
- 新しいブロックの前(2~4 行目): プログラムがポーリングを続ける間、チェーン高は変わりません。
- 新しいブロックが到着(5 行目): チェーン高が
659,471から659,472に進みます。 不可逆高も進みます。
チェーン高と不可逆高の違い
不可逆高は常に 書き換え制限 だけチェーン高より遅れます。 チェーンの先端付近にあるトランザクションは、まだロールバックされる可能性があります。 そのブロックの高さが不可逆高以下になると、不可逆になります。
まとめ⚓︎
このチュートリアルでは、次の方法を説明しました。
| 手順 | 関連ドキュメント |
|---|---|
| チェーン高を取得する | /chain/height GET |
次のステップ⚓︎
新しいブロックをイベント駆動で監視する方法については、WebSocket チュートリアルの 新しいブロックをリッスンする を参照してください。