getBlock RPCメソッドは、Solana元帳内の確認済みブロックに関する詳細情報を取得することを可能にします。これは、ブロックエクスプローラー、トランザクション履歴の分析、特定の時点でのチェーンの状態を理解するために不可欠です。
性能向上のためバッチ処理を避けるアーカイブメソッドのバッチ処理は遅延を大幅に増加させます。10件以上のリクエストのバッチは許可されていません。
一般的な使用例
- ブロック内容の確認: 特定のブロックに含まれるすべてのトランザクションを表示。
- ブロックハッシュの取得: 指定されたスロットのブロックハッシュ、その親のブロックハッシュ、およびその親のスロットを取得します。
- ブロックの高さと時間の確認: ブロックの高さ(シーケンス番号)と推定生成時間を確認します。
- トランザクション詳細の分析: 適切なパラメータを使用して、手数料、ステータス、前後の残高、内部命令などのメタデータを含む完全なトランザクションデータを取得できます。
- 報酬の取得: ブロックの報酬情報をオプションで含めることができます。
パラメータ
-
slot (number, required): クエリするブロックのスロット番号 (u64)。
-
config (object, optional): 以下のフィールドを持つ構成オブジェクト:
commitment (string, optional): 使用するコミットメントレベルを指定します。このメソッドではprocessedはサポートされていません。デフォルトはfinalizedです。
encoding (string, optional): トランザクションデータのエンコーディング。transactionDetailsがfullまたはaccountsの場合はデフォルトでjson、それ以外の場合はbase64。
json: JSON形式でトランザクションとアカウントデータを返します(jsonParsedに置き換えられました)。
jsonParsed: パースされたJSONとしてトランザクションとアカウントデータを返します。これは、アドレスルックアップテーブルからのものを含むすべてのトランザクションアカウントキーを含むため推奨されます。
base58 (遅い)
base64
base64+zstd
transactionDetails (string, optional): 返されるトランザクション詳細レベルを指定します。デフォルトはfullです。
full: トランザクションメタデータを含む完全なトランザクション詳細を返します。
accounts: 各トランザクションで詳細にされたアカウントのリストを返しますが、トランザクションデータやメタデータは含まれません。
signatures: トランザクションの署名のみを返します。
none: トランザクション詳細を返しません。
rewards (boolean, optional): レスポンスに報酬配列を含めるかどうか。デフォルトはfalseです。
maxSupportedTransactionVersion (number, optional): 返される最大トランザクションバージョン。ブロックにより高いバージョンのトランザクションが含まれている場合、エラーが返されます。省略された場合、レガシートランザクションのみが返され、バージョントランザクションを含むブロックはエラーになります。アドレスルックアップテーブルを使用したバージョントランザクションを含めるためには0を設定します。
レスポンス
指定されたブロックが確認されて見つかった場合、resultフィールドはブロックに関する情報を含むオブジェクトになります。ブロックが見つからないか確認されていない場合、resultはnullになります。
ブロックオブジェクトの主要フィールドには次のものがあります:
blockhash (string): このブロックのベース58でエンコードされたブロックハッシュ。
previousBlockhash (string): 前回のブロックのベース58でエンコードされたブロックハッシュ。親が利用できない場合(元帳のクリーンアップにより)、システムプログラムIDとなる可能性があります。
parentSlot (number): 親ブロックのスロット番号。
transactions (array): ブロックに含まれるトランザクションオブジェクトの配列。これらのオブジェクトの構造は、encodingおよびtransactionDetailsパラメータに依存します。
- 各トランザクションオブジェクトには通常、
meta(手数料、ステータス、ログ、前後の残高などのメタデータ)およびtransaction(メッセージと署名を含む実際のトランザクションデータ)が含まれています。
rewards (array, optional): rewards: trueが指定された場合に存在する報酬オブジェクトの配列。各オブジェクトは、pubkey、lamports、postBalance、rewardType、可能であればcommissionを詳細に示します。
blockTime (number | null): Unixタイムスタンプ(エポックからの秒)としてのブロックの推定生成時間、または利用できない場合はnull。
blockHeight (number | null): このブロックの高さ(スロット0から始まるチェーンでその前にあるブロックの数)、または利用できない場合はnull。
レスポンス内のトランザクションとメタオブジェクトの完全で詳細な構造については、公式のSolana RPCドキュメントを参照してください。
例: ブロック情報の取得
Devnetの例示的なスロット番号の情報を取得してみましょう。
重要: スロット番号は迅速に処理されます。以下のスロット番号(250000000)はプレースホルダーです。例を実行する際には、実際に存在するターゲットネットワーク(DevnetやMainnet)の最近の確認済みスロットで置き換えてください。最近のスロット番号はSolanaブロックエクスプローラーを使用して見つけることができます。
注: 以下の例では、実際のHelius APIキーでYOUR_API_KEYを置き換えてください。
開発者のヒント
- スロットとブロックの高さ:
getBlockは入力としてslotの番号を取りますが、必ずしもブロックの高さではありません。スロットは連続していますが、リーダーによってスキップされることがあります。レスポンスのblockHeightフィールドは、このブロックの前に実際にいくつのブロックがあるかを示します。
maxSupportedTransactionVersionは重要: バージョン付きトランザクションを持つブロックを確認するには、maxSupportedTransactionVersion: 0(または新しい標準が出現した場合はより高いバージョン)を設定する必要があります。これを忘れると、ほとんどのモダンブロックでエラーが発生します。
transactionDetailsの選択:
fullは最も詳細な分析に必要ですが、最も多くのデータを返します。
signaturesは、ブロック内のトランザクションをリストするだけで良い場合に便利です。
accountsは、中間的な選択であり、どのアカウントが関与していたかを全部の命令データを取得せずに確認する場合に役立ちます。
noneは、まれですが、blockhashやrewardsのようなブロックレベルのメタデータのみを気にする場合に使われることがあります。
- エンコーディングには
jsonParsedを推奨: トランザクション詳細をリクエストする際、jsonParsedは最も開発者に優しい出力を提供し、アドレスルックアップテーブルからのアカウントを適切に解決しますが、json(廃止予定)はそうではありません。
- ブロックの利用不可:
nullの結果は、そのスロットのブロックが見つからなかったことを意味します。これはスロットがスキップされた、指定したコミットメントレベルまでブロックが確認されていない、またはRPCノードがその元帳から古いスロットを削除したため(古いスロットでは一般的)という理由が考えられます。
- 報酬情報: ブロック報酬の分配をバリデーター(および報酬タイプによってはステーカー)に見るには、
rewards: trueを設定する必要があります。これによりレスポンスサイズが増加します。
- ブロック構造の理解: Solanaのアーキテクチャにおけるブロックの位置付けの詳細理解には、Understanding Slots, Blocks, and Epochs on Solanaを参照してください。