> ## 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 的使用案例、代码示例、请求参数、响应结构和提示。

[`getInflationReward`](https://www.helius.dev/docs/api-reference/rpc/http/getinflationreward) RPC方法允许您查询[通胀](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`** （整数，可选）：请求的最低槽位。确保查询基于处理到至少此槽位的分类帐状态。

## 响应结构

JSON-RPC响应的`result`字段将是一个数组，对应于输入的`addresses`数组。结果数组中的每个元素将是：

* 如果地址在指定纪元收到奖励，则为包含通胀奖励详细信息的**对象**。
* 如果地址未在该纪元收到通胀奖励或账户不存在，则为\*\*`null`\*\*。

奖励对象具有以下字段：

* **`epoch`** （u64）：奖励被记入的纪元。
* **`effectiveSlot`** （u64）：奖励应用并生效的槽位。
* **`amount`** （u64）：奖励金额（以lamports为单位）。
* **`postBalance`** （u64）：奖励记入后账户的余额（以lamports为单位）。
* **`commission`** （u8 | 未定义）：对于投票账户，这是奖励记入时验证器收取的佣金百分比（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` 结果表示在指定纪元中未找到该地址的奖励。这可能是因为账户无资格（例如，不是足够抵押的股份账户）、奖励为零或账户在当时不存在。
* **速率限制：** 请注意 RPC 提供商的速率限制，尤其是在查询大量地址时。

本指南帮助您使用 `getInflationReward` 方法，在 Solana 网络上准确检索和验证抵押奖励。
