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

> Получите список всех версий IDL, доступных в Parsed Events для программы Solana, со слотом, в котором каждая версия стала активной.

Параметры пути, схема ответа и примеры на этой странице сгенерированы из определения OpenAPI.

List IDL Versions возвращает историю интерфейса программы из каталога IDL, который Parsed Events и [Parsed Streams](https://www.helius.dev/docs/ru/parsed-streams.md) используют для декодирования инструкций. Каждый элемент представляет собой одну версию, идентифицируемую по слоту, в котором она стала активной. Элементы отсортированы от самой старой версии к самой новой, поэтому последний элемент соответствует текущей версии.

Передайте любое значение `slot` из ответа в [Get IDL](https://www.helius.dev/docs/ru/api-reference/parsed-events/idl.md), чтобы получить документ IDL для этой версии. [Обозреватель Orb](https://www.helius.dev/docs/ru/orb/explore-programs.md) использует эти конечные точки для отображения IDL программ.

## Варианты использования

* **Отслеживание изменений интерфейса.** Периодически вызывайте List IDL Versions для программы, от которой зависит ваше приложение. Когда появится новая версия, получите ее и предыдущую версию с помощью Get IDL и сравните их `instructions`. Появление новой инструкции администратора или уполномоченного субъекта требует проверки безопасности.
* **Проверка охвата каталога.** Значение `404` означает, что в каталоге нет IDL для программы. Такие программы, как SPL Token, вместо этого декодируются встроенными декодерами и также возвращают `404`.

## Пример: обнаружение новой версии IDL

Этот скрипт выводит список версий IDL программы, получает две последние версии и выводит инструкции, которые были добавлены или удалены:

```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 кредитов** и доступен на всех тарифных планах. В приведенном выше примере выполняются три запроса, поэтому он стоит 30 кредитов. См. раздел [Кредиты](https://www.helius.dev/docs/ru/billing/credits.md#разобранные-события).

## Ошибки

| Статус | Условие |
| - | - |
| `400` | `programId` не является допустимым адресом в формате base58. |
| `401` | Ключ API отсутствует или недействителен. Тело ответа содержит обычный текст: `Unauthorized`. |
| `404` | В каталоге нет IDL для программы. |

При других ошибках возвращается тело JSON с сообщением `error`, например `{"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}`.

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

**programId** `string` *required*

Адрес программы в кодировке base58.


## OpenAPI

````yaml ru/openapi/parsed-events.yaml GET /v1/parsed-events/idl/{programId}
openapi: 3.0.3
info:
  title: Разобранные события
  version: 0.1.0
  description: Разбирайте транзакции Solana и историю транзакций с помощью Parsed Events.
servers:
  - url: https://mainnet.helius-rpc.com
security:
  - ApiKeyQuery: []
paths:
  /v1/parsed-events/idl/{programId}:
    get:
      tags:
        - Разобранные события
      summary: Получить список версий IDL
      description: >-
        Получите все версии IDL, которые есть у Parsed Events для программы,
        начиная с самой старой. Каждая версия идентифицируется слотом, в котором
        она стала активной.
      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 (первые 3 из 43 версий)
                  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 для этой программы. Для программ, которые Parsed
            Events декодирует с помощью встроенных декодеров, например 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: Одна версия IDL программы.
      required:
        - slot
        - sources
      properties:
        slot:
          type: integer
          format: uint64
          description: >-
            Слот, в котором эта версия IDL стала активной. Передайте его методу
            «Получить IDL», чтобы получить эту версию.
        sources:
          type: array
          description: >-
            Источники, в которых Parsed Events нашел эту версию. Возможные
            значения включают `anchor`, `program_metadata` и `github`; в будущем
            могут быть добавлены другие. У версии может быть несколько
            источников.
          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.