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

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

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

Метод RPC [`getInflationReward`](https://www.helius.dev/docs/api-reference/rpc/http/getinflationreward) позволяет запрашивать [инфляционные](https://www.helius.dev/blog/solana-issuance-inflation-schedule) вознаграждения (обычно называемые вознаграждениями за стейкинг), начисленные на один или несколько адресов за определённую эпоху.

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

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

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

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

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

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

Метод принимает два основных параметра:

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

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

Поле `result` ответа JSON-RPC представляет собой массив, соответствующий входному массиву `addresses`. Каждый элемент массива результатов будет содержать одно из следующих значений:

* **Объект** со сведениями об инфляционном вознаграждении, если адрес получил вознаграждение за указанную эпоху.
* **`null`**, если адрес не получил инфляционное вознаграждение за эту эпоху или аккаунт не существовал.

Объект вознаграждения содержит следующие поля:

* **`epoch`** (u64): эпоха, за которую было начислено вознаграждение.
* **`effectiveSlot`** (u64): слот, в котором вознаграждение было применено и вступило в силу.
* **`amount`** (u64): сумма вознаграждения в лампортах.
* **`postBalance`** (u64): баланс аккаунта в лампортах после начисления вознаграждения.
* **`commission`** (u8 | undefined): для голосующих аккаунтов — процент комиссии (0–100), удержанный валидатором на момент начисления вознаграждения. Для неголосующих аккаунтов значением будет `undefined`.

## Примеры

### 1. Получение инфляционного вознаграждения для одного адреса за предыдущую эпоху

В этом примере выполняется получение инфляционного вознаграждения для определённого адреса за последнюю завершённую эпоху.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VOTE_ACCOUNT_PUBKEY with an actual vote account public key
  # 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": "getInflationReward",
      "params": [
        ["YOUR_VOTE_ACCOUNT_PUBKEY"]
      ]
    }'
  ```

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

  async function checkInflationReward() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const voteAccountPubkey = new PublicKey('YOUR_VOTE_ACCOUNT_PUBKEY'); // Example: 'Vote111111111111111111111111111111111111111'

    try {
      const rewards = await connection.getInflationReward([voteAccountPubkey]);
      if (rewards && rewards[0]) {
        const rewardInfo = rewards[0];
        console.log(`Reward for Epoch ${rewardInfo.epoch}:`);
        console.log(`  Amount: ${rewardInfo.amount} lamports`);
        console.log(`  Effective Slot: ${rewardInfo.effectiveSlot}`);
        console.log(`  Post Balance: ${rewardInfo.postBalance} lamports`);
        if (rewardInfo.commission !== undefined) {
          console.log(`  Commission: ${rewardInfo.commission}%`);
        }
      } else {
        console.log('No inflation reward found for the address in the previous epoch.');
      }
      // console.log(JSON.stringify(rewards, null, 2));
    } catch (error) {
      console.error('Error fetching inflation reward:', error);
    }
  }

  checkInflationReward();
  ```
</CodeGroup>

### 2. Получение инфляционных вознаграждений для нескольких адресов за определённую эпоху

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

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

  async function checkMultipleRewards() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const address1 = new PublicKey('PUBKEY_1'); 
    const address2 = new PublicKey('PUBKEY_2');
    const specificEpoch = 450;

    try {
      const rewards = await connection.getInflationReward(
        [address1, address2],
        specificEpoch,
        { commitment: 'confirmed' }
      );
      rewards.forEach((rewardInfo, index) => {
        const address = index === 0 ? 'PUBKEY_1' : 'PUBKEY_2';
        if (rewardInfo) {
          console.log(`Reward for ${address} in Epoch ${rewardInfo.epoch}:`);
          console.log(`  Amount: ${rewardInfo.amount} lamports`);
        } else {
          console.log(`No inflation reward found for ${address} in Epoch ${specificEpoch}.`);
        }
      });
      // console.log(JSON.stringify(rewards, null, 2));
    } catch (error) {
      console.error('Error fetching inflation rewards for epoch ', specificEpoch, error);
    }
  }

  checkMultipleRewards();
  ```
</CodeGroup>

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

* **Выбор эпохи:** Вознаграждения начисляются один раз за эпоху. Убедитесь, что запрашиваете правильный номер эпохи.
* **Время начисления вознаграждений:** Инфляционные вознаграждения рассчитываются в конце эпохи и применяются в начале следующей. Поле `effectiveSlot` указывает, когда это происходит.
* **Результаты null:** Значение `null` для адреса означает, что для этого адреса не найдено вознаграждение за указанную эпоху. Это может произойти, если аккаунт не соответствовал требованиям (например, на стейк-аккаунте было недостаточно средств в стейкинге), вознаграждение было нулевым или аккаунт в тот момент не существовал.
* **Ограничения частоты запросов:** Учитывайте ограничения частоты запросов поставщика RPC, особенно при запросе большого количества адресов.

Это руководство поможет вам использовать метод `getInflationReward` для точного получения и проверки вознаграждений за стейкинг в сети Solana.


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