> ## 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, действовавший для программы Solana в любом слоте, из каталога, который Parsed Events использует для декодирования инструкций.

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

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

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

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

* **Декодирование истории с правильным интерфейсом.** Передайте слот транзакции, чтобы получить IDL, действовавший на момент ее выполнения. Инструкции и учетные записи программ со временем меняются, поэтому текущий IDL может неверно интерпретировать старые транзакции.
* **Поиск точных имен для фильтров.** [Сканирование истории транзакций](https://www.helius.dev/docs/ru/api-reference/parsed-events/scan.md) `match.programs[].instructions` принимает имена инструкций в том виде, в котором они указаны в IDL.
* **Просмотр изменений интерфейса.** Получите две версии и сравните их `instructions`, чтобы узнать, что было добавлено или удалено при обновлении. См. пример в разделе [Список версий IDL](https://www.helius.dev/docs/ru/api-reference/parsed-events/idl-versions.md#пример-обнаружение-новой-версии-idl).

## Форматы IDL

Ответ содержит документ IDL в том виде, в котором он хранится. Программы в каталоге используют один из двух форматов Anchor, причем версии одной программы могут использовать оба формата. Перед чтением проверьте, какой формат вы получили:

| | Устаревший Anchor (до версии 0.30) | Anchor 0.30+ |
| - | - | - |
| Имя и версия программы | `name` и `version` верхнего уровня | `metadata.name` и `metadata.version` |
| Адрес программы | `address` верхнего уровня отсутствует | `address` верхнего уровня |
| Дискриминатор инструкции | Не включен | `instructions[].discriminator` |
| Флаги учетных записей инструкции | `isMut`, `isSigner` | `writable`, `signer` |

Оба формата содержат `instructions`. Большинство IDL также содержат `accounts`, `types` и `errors`, а многие — `events`.

## Кредиты

Каждый запрос стоит **10 кредитов** и доступен на всех тарифных планах. См. раздел [Кредиты](https://www.helius.dev/docs/ru/billing/credits.md#разобранные-события).

## Ошибки

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

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

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

**programId** `string` *required*

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

**slot** `number` *required*

Слот для поиска. Он не обязан совпадать со слотом активации версии. Передайте `slot` из списка версий IDL, чтобы получить конкретную версию, или слот транзакции, чтобы получить IDL, действовавший на момент ее выполнения.


## OpenAPI

````yaml ru/openapi/parsed-events.yaml GET /v1/parsed-events/idl/{programId}/{slot}
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}/{slot}:
    get:
      tags:
        - Разобранные события
      summary: Получить IDL
      description: >-
        Получите IDL, действовавший для программы в указанном слоте, то есть
        последнюю версию, активированную в слоте `slot` или ранее.
      operationId: getIdlParsedEvents
      parameters:
        - $ref: '#/components/parameters/ProgramId'
        - name: slot
          in: path
          required: true
          description: >-
            Слот для поиска. Он не обязан совпадать со слотом активации версии.
            Передайте `slot` из ответа метода «Получить список версий IDL»,
            чтобы получить конкретную версию, или слот транзакции, чтобы
            получить IDL, действовавший во время ее выполнения.
          schema:
            type: integer
            format: uint64
            minimum: 0
            example: 205509752
      responses:
        '200':
          description: >-
            Документ IDL в сохраненном виде. Встречаются как устаревший формат
            Anchor, так и формат Anchor 0.30+, поэтому перед чтением проверьте,
            какой формат вы получили.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Idl'
              examples:
                Legacy Anchor IDL:
                  summary: >-
                    Kamino Lend в слоте 182747476 (оставлены одна инструкция и
                    одна ошибка)
                  value:
                    name: kamino_lending
                    version: 0.1.0
                    instructions:
                      - name: refreshObligation
                        accounts:
                          - name: lendingMarket
                            isMut: false
                            isSigner: false
                          - name: obligation
                            isMut: true
                            isSigner: false
                        args: []
                    errors:
                      - code: 6000
                        name: InvalidMarketAuthority
                        msg: Market authority is invalid
                Anchor 0.30+ IDL:
                  summary: >-
                    Pump AMM в слоте 454326107 (оставлены одна инструкция и одна
                    ошибка)
                  value:
                    address: pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA
                    metadata:
                      name: pump_amm
                      version: 0.1.0
                      spec: 0.1.0
                      description: Created with Anchor
                    instructions:
                      - name: toggle_boost
                        discriminator:
                          - 117
                          - 161
                          - 160
                          - 74
                          - 223
                          - 137
                          - 118
                          - 99
                        accounts:
                          - name: admin
                            signer: true
                            relations:
                              - global_config
                          - name: global_config
                            writable: true
                        args:
                          - name: enabled
                            type: bool
                    errors:
                      - code: 6000
                        name: FeeBasisPointsExceedsMaximum
        '400':
          $ref: '#/components/responses/IdlBadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: >-
            В каталоге нет IDL для этой программы или ни одна версия не была
            активна в слоте `slot` или ранее.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: >-
                      no IDL found for program
                      KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD at or before
                      slot 1
components:
  parameters:
    ProgramId:
      name: programId
      in: path
      required: true
      description: Адрес программы в кодировке base58.
      schema:
        type: string
        example: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
  schemas:
    Idl:
      type: object
      additionalProperties: true
      description: >-
        Документ IDL, возвращаемый в сохраненном виде. Встречаются два формата:


        - **Устаревший Anchor** (до версии 0.30): поля верхнего уровня `name` и
        `version`. В учетных записях инструкций используются `isMut` и
        `isSigner`.

        - **Anchor 0.30+**: поля верхнего уровня `address` и `metadata` (`name`,
        `version`, `spec`, `description`). Инструкции содержат `discriminator`,
        а в учетных записях инструкций используются `writable` и `signer`.


        В обоих форматах есть `instructions`. Большинство IDL также содержат
        `accounts`, `types` и `errors`, а многие — `events`. Версии одной
        программы могут использовать разные форматы.
    ErrorResponse:
      type: object
      description: Ответ с ошибкой на уровне запроса.
      properties:
        error:
          type: string
          description: Сообщение об ошибке.
  responses:
    IdlBadRequest:
      description: >-
        `programId` не является допустимым адресом или `slot` не является
        беззнаковым 64-битным целым числом.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            Invalid program ID:
              value:
                error: 'invalid program id: notanaddress: String is the wrong size'
            Invalid slot:
              value:
                error: 'invalid activation slot: abc: invalid digit found in string'
    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.