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

# getSupplyの使い方

> getSupplyのユースケース、コード例、リクエストパラメータ、レスポンス構造、ヒントを学びます。

[`getSupply`](https://www.helius.dev/docs/api-reference/rpc/http/getsupply) RPCメソッドは、Solanaネットワーク上のSOLの現在の供給に関する情報を提供します。総供給量、循環供給量、非循環供給量を詳述し、オプションで非循環アカウントをリストすることもできます。

## 一般的なユースケース

* **SOLトークノミクスの理解:** SOLの現在の配分をスナップショットで取得します。
* **経済分析:** 時間を追った供給メトリクスの変更を追跡します。
* **ネットワーク統計の表示:** ダッシュボードやエクスプローラにおけるSOL供給の最新情報をユーザーに提供します。
* **インフレーションモニタリング:** `getInflationRate`や`getInflationGovernor`がより直接的なインフレーションデータを提供する一方、`getSupply`はより広いコンテキストを提供します。

## リクエストパラメータ

`getSupply`メソッドは以下のフィールドを含むオプションの設定オブジェクトを受け入れます。

1. **`commitment`** (string, optional): クエリの[コミットメントレベル](https://www.helius.dev/blog/solana-commitment-levels)を指定します。省略された場合、RPCノードのデフォルトのコミットメントが使用されます。
2. **`excludeNonCirculatingAccountsList`** (boolean, optional): `true`に設定されている場合、レスポンスから`nonCirculatingAccounts`配列が除外されます。デフォルトは`false`です。個別の非循環アカウントリストが不要な場合、レスポンスサイズを削減するのに役立ちます。

**設定例:**

```json theme={"system"}
{
  "commitment": "finalized",
  "excludeNonCirculatingAccountsList": true
}
```

## レスポンス構造

レスポンスは以下のフィールドを持つJSONオブジェクトです。

* **`value`**: 供給情報を含むオブジェクト:
  * **`total`** (u64): Lamportsでの総SOL供給量。
  * **`circulating`** (u64): Lamportsでの循環SOL供給量。
  * **`nonCirculating`** (u64): Lamportsでの非循環SOL供給量。
  * **`nonCirculatingAccounts`** (array of strings, optional): 非循環SOLを保持するアカウントの公開鍵（base58でエンコードされた文字列として）の配列。このフィールドは、リクエストで`excludeNonCirculatingAccountsList`が`true`に設定されている場合は省略されます。
* **`context`**: 次を含むオブジェクト:
  * **`slot`** (u64): 情報が取得されたスロット。

**例レスポンス（`excludeNonCirculatingAccountsList: false`を含む）:**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "slot": 169890374
    },
    "value": {
      "circulating": 423105827585008800,
      "nonCirculating": 123456789012345678, // Example value
      "nonCirculatingAccounts": [
        "Stake11111111111111111111111111111111111111",
        "Vote11111111111111111111111111111111111111",
        // ... other non-circulating accounts
      ],
      "total": 546562616597354478
    }
  },
  "id": 1
}
```

**例レスポンス（`excludeNonCirculatingAccountsList: true`を含む）:**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "slot": 169890380
    },
    "value": {
      "circulating": 423105830000000000,
      "nonCirculating": 123456780000000000, // Example value
      "total": 546562610000000000
      // nonCirculatingAccounts field is absent
    }
  },
  "id": 1
}
```

## コード例

<CodeGroup>
  ```bash cURL theme={"system"}
  # Basic Request:
  curl -X POST -H "Content-Type: application/json" -d \
    '{"jsonrpc":"2.0","id":1,"method":"getSupply"}' \
    <YOUR_RPC_URL>

  # Request with excludeNonCirculatingAccountsList:
  curl -X POST -H "Content-Type: application/json" -d \
    '{"jsonrpc":"2.0","id":1,"method":"getSupply", "params": [{"excludeNonCirculatingAccountsList": true}]}' \
    <YOUR_RPC_URL>

  # Request with commitment:
  curl -X POST -H "Content-Type: application/json" -d \
    '{"jsonrpc":"2.0","id":1,"method":"getSupply", "params": [{"commitment": "confirmed", "excludeNonCirculatingAccountsList": false}]}' \
    <YOUR_RPC_URL>
  ```

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

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

    try {
      const supplyInfo = await connection.getSupply();
      console.log('Supply Information:', supplyInfo.value);
      console.log('Total SOL:', supplyInfo.value.total / 1_000_000_000); // Convert lamports to SOL
      console.log('Circulating SOL:', supplyInfo.value.circulating / 1_000_000_000);
      console.log('Non-Circulating SOL:', supplyInfo.value.nonCirculating / 1_000_000_000);

      if (supplyInfo.value.nonCirculatingAccounts) {
        console.log('Non-circulating accounts count:', supplyInfo.value.nonCirculatingAccounts.length);
      }

      // Example with options
      const supplyInfoWithoutAccountsList = await connection.getSupply({
        commitment: 'finalized',
        excludeNonCirculatingAccountsList: true,
      });
      console.log('\nSupply Information (excluding non-circulating accounts list):');
      console.log('Total SOL:', supplyInfoWithoutAccountsList.value.total / 1_000_000_000);
      console.log('Circulating SOL:', supplyInfoWithoutAccountsList.value.circulating / 1_000_000_000);

    } catch (error) {
      console.error('Error getting supply information:', error);
    }
  }

  getNetworkSupply();
  ```
</CodeGroup>

## 開発者向けのヒント

* **LamportsとSOL:** 金額はLamportsで返されます。SOLに変換するには`1,000,000,000`を除算します(1 SOL = 10^9 lamports)。
* **データの鮮度:** データは`context`オブジェクトで示されるスロットの状態を反映しており、使用されたコミットメントレベルに基づいています。
* **`excludeNonCirculatingAccountsList`:** 総供給数のみが必要な場合、レスポンスサイズと処理時間を最適化するためにこのオプションを使用します。特に非循環アカウントのリストが非常に長い場合に便利です。
* **動的な値:** トークンの発行（インフレーション）やバーンメカニズムによって供給数は頻繁に変化する可能性があります。

このガイドはSolanaの供給データをクエリするために`getSupply` RPCメソッドを効果的に使用するためのものであるべきです。

## 関連メソッド

<CardGroup cols={2}>
  <Card title="getInflationRate" href="/ja/api-reference/rpc/http/getinflationrate">
    現在のインフレ率を取得
  </Card>

  <Card title="getInflationGovernor" href="/ja/api-reference/rpc/http/getinflationgovernor">
    インフレーションガバナンスパラメータを取得
  </Card>
</CardGroup>
