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

# getAgGenesisCert

> getAgGenesisCert возвращает сертификат генезиса Alpenglow или null, если кластер по-прежнему использует TowerBFT. Используйте этот метод, чтобы проверить, активен ли консенсус Alpenglow.

<Note>
  Требуется Agave v4.3 или более поздней версии. Более ранние версии не распознают этот метод и
  возвращают `Method not found` (-32601).
</Note>

## Определение перехода

Используйте этот метод, чтобы проверить, работает ли кластер с консенсусом [Alpenglow](https://www.helius.dev/blog/alpenglow). Ответ может иметь три формы:

* **Объект сертификата.** Кластер перешел на Alpenglow. `result.block.slot` — первый слот, созданный в рамках Alpenglow.
* **`null`.** Узел использует Agave v4.3 или более поздней версии, но кластер еще не перешел на Alpenglow.
* **Ошибка `-32601`.** Узел использует версию ниже v4.3. Тип консенсуса кластера неизвестен.

Считайте `-32601` признаком неизвестного состояния, а не состояния «переход не выполнен». Если узел не может ответить на этот вопрос, это ничего не говорит о состоянии кластера.

После перехода кластера сертификат не меняется. Кешируйте его после первого успешного ответа вместо периодического опроса.

## Чтение сертификата

`block` идентифицирует сертифицированный блок. `slot` — номер его слота. `blockId` — это массив из 32 байтов, а не строка в формате base58, используемая в других частях API RPC.

`signature` содержит агрегированную подпись BLS всех валидаторов, подписавших сертификат. `bitmap` указывает, какие именно валидаторы его подписали, с индексацией по рангу стейка. Для чтения битовой карты необходим тот же список валидаторов, упорядоченный по стейку, который использовал кластер.

`blockId` всегда содержит 32 байта, а `signature` — 192 байта; в примере оба значения приведены полностью. `bitmap` не имеет фиксированного размера: он содержит по одному биту на каждого валидатора, поэтому его размер растет вместе с набором валидаторов, а в примере показано короткое значение.

CLI Solana возвращает те же данные, что и `solana alpenglow-genesis-info`.


## OpenAPI

````yaml ru/openapi/rpc-http/getAgGenesisCert.yaml POST /
openapi: 3.1.0
info:
  title: Solana RPC API
  version: 1.0.0
  description: >-
    API миграции консенсуса для получения генезис-сертификата Alpenglow —
    сертификата первого блока, созданного в рамках консенсуса Alpenglow.
    Используется для определения того, перешёл ли кластер с TowerBFT.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://mainnet.helius-rpc.com
    description: Конечная точка RPC основной сети
  - url: https://devnet.helius-rpc.com
    description: Конечная точка RPC тестовой сети Devnet
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getAgGenesisCert
      description: >
        Получает генезис-сертификат Alpenglow — сертификат первого блока,
        созданного кластером

        в рамках консенсуса Alpenglow, — или `null`, если кластер всё ещё
        использует TowerBFT.

        Это поддерживаемый способ во время выполнения определить, активен ли
        консенсус Alpenglow,

        вместо попыток определить это по версиям валидаторов или номерам слотов.
        Сертификат содержит

        сертифицированный блок (его слот и 32-байтовый идентификатор блока), а
        также агрегированную BLS-подпись

        подписавших его валидаторов и битовую карту, указывающую, какие именно
        валидаторы его подписали, в порядке их ранга по стейку.

        Требуется Agave версии 4.3 или более поздней. Более ранние версии не
        распознают этот метод и возвращают

        `Method not found` (-32601) вместо `null`.
      operationId: getAgGenesisCert
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                jsonrpc:
                  type: string
                  description: Версия протокола JSON-RPC.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Уникальный идентификатор запроса.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: Имя вызываемого метода RPC.
                  enum:
                    - getAgGenesisCert
                  example: getAgGenesisCert
                  default: getAgGenesisCert
      responses:
        '200':
          description: >-
            Генезис-сертификат Alpenglow успешно получен. Если кластер ещё не
            перешёл на новый консенсус, возвращается `null`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: Версия протокола JSON-RPC.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Идентификатор, соответствующий запросу.
                    example: '1'
                  result:
                    type: object
                    nullable: true
                    description: >-
                      Генезис-сертификат Alpenglow или `null`, если кластер всё
                      ещё использует TowerBFT.
                    properties:
                      block:
                        type: object
                        description: Сертифицированный первый блок Alpenglow.
                        properties:
                          slot:
                            type: integer
                            format: uint64
                            description: >-
                              Слот первого блока, созданного в рамках консенсуса
                              Alpenglow.
                            example: 412300800
                          blockId:
                            type: array
                            description: >-
                              Идентификатор блока в виде массива байтов. Всегда
                              32 байта.
                            minItems: 32
                            maxItems: 32
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                      signature:
                        type: object
                        description: >-
                          Агрегированная подпись валидаторов сертифицированного
                          блока.
                        properties:
                          signature:
                            type: array
                            description: >-
                              Агрегированная BLS-подпись всех валидаторов,
                              подписавших сертификат, в виде массива байтов.
                              Всегда 192 байта.
                            minItems: 192
                            maxItems: 192
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                          bitmap:
                            type: array
                            description: >-
                              Битовая карта, отмечающая подписавших валидаторов,
                              с индексами по позициям в рейтинге стейка. Длина
                              переменная: по одному биту на валидатора, поэтому
                              она увеличивается вместе с набором валидаторов.
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
        '400':
          description: >-
            Некорректный запрос — недопустимые параметры или неверный формат
            запроса.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Invalid params
        '401':
          description: Не авторизовано — недействительный или отсутствующий ключ API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: Unauthorized
                id: '1'
        '429':
          description: Слишком много запросов — превышено ограничение частоты запросов.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Too many requests
                id: '1'
        '500':
          description: Внутренняя ошибка сервера — на сервере произошла ошибка.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Internal error
                id: '1'
        '503':
          description: Сервис недоступен — сервис временно недоступен.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Service unavailable
                id: '1'
        '504':
          description: Истекло время ожидания шлюза — время ожидания запроса истекло.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32003
                  message: Gateway timeout
                id: '1'
      security:
        - ApiKeyQuery: []
components:
  schemas:
    ErrorResponse:
      type: object
      properties:
        jsonrpc:
          type: string
          description: Версия протокола JSON-RPC.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: Код ошибки.
              example: -32602
            message:
              type: string
              description: Сообщение об ошибке.
            data:
              type: object
              description: Дополнительные данные об ошибке.
        id:
          type: string
          description: Идентификатор, соответствующий запросу.
          example: '1'
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Ваш ключ API Helius. Его можно бесплатно получить в [панели
        управления](https://dashboard.helius.dev/api-keys).

````

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