> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# getLatestBlockhashの使い方

> getLatestBlockhashの使用例、コード例、リクエストパラメータ、レスポンス構造、ヒントを学びます。

[`getLatestBlockhash`](https://www.helius.dev/docs/api-reference/rpc/http/getlatestblockhash) RPC メソッドは、Solanaネットワークでトランザクションを準備して送信するために不可欠です。ノードによって処理された最新のブロックハッシュと、このブロックハッシュが有効である最後のブロックの高さを取得します。ブロックハッシュを効果的に利用し、[トランザクションを着地させる](https://www.helius.dev/blog/how-to-land-transactions-on-solana)方法について詳しくは、包括的なガイドをご覧ください。

Solana上のすべてのトランザクションは、最近のブロックハッシュを参照する必要があります。このメカニズムにより、フォークしたチェーン上でのトランザクションリプレイなどの特定の攻撃を防ぐことができます。

**バージョン注意:** このメソッドは、`solana-core` v1.9以降で利用可能です。`solana-core` v1.8以前のノードでは、代わりに`getRecentBlockhash`メソッドを使用してください。

## 一般的な使用例

* **トランザクション構築:** 新しいトランザクションに含めるために、最近のブロックハッシュを取得し、署名して送信します。
* **トランザクションの有効期間管理:** 取得したブロックハッシュを参照するトランザクションがどのくらい有効であるかを理解するために、`lastValidBlockHeight`を使用します。
* **準備確認:** `simulateTransaction`でも暗黙的に行えますが、アプリケーションはトランザクションをシミュレーションするために手動で準備するためにブロックハッシュを取得することがあります。

## リクエストパラメータ

このメソッドは、以下のパラメータを持つ構成オブジェクトをオプションで受け取ることができます。

* **`commitment`** (string, optional): クエリの[コミットメントレベル](https://www.helius.dev/blog/solana-commitment-levels)を指定します。省略した場合、ノードのデフォルトのコミットメントが使用されます。トランザクションでは、ブロックハッシュが安定したチェーンからのものであることを保証するために、通常`confirmed`または`finalized`を使用します。
* **`minContextSlot`** (integer, optional): リクエストを評価できる最小スロットを指定します。これにより、クエリが少なくともこのスロットまで処理された元帳の状態に対して行われることが保証されます。

## レスポンス構造

JSON-RPCレスポンスの`result`フィールドは、`RpcResponse`オブジェクトになります。このオブジェクト内の`value`フィールドには次があります:

* **`blockhash`** (string): 最新のブロックハッシュを示すbase-58エンコードされた文字列。
* **`lastValidBlockHeight`** (u64): `blockhash`が失効するブロックの高さ。この`blockhash`を引用するトランザクションは、ネットワークがこの`lastValidBlockHeight`に達するまで有効です。

レスポンスには情報が取得された`slot`とともに、`context`オブジェクトも含まれます。

## 例

### 1. デフォルトのコミットメントで最新のブロックハッシュを取得

この例は、ノードのデフォルトコミットメントを使用して最新のブロックハッシュを取得します。

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getLatestBlockhash"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchLatestBlockhash() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
      console.log('Latest Blockhash Info:');
      console.log(`  Blockhash: ${blockhash}`);
      console.log(`  Last Valid Block Height: ${lastValidBlockHeight}`);
      // This blockhash can now be used in a transaction
    } catch (error) {
      console.error('Error fetching latest blockhash:', error);
    }
  }

  fetchLatestBlockhash();
  ```
</CodeGroup>

### 2. 'confirmed'コミットメントで最新のブロックハッシュを取得

この例は、`confirmed`コミットメントを使用して明示的に最新のブロックハッシュを要求します。

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getLatestBlockhash",
      "params": [{ "commitment": "confirmed" }]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchConfirmedBlockhash() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('confirmed');
      console.log('Confirmed Blockhash Info:');
      console.log(`  Blockhash: ${blockhash}`);
      console.log(`  Last Valid Block Height: ${lastValidBlockHeight}`);
    } catch (error) {
      console.error('Error fetching confirmed blockhash:', error);
    }
  }

  fetchConfirmedBlockhash();
  ```
</CodeGroup>

## 開発者向けヒント

* **ブロックハッシュの有効性:** ブロックハッシュは約2分間（ただし変動する可能性があります）有効です。トランザクションは、その`lastValidBlockHeight`が経過する前にネットワークによって確認される必要があります。最後に取得したハッシュからかなりの時間が経過している場合は、新しいブロックハッシュを取得してください。
* **コミットメントの選択:** 重要なトランザクションには、`finalized`コミットメントを使用すると、メインチェーンフォークからのブロックハッシュであるという最も強力な保証を提供しますが、やや古い場合があります。`confirmed`は良いバランスを提供します。[コミットメントレベルについて詳しく](https://www.helius.dev/blog/solana-commitment-levels)学びましょう。
* **トランザクション手数料:** 適切なトランザクション手数料も計算して含めることを忘れないでください。ブロックハッシュ自体は手数料を決定しません。
* **再試行ロジック:** トランザクションが失効し、その`lastValidBlockHeight`が経過した場合は、より最近の新しいブロックハッシュで再署名して再送信する必要があります。

このガイドでは、Solanaネットワークを通じてトランザクションと効果的にやり取りするための礎である`getLatestBlockhash`の使用手順を提供します。

## 関連メソッド

<CardGroup cols={2}>
  <Card title="simulateTransaction" href="/ja/api-reference/rpc/http/simulatetransaction">
    送信前にトランザクションをシミュレート
  </Card>

  <Card title="isBlockhashValid" href="/ja/api-reference/rpc/http/isblockhashvalid">
    ブロックハッシュがまだ有効かどうかを確認
  </Card>
</CardGroup>
