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

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

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

Метод RPC [`getSignatureStatuses`](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturestatuses) позволяет получить статус обработки и подтверждения списка подписей транзакций. Это полезно, чтобы определить, были ли транзакции [обработаны, подтверждены или финализированы](https://www.helius.dev/blog/solana-commitment-levels) сетью.

Если параметр `searchTransactionHistory` не включен, этот метод преимущественно обращается к кешу недавних статусов на RPC-узле. Для более старых транзакций крайне важно включить `searchTransactionHistory`.

<Warning>
  **Избегайте пакетной обработки для повышения производительности**

  Пакетная обработка архивных методов значительно увеличивает задержку. Пакеты размером более 10 запросов не допускаются.
</Warning>

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

* **Подтверждение финальности транзакции:** проверка того, достигла ли отправленная транзакция требуемого уровня подтверждения (например, `confirmed` или `finalized`).
* **Пакетная проверка статусов:** эффективная одновременная проверка статуса нескольких транзакций, например после пакетной отправки.
* **Обновление пользовательского интерфейса на основе состояния транзакции:** отображение пользователю статуса транзакции в реальном времени.
* **Проверка ошибок:** определение того, завершилась ли какая-либо транзакция из списка с ошибкой и почему.

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

1. **`signatures`** (`array` из `string`): (Обязательный) Массив подписей транзакций в кодировке base-58. В одном запросе можно проверить до 256 подписей.
2. **`options`** (`object`, необязательный): необязательный объект конфигурации со следующим полем:
   * **`searchTransactionHistory`** (`boolean`, необязательный): если указано `true`, RPC-узел выполнит поиск подписей по всей истории транзакций. Если указано `false` (значение по умолчанию), поиск выполняется только в кеше недавних статусов. Для старых или потенциально отброшенных транзакций задайте значение `true`.

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

Поле `result` ответа JSON-RPC содержит объект с двумя полями:

* **`context`** (`object`): объект, содержащий:
  * **`slot`** (`u64`): слот, в котором RPC-узел обработал этот запрос.
* **`value`** (`array` из `object` | `null`): массив объектов статуса, порядок которых соответствует порядку подписей в запросе. Каждый элемент может быть:
  * **Объектом** со следующими полями, если подпись найдена:
    * **`slot`** (`u64`): слот, в котором была обработана транзакция.
    * **`confirmations`** (`number` | `null`): количество блоков, подтвержденных после обработки транзакции. Значение `null`, если транзакция финализирована, поскольку финальность означает, что она не будет отменена и точное количество подтверждений уже не столь важно.
    * **`err`** (`object` | `null`): объект ошибки, если транзакция завершилась с ошибкой (например, `{"InstructionError":[0,{"Custom":1}]}`), или `null`, если она выполнена успешно.
    * **`status`** (`object`): объект, указывающий статус выполнения транзакции. Обычно `{"Ok":null}` для успешно выполненных транзакций или объект с подробными сведениями об ошибке для неудачных.
    * **`confirmationStatus`** (`string` | `null`): статус подтверждения транзакции в кластере (например, `processed`, `confirmed`, `finalized`). Может иметь значение `null`, если статус отсутствует в кеше, а `searchTransactionHistory` имеет значение false.
  * **`null`**: если подпись не найдена в кеше статусов и `searchTransactionHistory` имеет значение `false` (или если она действительно не существует даже при поиске по истории).

## Примеры

### 1. Получение статуса списка подписей (кеш недавних данных)

В этом примере извлекается статус двух подписей из кеша недавних данных узла.

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

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

  async function checkRecentSignatures() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const signatures = [
      '5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW',
      '2x5YfV29N4p9K2kEFK2gFfC5T5acbs2z2MytTZqrgq17pYjCMfYjW4sAUpkWMkMzxGztD2Qv5v7n92uYJcQY9c7a' // Replace with another signature
    ];

    try {
      const response = await connection.getSignatureStatuses(signatures);
      console.log("RPC Response Context Slot:", response.context.slot);
      response.value.forEach((status, index) => {
        console.log(`--- Status for Signature ${index + 1} (${signatures[index].substring(0,10)}...) ---`);
        if (status) {
          console.log(`  Slot: ${status.slot}`);
          console.log(`  Confirmations: ${status.confirmations === null ? 'Finalized (or N/A)' : status.confirmations}`);
          console.log(`  Error: ${JSON.stringify(status.err)}`);
          console.log(`  Execution Status: ${JSON.stringify(status.status)}`);
          console.log(`  Confirmation Status: ${status.confirmationStatus}`);
        } else {
          console.log('  Status not found (likely not in recent cache or does not exist).');
        }
      });
    } catch (error) {
      console.error('Error fetching signature statuses:', error);
    }
  }

  checkRecentSignatures();
  ```
</CodeGroup>

### 2. Получение статуса с поиском по истории транзакций

В этом примере извлекается статус подписей и явно запрашивается поиск по истории транзакций узла.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace with actual transaction signatures
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSignatureStatuses",
      "params": [
        [
          "3jPTfHcbzWHeD4jW8q4Y8g3h2D1aBwM81y1sHhDqYQ7Z9x5n7cVy2gD8QWbK9eXwSjJ6aA7FzV2kLpQoEwU9jX", 
          "4SyzjM2fTALqTNjLKMM1yG1bW7kCFu2GvEkKcvKChG9o1KjQW8jLdZ6sWfN9mP1pU3rD7XvA6B2CjHkLwRzYxTnX"  
        ],
        {
          "searchTransactionHistory": true
        }
      ]
    }'
  ```

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

  async function checkSignaturesWithHistory() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const signatures = [
      // Replace with a signature you know is older or might have been dropped
      '3jPTfHcbzWHeD4jW8q4Y8g3h2D1aBwM81y1sHhDqYQ7Z9x5n7cVy2gD8QWbK9eXwSjJ6aA7FzV2kLpQoEwU9jX',
      // Replace with another valid signature
      '4SyzjM2fTALqTNjLKMM1yG1bW7kCFu2GvEkKcvKChG9o1KjQW8jLdZ6sWfN9mP1pU3rD7XvA6B2CjHkLwRzYxTnX' 
    ];

    try {
      const response = await connection.getSignatureStatuses(signatures, { searchTransactionHistory: true });
      console.log("RPC Response Context Slot:", response.context.slot);
      response.value.forEach((status, index) => {
        console.log(`--- Status for Signature ${index + 1} (${signatures[index].substring(0,10)}...) ---`);
        if (status) {
          console.log(`  Slot: ${status.slot}`);
          console.log(`  Confirmations: ${status.confirmations === null ? 'Finalized (or N/A)' : status.confirmations}`);
          console.log(`  Error: ${JSON.stringify(status.err)}`);
          console.log(`  Execution Status: ${JSON.stringify(status.status)}`);
          console.log(`  Confirmation Status: ${status.confirmationStatus}`);
        } else {
          console.log('  Status not found (even with history search, it might not exist or is too old).');
        }
      });
    } catch (error) {
      console.error('Error fetching signature statuses with history:', error);
    }
  }

  checkSignaturesWithHistory();
  ```
</CodeGroup>

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

* **`searchTransactionHistory`:** критически важно для надежности. Если установлено значение `false` (по умолчанию), метод проверяет только ограниченный кеш недавних данных. Если транзакция старая или потенциально была отброшена и отсутствует в этом кеше, для статуса этой подписи будет возвращено `null`. Всегда задавайте `true`, если необходимо подтвердить статус транзакций, которые могут быть не совсем новыми.
* **Ограничение количества подписей:** за один вызов можно проверить не более 256 подписей.
* **Статус `null`:** значение `null` в массиве `value` для определенной подписи означает, что ее статус не найден. Причиной может быть отсутствие транзакции в кеше недавних данных (если `searchTransactionHistory` имеет значение false), то, что транзакция никогда не попала в блок, или то, что она слишком старая и отсутствует в истории узла даже при использовании `searchTransactionHistory: true`.
* **`confirmations: null`**: обычно это означает, что транзакция достигла статуса `finalized`. На этом этапе конкретное количество подтверждений уже не столь важно, поскольку блок считается необратимым.
* **Обработка ошибок:** проверьте поле `err` в каждом объекте статуса, чтобы определить, завершилась ли транзакция с ошибкой. Поле `status` также содержит подробные сведения (например, `{"Err":...}`).

Использование `getSignatureStatuses` — эффективный способ отслеживать состояние нескольких транзакций Solana. Для надежной проверки статуса используйте `searchTransactionHistory: true`.


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