> ## 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 renvoie le certificat de genèse Alpenglow, ou null si le cluster utilise encore TowerBFT. Utilisez cette méthode pour vérifier si le consensus Alpenglow est actif.

<Note>
  Nécessite Agave v4.3 ou une version ultérieure. Les versions antérieures ne reconnaissent pas la méthode et
  renvoient `Method not found` (-32601).
</Note>

## Détection de la migration

Utilisez cette méthode pour vérifier si un cluster utilise le consensus [Alpenglow](https://www.helius.dev/blog/alpenglow). La réponse peut prendre trois formes :

* **Un objet de certificat.** Le cluster a migré. `result.block.slot` est le premier slot produit sous Alpenglow.
* **`null`.** Le nœud exécute Agave v4.3 ou une version ultérieure, et le cluster n'a pas migré.
* **Erreur `-32601`.** La version du nœud est antérieure à la v4.3. Le consensus du cluster est inconnu.

Considérez `-32601` comme un état inconnu plutôt que comme « non migré ». Un nœud qui ne peut pas répondre à la question ne fournit aucune information sur le cluster.

Le certificat ne change plus après la migration d'un cluster. Mettez-le en cache après la première réponse réussie au lieu d'effectuer des interrogations régulières.

## Lecture du certificat

`block` identifie le bloc certifié. `slot` est son numéro de slot. `blockId` est un tableau de 32 octets, et non la chaîne en base 58 utilisée ailleurs dans l'API RPC.

`signature` contient la signature BLS agrégée de chaque validateur ayant signé le certificat. `bitmap` indique quels validateurs l'ont signé, indexés selon leur classement par mise. La lecture du bitmap nécessite la même liste de validateurs, triée par mise, que celle utilisée par le cluster.

`blockId` contient toujours 32 octets et `signature` toujours 192 octets ; les deux sont affichés dans leur intégralité dans l'exemple. `bitmap` n'a pas de taille fixe : il contient un bit par validateur et s'agrandit donc avec l'ensemble de validateurs. L'exemple en présente une version courte.

La CLI Solana renvoie les mêmes données que `solana alpenglow-genesis-info`.


## OpenAPI

````yaml fr/openapi/rpc-http/getAgGenesisCert.yaml POST /
openapi: 3.1.0
info:
  title: API RPC Solana
  version: 1.0.0
  description: >-
    API de migration du consensus permettant de récupérer le certificat de
    genèse Alpenglow, qui porte sur le premier bloc produit sous le consensus
    Alpenglow et sert à déterminer si un cluster a migré depuis TowerBFT.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://mainnet.helius-rpc.com
    description: Point de terminaison RPC du réseau principal
  - url: https://devnet.helius-rpc.com
    description: Point de terminaison RPC de Devnet
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getAgGenesisCert
      description: >
        Récupère le certificat de genèse Alpenglow — le certificat portant sur
        le premier bloc qu’un cluster

        a produit sous le consensus Alpenglow — ou `null` si le cluster utilise
        encore TowerBFT.

        Il s’agit de la méthode prise en charge pour déterminer à l’exécution si
        le consensus Alpenglow est actif, plutôt

        que de le déduire des versions des validateurs ou des numéros de slot.
        Le certificat contient le

        bloc certifié (son slot et son identifiant de bloc de 32 octets), ainsi
        que la signature BLS agrégée des

        validateurs qui l’ont signé et un masque de bits indiquant lesquels
        l’ont fait, classés selon leur mise.

        Nécessite Agave v4.3 ou une version ultérieure ; les versions
        antérieures ne reconnaissent pas la méthode et renvoient

        `Method not found` (-32601) au lieu de `null`.
      operationId: getAgGenesisCert
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                jsonrpc:
                  type: string
                  description: La version du protocole JSON-RPC.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Un identifiant unique pour la requête.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: Le nom de la méthode RPC à appeler.
                  enum:
                    - getAgGenesisCert
                  example: getAgGenesisCert
                  default: getAgGenesisCert
      responses:
        '200':
          description: >-
            Le certificat de genèse Alpenglow a été récupéré, ou `null` si le
            cluster n’a pas migré.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: La version du protocole JSON-RPC.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Identifiant correspondant à la requête.
                    example: '1'
                  result:
                    type: object
                    nullable: true
                    description: >-
                      Le certificat de genèse Alpenglow, ou `null` lorsque le
                      cluster utilise encore TowerBFT.
                    properties:
                      block:
                        type: object
                        description: Le premier bloc Alpenglow certifié.
                        properties:
                          slot:
                            type: integer
                            format: uint64
                            description: >-
                              Le slot du premier bloc produit sous le consensus
                              Alpenglow.
                            example: 412300800
                          blockId:
                            type: array
                            description: >-
                              L’identifiant du bloc, sous forme de tableau
                              d’octets. Il contient toujours 32 octets.
                            minItems: 32
                            maxItems: 32
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                      signature:
                        type: object
                        description: >-
                          La signature agrégée des validateurs portant sur le
                          bloc certifié.
                        properties:
                          signature:
                            type: array
                            description: >-
                              La signature BLS agrégée de chaque validateur
                              ayant signé le certificat, sous forme de tableau
                              d’octets. Elle contient toujours 192 octets.
                            minItems: 192
                            maxItems: 192
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                          bitmap:
                            type: array
                            description: >-
                              Masque de bits indiquant quels validateurs ont
                              signé, indexés selon leur position dans le
                              classement par mise. Sa longueur est variable — un
                              bit par validateur — et augmente donc avec
                              l’ensemble des validateurs.
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
        '400':
          description: >-
            Requête incorrecte - Paramètres de requête non valides ou requête
            mal formée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Invalid params
        '401':
          description: Non autorisé - Clé API non valide ou manquante.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: Unauthorized
                id: '1'
        '429':
          description: Trop de requêtes - Limite de débit dépassée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Too many requests
                id: '1'
        '500':
          description: >-
            Erreur interne du serveur - Une erreur s’est produite sur le
            serveur.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Internal error
                id: '1'
        '503':
          description: Service indisponible - Le service est temporairement indisponible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Service unavailable
                id: '1'
        '504':
          description: Délai d’attente de la passerelle dépassé - La requête a expiré.
          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 version du protocole JSON-RPC.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: Le code d’erreur.
              example: -32602
            message:
              type: string
              description: Le message d’erreur.
            data:
              type: object
              description: Données supplémentaires sur l’erreur.
        id:
          type: string
          description: Identifiant correspondant à la requête.
          example: '1'
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Votre clé API Helius. Vous pouvez en obtenir une gratuitement dans le
        [tableau de bord](https://dashboard.helius.dev/api-keys).

````