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

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

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

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

<Tip>
  Для расширенной фильтрации, сортировки и получения истории токен-аккаунтов используйте вместо этого [`getTransactionsForAddress`](/docs/ru/rpc/gettransactionsforaddress). Учтите, что `getSignaturesForAddress` не включает транзакции, связанные с ассоциированными токен-аккаунтами.
</Tip>

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

* **История транзакций аккаунта:** Отображение предыдущих транзакций кошелька пользователя. Для более продвинутого разбора истории транзакций используйте [Enhanced Transactions API](https://www.helius.dev/docs/enhanced-transactions) от Helius.
* **Аудит активности:** Просмотр всех транзакций, связанных с определенным смарт-контрактом или аккаунтом.
* **Поиск конкретной транзакции:** Поиск определенной транзакции путем последовательного просмотра истории аккаунта, если известен только связанный с ней адрес.
* **Индексирование данных:** Создание локального индекса транзакций для ускорения запросов и анализа.

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

1. **`address`** (`string`): (Обязательный) Публичный ключ аккаунта в кодировке base-58, для которого необходимо получить подписи транзакций.
2. **`options`** (`object`, необязательный): Необязательный объект конфигурации со следующими полями:
   * **`limit`** (`number`, необязательный): Максимальное количество возвращаемых подписей. Значение по умолчанию — 1000, максимально допустимое значение — 1000.
   * **`before`** (`string`, необязательный): Подпись транзакции в кодировке base-58. Если она указана, запрос начнет поиск транзакций, предшествующих этой подписи.
   * **`until`** (`string`, необязательный): Подпись транзакции в кодировке base-58. Если она указана, запрос будет искать транзакции до достижения этой подписи, не включая ее.
   * **`commitment`** (`string`, необязательный): Указывает [уровень подтверждения](https://www.helius.dev/blog/solana-commitment-levels), используемый для запроса. Поддерживаются значения `finalized` и `confirmed`. Уровень подтверждения `processed` не поддерживается. Если параметр не указан, используется уровень подтверждения RPC-узла по умолчанию — обычно `finalized`.
   * **`minContextSlot`** (`number`, необязательный): Минимальный слот, в контексте которого можно обработать запрос. Этот параметр не фильтрует исторические транзакции, а задает минимальный слот для контекста узла.

<Warning>
  **Пакетная обработка не поддерживается**

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

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

Поле `result` ответа JSON-RPC представляет собой массив объектов с информацией о подписях. Каждый объект имеет следующую структуру:

* **`signature`** (`string`): Подпись транзакции в кодировке base-58.
* **`slot`** (`u64`): Слот, в котором была обработана транзакция.
* **`err`** (`object` | `null`): Объект ошибки, если транзакция завершилась неудачно, или `null`, если она выполнена успешно.
* **`memo`** (`string` | `null`): Заметка, связанная с транзакцией, если она есть.
* **`blockTime`** (`i64` | `null`): Расчетное время создания блока, содержащего транзакцию, в виде временной метки Unix (количество секунд с начала эпохи). `null`, если значение недоступно.
* **`confirmationStatus`** (`string` | `null`): Статус подтверждения транзакции (например, `processed`, `confirmed`, `finalized`). `null`, если значение недоступно (например, в более старых ответах Helius).

## Примеры

### 1. Получение последних подписей для адреса

В этом примере для заданного адреса запрашиваются подписи последних транзакций — до 1000 подписей.

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

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

  async function getLatestSignatures() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    // Replace with the public key you want to query
    const address = new PublicKey('11111111111111111111111111111111'); 

    try {
      const signatures = await connection.getSignaturesForAddress(address);
      if (signatures && signatures.length > 0) {
        console.log(`Found ${signatures.length} signatures:`);
        signatures.forEach((sigInfo, index) => {
          console.log(`--- Signature ${index + 1} ---`);
          console.log(`  Signature: ${sigInfo.signature}`);
          console.log(`  Slot: ${sigInfo.slot}`);
          console.log(`  Block Time: ${sigInfo.blockTime ? new Date(sigInfo.blockTime * 1000).toLocaleString() : 'N/A'}`);
          console.log(`  Error: ${JSON.stringify(sigInfo.err)}`);
          console.log(`  Memo: ${sigInfo.memo || 'N/A'}`);
          console.log(`  Confirmation Status: ${sigInfo.confirmationStatus || 'N/A'}`);
        });
      } else {
        console.log('No signatures found for this address.');
      }
    } catch (error) {
      console.error('Error fetching signatures:', error);
    }
  }

  getLatestSignatures();
  ```
</CodeGroup>

### 2. Получение подписей с ограничением количества

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

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace TARGET_ACCOUNT_ADDRESS with the address you want to query
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSignaturesForAddress",
      "params": [
        "TARGET_ACCOUNT_ADDRESS",
        {
          "limit": 5 
        }
      ]
    }'
  ```

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

  async function getLimitedSignatures() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    // Replace with the public key you want to query
    const address = new PublicKey('Vote111111111111111111111111111111111111111'); 
    const limit = 5;

    try {
      const signatures = await connection.getSignaturesForAddress(address, { limit });
      console.log(`Fetched up to ${limit} signatures:`);
      signatures.forEach((sigInfo, index) => {
        console.log(`${index + 1}. Signature: ${sigInfo.signature}, Slot: ${sigInfo.slot}`);
      });
    } catch (error) {
      console.error(`Error fetching limited signatures for ${address.toBase58()}:`, error);
    }
  }

  getLimitedSignatures();
  ```
</CodeGroup>

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

В этом примере показано, как получать историю транзакций пакетами с помощью параметра `before`.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Initial request (get the latest 2)
  # Replace <api-key> with your Helius API key
  # Replace TARGET_ACCOUNT_ADDRESS with the address you want to query
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSignaturesForAddress",
      "params": [
        "TARGET_ACCOUNT_ADDRESS",
        { "limit": 2 }
      ]
    }'

  # Suppose the last signature from the above response was LAST_SIGNATURE_FROM_PREVIOUS_BATCH
  # Fetch the next 2 transactions before that one
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSignaturesForAddress",
      "params": [
        "TARGET_ACCOUNT_ADDRESS",
        { 
          "limit": 2,
          "before": "LAST_SIGNATURE_FROM_PREVIOUS_BATCH" 
        }
      ]
    }'
  ```

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

  async function paginateSignatures() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    // Replace with the public key you want to query - e.g. a known active address
    const address = new PublicKey('Vote111111111111111111111111111111111111111'); 
    const batchSize = 2;
    let lastSignature = null;
    let allSignatures = [];
    const maxPages = 3; // Limit how many pages we fetch for this example

    try {
      for (let i = 0; i < maxPages; i++) {
        console.log(`Fetching page ${i + 1}...`);
        const options = { limit: batchSize };
        if (lastSignature) {
          options.before = lastSignature;
        }

        const signatures = await connection.getSignaturesForAddress(address, options);
        
        if (signatures.length === 0) {
          console.log('No more signatures found.');
          break;
        }

        signatures.forEach(sigInfo => {
          allSignatures.push(sigInfo.signature);
          console.log(`  Found: ${sigInfo.signature} in slot ${sigInfo.slot}`);
        });
        
        lastSignature = signatures[signatures.length - 1]?.signature;

        if (signatures.length < batchSize || !lastSignature) {
           console.log('Fetched all available signatures or reached end of page.');
           break;
        }
        // Optional: Add a small delay if making many sequential requests
        // await new Promise(resolve => setTimeout(resolve, 200)); 
      }
      console.log(`
  Total signatures fetched (${allSignatures.length}):`);
      allSignatures.forEach((sig, idx) => console.log(`${idx + 1}. ${sig}`));

    } catch (error) {
      console.error('Error paginating signatures:', error);
    }
  }

  paginateSignatures();
  ```
</CodeGroup>

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

* **Пагинация:** Чтобы получить полную историю транзакций активного аккаунта, вероятно, потребуется выполнить несколько запросов. Передавайте в параметре `before` последнюю подпись, полученную в предыдущем пакете, и укажите `limit`.
* **Ограничения частоты запросов:** При получении обширной истории транзакций учитывайте ограничения частоты запросов RPC-узла.
* **Порядок:** Подписи всегда возвращаются от самых новых к самым старым.
* **Параметр `limit`:** Значение параметра `limit` может находиться в диапазоне от 1 до 1000. Если параметр не указан, по умолчанию используется значение 1000.
* **Параметр `until`:** Этот параметр позволяет прекратить получение подписей при достижении известной более старой подписи. Это может быть полезно, если вам нужны только транзакции до определенного момента.
* **`minContextSlot`:** Этот параметр не фильтрует исторические транзакции. Он задает минимальный слот, который RPC-узел должен использовать для своего контекста при обработке запроса. Если состояние узла старше этого слота, узел может вернуть ошибку.
* **Сведения о транзакции:** Этот метод возвращает только подписи и основную информацию. Чтобы получить полные сведения о транзакции, используйте метод `getTransaction` для каждой подписи.
* **Ограничение для токен-аккаунтов:** Этот метод возвращает только транзакции, которые напрямую ссылаются на указанный адрес. Он не включает транзакции с токен-аккаунтами, принадлежащими этому адресу. Чтобы получить полную историю токенов, включая ассоциированные токен-аккаунты, используйте [`getTransactionsForAddress`](/docs/ru/rpc/gettransactionsforaddress) с фильтром `tokenAccounts`.

Используя `getSignaturesForAddress` с параметрами пагинации, вы можете эффективно получать историю транзакций для любого адреса Solana и управлять ею.

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

<CardGroup cols={2}>
  <Card title="getTransactionsForAddress" href="/docs/ru/rpc/gettransactionsforaddress">
    Расширенная фильтрация, сортировка и история токен-аккаунтов
  </Card>

  <Card title="getTransaction" href="/docs/ru/api-reference/rpc/http/gettransaction">
    Получение полных сведений о транзакции по подписи
  </Card>
</CardGroup>


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