> ## 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 gibt das Alpenglow-Genesiszertifikat zurück oder null, wenn der cluster noch TowerBFT verwendet. Prüfe damit, ob der Alpenglow-Konsens aktiv ist.

<Note>
  Erfordert Agave v4.3 oder höher. Frühere Versionen erkennen die Methode nicht und
  geben `Method not found` (-32601) zurück.
</Note>

## Migration erkennen

Prüfe mit dieser Methode, ob ein cluster den [Alpenglow](https://www.helius.dev/blog/alpenglow)-Konsens verwendet. Die response kann drei Formen annehmen:

* **Ein Zertifikatobjekt.** Der cluster wurde migriert. `result.block.slot` ist der erste unter Alpenglow erzeugte slot.
* **`null`.** Der node verwendet Agave v4.3 oder höher und der cluster wurde noch nicht migriert.
* **Fehler `-32601`.** Der node verwendet eine Version vor v4.3. Der Konsens des clusters ist unbekannt.

Behandle `-32601` als unbekannt und nicht als „nicht migriert“. Wenn ein node diese Frage nicht beantworten kann, sagt das nichts über den cluster aus.

Nach der Migration eines clusters ändert sich das Zertifikat nicht mehr. Speichere es nach der ersten erfolgreichen response im Cache, statt es regelmäßig abzufragen.

## Zertifikat auslesen

`block` identifiziert den zertifizierten Block. `slot` ist dessen slot-Nummer. `blockId` ist ein Array mit 32 Byte und nicht die Base58-Zeichenfolge, die an anderer Stelle in der RPC API verwendet wird.

`signature` enthält die aggregierte BLS-Signatur aller Validatoren, die das Zertifikat signiert haben. `bitmap` hält fest, welche Validatoren dies waren, indiziert nach ihrem Stake-Rang. Zum Auslesen der Bitmap brauchst du dieselbe nach Stake sortierte Validatorliste, die der cluster verwendet hat.

`blockId` umfasst immer 32 Byte und `signature` immer 192 Byte. Beide werden im Beispiel in voller Länge gezeigt. `bitmap` hat keine feste Größe: Es enthält ein Bit pro Validator und wächst daher mit der Validatorengruppe. Das Beispiel zeigt eine kurze Bitmap.

Die Solana CLI gibt dieselben Daten zurück wie `solana alpenglow-genesis-info`.


## OpenAPI

````yaml de/openapi/rpc-http/getAgGenesisCert.yaml POST /
openapi: 3.1.0
info:
  title: Solana RPC API
  version: 1.0.0
  description: >-
    API für die Konsensmigration zum Abrufen des Alpenglow-Genesis-Zertifikats.
    Dieses Zertifikat gilt für den ersten Block, der unter dem Alpenglow-Konsens
    erzeugt wurde. Damit lässt sich erkennen, ob ein cluster von TowerBFT
    migriert wurde.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://mainnet.helius-rpc.com
    description: RPC endpoint für Mainnet
  - url: https://devnet.helius-rpc.com
    description: RPC endpoint für Devnet
security: []
paths:
  /:
    post:
      tags:
        - RPC
      summary: getAgGenesisCert
      description: >
        Ruft das Alpenglow-Genesis-Zertifikat ab – das Zertifikat für den ersten
        Block, den ein cluster

        unter dem Alpenglow-Konsens erzeugt hat – oder `null`, wenn der cluster
        weiterhin TowerBFT verwendet.

        Dies ist die unterstützte Methode, um zur Laufzeit zu erkennen, ob der
        Alpenglow-Konsens aktiv ist.

        Leite dies nicht aus Validatorversionen oder slot-Nummern ab. Das
        Zertifikat enthält den

        zertifizierten Block (seinen slot und seine 32 Byte lange Block-ID), die
        aggregierte BLS-Signatur

        der Validatoren, die ihn signiert haben, sowie eine Bitmap, die nach
        Stake-Rang geordnet angibt,

        welche Validatoren signiert haben. Erfordert Agave v4.3 oder neuer.
        Frühere Versionen erkennen

        die Methode nicht und geben statt `null` den Fehler `Method not found`
        (-32601) zurück.
      operationId: getAgGenesisCert
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                jsonrpc:
                  type: string
                  description: Die Version des JSON-RPC-Protokolls.
                  enum:
                    - '2.0'
                  example: '2.0'
                  default: '2.0'
                id:
                  type: string
                  description: Eine eindeutige Kennung für den request.
                  example: '1'
                  default: '1'
                method:
                  type: string
                  description: Der Name der aufzurufenden RPC-Methode.
                  enum:
                    - getAgGenesisCert
                  example: getAgGenesisCert
                  default: getAgGenesisCert
      responses:
        '200':
          description: >-
            Das Alpenglow-Genesis-Zertifikat wurde erfolgreich abgerufen. Wenn
            der cluster noch nicht migriert wurde, wird `null` zurückgegeben.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                    description: Die Version des JSON-RPC-Protokolls.
                    enum:
                      - '2.0'
                    example: '2.0'
                  id:
                    type: string
                    description: Kennung, die dem request entspricht.
                    example: '1'
                  result:
                    type: object
                    nullable: true
                    description: >-
                      Das Alpenglow-Genesis-Zertifikat oder `null`, wenn der
                      cluster weiterhin TowerBFT verwendet.
                    properties:
                      block:
                        type: object
                        description: Der zertifizierte erste Alpenglow-Block.
                        properties:
                          slot:
                            type: integer
                            format: uint64
                            description: >-
                              Der slot des ersten Blocks, der unter dem
                              Alpenglow-Konsens erzeugt wurde.
                            example: 412300800
                          blockId:
                            type: array
                            description: Die Blockkennung als Byte-Array. Immer 32 Byte.
                            minItems: 32
                            maxItems: 32
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                      signature:
                        type: object
                        description: >-
                          Die aggregierte Validatorsignatur für den
                          zertifizierten Block.
                        properties:
                          signature:
                            type: array
                            description: >-
                              Die aggregierte BLS-Signatur aller Validatoren,
                              die das Zertifikat signiert haben, als Byte-Array.
                              Immer 192 Byte.
                            minItems: 192
                            maxItems: 192
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
                          bitmap:
                            type: array
                            description: >-
                              Bitmap, die angibt, welche Validatoren signiert
                              haben. Die Indizes entsprechen ihrer Position in
                              der Rangfolge nach Stake. Die Länge ist variabel –
                              ein Bit pro Validator, sodass sie mit der
                              Validatorgruppe wächst.
                            items:
                              type: integer
                              minimum: 0
                              maximum: 255
        '400':
          description: >-
            Ungültiger request – Die Parameter des request sind ungültig oder
            der request ist fehlerhaft formatiert.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32602
                  message: Invalid params
        '401':
          description: Nicht autorisiert – Der API key ist ungültig oder fehlt.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32001
                  message: Unauthorized
                id: '1'
        '429':
          description: Zu viele requests – Das rate limit wurde überschritten.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32005
                  message: Too many requests
                id: '1'
        '500':
          description: Interner Serverfehler – Auf dem Server ist ein Fehler aufgetreten.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32603
                  message: Internal error
                id: '1'
        '503':
          description: >-
            Dienst nicht verfügbar – Der Dienst ist vorübergehend nicht
            verfügbar.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                jsonrpc: '2.0'
                error:
                  code: -32002
                  message: Service unavailable
                id: '1'
        '504':
          description: Gateway-timeout – Beim request ist ein timeout aufgetreten.
          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: Die Version des JSON-RPC-Protokolls.
          enum:
            - '2.0'
          example: '2.0'
        error:
          type: object
          properties:
            code:
              type: integer
              description: Der Fehlercode.
              example: -32602
            message:
              type: string
              description: Die Fehlermeldung.
            data:
              type: object
              description: Zusätzliche Daten zum Fehler.
        id:
          type: string
          description: Kennung, die dem request entspricht.
          example: '1'
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key
      description: >-
        Dein Helius API key. Du kannst ihn kostenlos im
        [Dashboard](https://dashboard.helius.dev/api-keys) erstellen.

````