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

# IDL バージョンを一覧表示

> Parsed Events が Solana プログラムに対して保持しているすべての IDL バージョンを、各バージョンが有効になったスロットとともに一覧表示します。

このページのパスパラメータ、レスポンススキーマ、例は OpenAPI 定義から生成されています。

List IDL Versions は、Parsed Events と [Parsed Streams](https://www.helius.dev/docs/ja/parsed-streams.md) が命令のデコードに使用する IDL カタログから、プログラムのインターフェース履歴を返します。各項目は 1 つのバージョンを表し、そのバージョンが有効になったスロットによって識別されます。項目は古い順に並ぶため、最後の項目が現在のバージョンです。

レスポンス内の任意の `slot` を [Get IDL](https://www.helius.dev/docs/ja/api-reference/parsed-events/idl.md) に渡すと、そのバージョンの IDL ドキュメントを取得できます。[Orb explorer](https://www.helius.dev/docs/ja/orb/explore-programs.md) は、これらのエンドポイントを使用してプログラムの IDL を表示します。

## ユースケース

* **インターフェースの変更を追跡します。** 依存しているプログラムについて、List IDL Versions をポーリングします。新しいバージョンが追加されたら、Get IDL でそのバージョンと直前のバージョンを取得し、それぞれの `instructions` を比較します。新しい管理者命令や権限命令が追加された場合は、セキュリティレビューを行う価値があります。
* **カタログの対応範囲を確認します。** `404` は、カタログにそのプログラムの IDL がないことを示します。SPL Token などのプログラムは、代わりに組み込みデコーダーによってデコードされ、同様に `404` を返します。

## 例：新しい IDL バージョンを検出する

このスクリプトは、プログラムの IDL バージョンを一覧表示し、最新の 2 つを取得して、追加または削除された命令を出力します。

```javascript diff-idl-versions.js theme={"system"}
const API_KEY = process.env.HELIUS_API_KEY;

if (!API_KEY) {
  console.error("Missing HELIUS_API_KEY.");
  process.exit(1);
}

const BASE = "https://mainnet.helius-rpc.com/v1/parsed-events/idl";
const PROGRAM_ID = "KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD";

async function get(path) {
  const response = await fetch(`${BASE}/${path}?api-key=${API_KEY}`);
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }
  return response.json();
}

const versions = await get(PROGRAM_ID);
if (versions.length < 2) {
  console.log("Fewer than two IDL versions; nothing to compare.");
  process.exit(0);
}

const [previous, latest] = versions.slice(-2);
const [before, after] = await Promise.all([
  get(`${PROGRAM_ID}/${previous.slot}`),
  get(`${PROGRAM_ID}/${latest.slot}`),
]);

const names = (idl) => new Set(idl.instructions.map((ix) => ix.name));
const beforeNames = names(before);
const afterNames = names(after);

console.log(`Comparing slot ${previous.slot} with slot ${latest.slot}`);
console.log("Added:", [...afterNames].filter((name) => !beforeNames.has(name)));
console.log("Removed:", [...beforeNames].filter((name) => !afterNames.has(name)));
```

時間の経過に伴う変更を検出するには、最後に確認したバージョンの `slot` を保存し、ポーリングのたびに比較します。

## クレジット

各リクエストのコストは **10 クレジット**で、すべてのプランで利用できます。上記の例では 3 回リクエストするため、コストは 30 クレジットです。詳しくは[クレジット](https://www.helius.dev/docs/ja/billing/credits.md#parsed-events)を参照してください。

## エラー

| ステータス | 発生条件 |
| - | - |
| `400` | `programId` が有効な base58 アドレスではありません。 |
| `401` | API キーがないか、無効です。本文はプレーンテキストです：`Unauthorized`。 |
| `404` | カタログにそのプログラムの IDL がありません。 |

その他のエラーでは、`{"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}` などの `error` メッセージを含む JSON 本文が返されます。

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

**programId** `string` *required*

base58 でエンコードされたプログラムアドレス。


## OpenAPI

````yaml ja/openapi/parsed-events.yaml GET /v1/parsed-events/idl/{programId}
openapi: 3.0.3
info:
  title: 解析されたイベント
  version: 0.1.0
  description: Solanaトランザクションと解析されたトランザクション履歴を、解析されたイベントで解析します。
servers:
  - url: https://mainnet.helius-rpc.com
security:
  - ApiKeyQuery: []
paths:
  /v1/parsed-events/idl/{programId}:
    get:
      tags:
        - 解析済みイベント
      summary: IDL バージョンの一覧表示
      description: >-
        解析済みイベントがプログラムに対して保持しているすべての IDL
        バージョンを、古い順に一覧表示します。各バージョンは、有効になったスロットによって識別されます。
      operationId: listIdlVersionsParsedEvents
      parameters:
        - $ref: '#/components/parameters/ProgramId'
      responses:
        '200':
          description: プログラムの IDL バージョン。`slot` の昇順で並べ替えられています。
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IdlVersion'
              examples:
                default:
                  summary: Kamino Lend（43 バージョンのうち最初の 3 つ）
                  value:
                    - slot: 182747476
                      sources:
                        - anchor
                    - slot: 205509752
                      sources:
                        - anchor
                    - slot: 206074074
                      sources:
                        - anchor
        '400':
          description: '`programId` は有効なアドレスではありません。'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: 'invalid program id: notanaddress: String is the wrong size'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            カタログにこのプログラムの IDL がありません。SPL Token
            など、解析済みイベントが組み込みデコーダーでデコードするプログラムは `404` を返します。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: >-
                      no IDLs found for program
                      TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
components:
  parameters:
    ProgramId:
      name: programId
      in: path
      required: true
      description: base58 でエンコードされたプログラムアドレスです。
      schema:
        type: string
        example: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
  schemas:
    IdlVersion:
      type: object
      description: プログラムの 1 つの IDL バージョンです。
      required:
        - slot
        - sources
      properties:
        slot:
          type: integer
          format: uint64
          description: この IDL バージョンが有効になったスロットです。このバージョンを取得するには、IDL の取得に渡してください。
        sources:
          type: array
          description: >-
            解析済みイベントがこのバージョンを検出した場所です。値には `anchor`、`program_metadata`、`github`
            などがあり、今後さらに追加される可能性があります。1 つのバージョンに複数のソースがある場合があります。
          items:
            type: string
    ErrorResponse:
      type: object
      description: リクエストレベルのエラーレスポンス。
      properties:
        error:
          type: string
          description: エラーメッセージ。
  responses:
    Unauthorized:
      description: API キーがないか、無効です。本文はプレーンテキストです。
      content:
        text/plain:
          schema:
            type: string
          examples:
            default:
              value: Unauthorized
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key

````

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