> ## 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.

# Как использовать isBlockhashValid

> Узнайте о сценариях использования isBlockhashValid, примерах кода, параметрах запроса, структуре ответа и рекомендациях.

Метод RPC [`isBlockhashValid`](https://www.helius.dev/docs/api-reference/rpc/http/isblockhashvalid) проверяет, считается ли ранее полученный хеш блока действительным в сети. Срок действия хешей блоков ограничен (примерно 2 минуты, или 150 блоков), после чего ссылающиеся на них транзакции будут отклонены.

Этот метод критически важен для приложений, которые некоторое время хранят хеши блоков перед отправкой транзакции. Он позволяет убедиться, что транзакция не завершится ошибкой из-за истечения срока действия хеша блока.

**Примечание о версии:** этот метод доступен в `solana-core` версии 1.9 и новее. Для узлов с `solana-core` версии 1.8 или более ранней используйте `getFeeCalculatorForBlockhash`. Помимо информации о комиссии, этот метод также косвенно указывает, действителен ли хеш блока: если он слишком старый, метод вернет ошибку.

## Распространенные сценарии использования

* **Повторная отправка транзакции:** перед повторной отправкой транзакции, завершившейся ошибкой, проверьте, действителен ли ее исходный хеш блока. Если нет, необходимо получить новый хеш блока.
* **Отложенное подписание транзакции:** если транзакция подготовлена, но будет подписана и отправлена позднее, проверьте действительность хеша блока непосредственно перед отправкой.
* **Оптимистичная обработка транзакций:** определите, будет ли хеш блока принят сетью, если отправить транзакцию немедленно.

## Параметры запроса

1. **`blockhash`** (строка, обязательный): проверяемый хеш блока в виде строки, закодированной в base-58.
2. **`options`** (объект, необязательный): необязательный объект конфигурации, который может содержать:
   * **`commitment`** (строка, необязательный): задает [уровень подтверждения](https://www.helius.dev/blog/solana-commitment-levels) для запроса (например, `"finalized"`, `"confirmed"`, `"processed"`). Если параметр не указан, используется уровень подтверждения узла по умолчанию.
   * **`minContextSlot`** (u64, необязательный): минимальный слот, на котором можно обработать запрос. Это гарантирует, что узел RPC не вернет состояние из слота, предшествующего `minContextSlot`.

## Структура ответа

Поле `result` в ответе JSON-RPC представляет собой объект `RpcResponse`, содержащий:

* **`context`** (объект): объект, содержащий:
  * **`slot`** (u64): слот, на котором узел RPC оценивал действительность хеша блока.
* **`value`** (логическое значение): `true`, если хеш блока все еще действителен, иначе `false`.

**Пример ответа (действительный хеш блока):**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": { "slot": 180000500 },
    "value": true
  },
  "id": 1
}
```

**Пример ответа (недействительный хеш блока или истекший срок действия):**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": { "slot": 180000800 },
    "value": false
  },
  "id": 1
}
```

## Примеры кода

<CodeGroup>
  ```bash cURL theme={"system"}
  # Check validity of a blockhash (replace <YOUR_BLOCKHASH>):
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "isBlockhashValid",
      "params": [
        "<YOUR_BLOCKHASH>"
      ]
    }' \
    <YOUR_RPC_URL>

  # Check with commitment and minContextSlot (replace <YOUR_BLOCKHASH>):
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "isBlockhashValid",
      "params": [
        "<YOUR_BLOCKHASH>",
        {
          "commitment": "confirmed",
          "minContextSlot": 170000000
        }
      ]
    }' \
    <YOUR_RPC_URL>
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function checkBlockhash(blockhashToCheck) {
    // Replace with your RPC endpoint
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');

    try {
      console.log(`Checking validity of blockhash: ${blockhashToCheck}`);
      const result = await connection.isBlockhashValid(blockhashToCheck);
      
      console.log(`  Blockhash is valid: ${result.value}`);
      console.log(`  Checked at slot: ${result.context.slot}`);

      // Example with options
      // const resultWithOptions = await connection.isBlockhashValid(
      //   blockhashToCheck,
      //   { commitment: 'confirmed', minContextSlot: result.context.slot - 100 }
      // );
      // console.log(`\nWith options - Valid: ${resultWithOptions.value}, Slot: ${resultWithOptions.context.slot}`);

    } catch (error) {
      console.error(`Error checking blockhash ${blockhashToCheck}:`, error);
    }
  }

  // Example usage: First, get a recent blockhash
  async function getRecentBlockhashAndCheck() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const { blockhash } = await connection.getLatestBlockhash();
      await checkBlockhash(blockhash); 
      
      // Example with a known old/invalid blockhash (will likely be false)
      // This blockhash is just an example and will be invalid.
      const oldBlockhash = 'J7rBdM6AecPDEZp8aPq5iPSNKVkU5Q76F3oAV4eW5wsW'; 
      // await checkBlockhash(oldBlockhash);

    } catch (error) {
      console.error('Error in example execution:', error);
    }
  }

  getRecentBlockhashAndCheck();
  ```
</CodeGroup>

## Рекомендации для разработчиков

* **Срок действия хешей блоков истекает:** хеши блоков действительны только в течение ограниченного времени — около 150 слотов, или примерно 1–2 минут. Всегда получайте новый хеш блока, если не уверены в его актуальности или если прошло значительное время.
* **Использование `minContextSlot`:** используйте `minContextSlot` для защиты от запросов к неактуальному узлу RPC, который может вернуть устаревший ответ «действителен» для хеша блока, фактически уже слишком старого с точки зрения остальной части кластера.
* **Альтернатива для старых узлов:** для узлов с версиями Solana ниже 1.9 используйте `getFeeCalculatorForBlockhash("<YOUR_BLOCKHASH>")`. Если этот метод выполнен успешно, хеш блока действителен. Если он возвращает ошибку — обычно потому, что хеш блока не найден или слишком стар, — хеш блока недействителен.
* **Подтверждение сетью:** даже если `isBlockhashValid` возвращает `true`, транзакция считается окончательно подтвержденной только после того, как после отправки достигнет в сети требуемого уровня подтверждения.

В этом руководстве приведены сведения, необходимые для эффективного использования метода RPC `isBlockhashValid` при разработке приложений Solana.

## Связанные методы

<CardGroup cols={2}>
  <Card title="getLatestBlockhash" href="/docs/ru/api-reference/rpc/http/getlatestblockhash">
    Получите новый хеш блока для новых транзакций
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.