> ## 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 devuelve el certificado de génesis de Alpenglow, o null si el clúster todavía ejecuta TowerBFT. Úsalo para comprobar si el consenso de Alpenglow está activo.

<Note>
  Requiere Agave v4.3 o una versión posterior. Las versiones anteriores no reconocen el método y
  devuelven `Method not found` (-32601).
</Note>

## Detectar la migración

Usa este método para comprobar si un clúster ejecuta el consenso de [Alpenglow](https://www.helius.dev/blog/alpenglow). La respuesta puede adoptar tres formas:

* **Un objeto de certificado.** El clúster migró. `result.block.slot` es el primer slot producido con Alpenglow.
* **`null`.** El nodo ejecuta Agave v4.3 o una versión posterior, y el clúster no migró.
* **Error `-32601`.** El nodo ejecuta una versión anterior a v4.3. Se desconoce el consenso del clúster.

Trata `-32601` como un estado desconocido, no como "sin migrar". Si un nodo no puede responder la pregunta, eso no revela nada sobre el clúster.

El certificado no cambia después de que un clúster migra. Guárdalo en caché después de la primera respuesta correcta en lugar de realizar consultas periódicas.

## Leer el certificado

`block` identifica el bloque certificado. `slot` es su número de slot. `blockId` es un arreglo de 32 bytes, no la cadena en base 58 que se usa en otras partes de la API RPC.

`signature` contiene la firma BLS agregada de todos los validadores que firmaron el certificado. `bitmap` registra cuáles fueron esos validadores, indexados según su clasificación por stake. Para leer el mapa de bits, necesitas la misma lista de validadores ordenada por stake que utilizó el clúster.

`blockId` siempre tiene 32 bytes e `signature` siempre tiene 192; ambos se muestran completos en el ejemplo. `bitmap` no tiene un tamaño fijo: contiene un bit por validador, por lo que crece con el conjunto de validadores, y el ejemplo muestra uno pequeño.

La CLI de Solana devuelve los mismos datos que `solana alpenglow-genesis-info`.


## OpenAPI

````yaml es/openapi/rpc-http/getAgGenesisCert.yaml POST /
openapi: 3.1.0
info:
  title: API RPC de Solana
  version: 1.0.0
  description: >-
    API de migración de consenso para obtener el certificado génesis de
    Alpenglow, el certificado del primer bloque producido bajo el consenso
    Alpenglow, que se usa para detectar si un clúster migró desde TowerBFT.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://mainnet.helius-rpc.com
    description: Endpoint RPC de Mainnet
  - url: https://devnet.helius-rpc.com
    description: Endpoint RPC de Devnet
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getAgGenesisCert
      description: >
        Obtiene el certificado génesis de Alpenglow —el certificado del primer
        bloque que un clúster

        produjo bajo el consenso Alpenglow— o `null` si el clúster aún ejecuta
        TowerBFT.

        Esta es la forma compatible de detectar en tiempo de ejecución si el
        consenso Alpenglow está activo, en lugar

        de inferirlo a partir de las versiones de los validadores o los números
        de slot. El certificado contiene el

        bloque certificado (su slot y el identificador de bloque de 32 bytes),
        junto con la firma BLS agregada de

        los validadores que lo firmaron y un mapa de bits que identifica cuáles
        lo hicieron, ordenados por rango de participación.

        Requiere Agave v4.3 o posterior; las versiones anteriores no reconocen
        el método y devuelven

        `Method not found` (-32601) en lugar de `null`.
      operationId: getAgGenesisCert
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                jsonrpc:
                  type: string
                  description: La versión del protocolo JSON-RPC.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Un identificador único para la solicitud.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: El nombre del método RPC que se invocará.
                  enum:
                    - getAgGenesisCert
                  example: getAgGenesisCert
                  default: getAgGenesisCert
      responses:
        '200':
          description: >-
            El certificado génesis de Alpenglow se obtuvo correctamente, o
            `null` si el clúster no migró.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: La versión del protocolo JSON-RPC.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Identificador que coincide con la solicitud.
                    example: '1'
                  result:
                    type: object
                    nullable: true
                    description: >-
                      El certificado génesis de Alpenglow, o `null` cuando el
                      clúster aún ejecuta TowerBFT.
                    properties:
                      block:
                        type: object
                        description: El primer bloque certificado de Alpenglow.
                        properties:
                          slot:
                            type: integer
                            format: uint64
                            description: >-
                              El slot del primer bloque producido bajo el
                              consenso Alpenglow.
                            example: 412300800
                          blockId:
                            type: array
                            description: >-
                              El identificador del bloque, como un arreglo de
                              bytes. Siempre tiene 32 bytes.
                            minItems: 32
                            maxItems: 32
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                      signature:
                        type: object
                        description: >-
                          La firma agregada de los validadores sobre el bloque
                          certificado.
                        properties:
                          signature:
                            type: array
                            description: >-
                              La firma BLS agregada de cada validador que firmó
                              el certificado, como un arreglo de bytes. Siempre
                              tiene 192 bytes.
                            minItems: 192
                            maxItems: 192
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                          bitmap:
                            type: array
                            description: >-
                              Mapa de bits que indica qué validadores firmaron,
                              indexado por posición según el rango de
                              participación. Tiene longitud variable: un bit por
                              validador, por lo que crece con el conjunto de
                              validadores.
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
        '400':
          description: >-
            Solicitud incorrecta: parámetros de solicitud no válidos o solicitud
            malformada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Invalid params
        '401':
          description: 'No autorizado: la clave de API no es válida o falta.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: Unauthorized
                id: '1'
        '429':
          description: 'Demasiadas solicitudes: se superó el límite de solicitudes.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Too many requests
                id: '1'
        '500':
          description: 'Error interno del servidor: se produjo un error en el servidor.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Internal error
                id: '1'
        '503':
          description: >-
            Servicio no disponible: el servicio no está disponible
            temporalmente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Service unavailable
                id: '1'
        '504':
          description: >-
            Tiempo de espera del gateway agotado: se agotó el tiempo de espera
            de la solicitud.
          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: La versión del protocolo JSON-RPC.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: El código de error.
              example: -32602
            message:
              type: string
              description: El mensaje de error.
            data:
              type: object
              description: Datos adicionales sobre el error.
        id:
          type: string
          description: Identificador que coincide con la solicitud.
          example: '1'
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Tu clave de API de Helius. Puedes obtener una gratis en el
        [panel](https://dashboard.helius.dev/api-keys).

````