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

# Comment utiliser getBlockCommitment

> Découvrez les cas d'utilisation de getBlockCommitment, des exemples de code, des paramètres de requête, la structure de la réponse et des conseils.

La méthode RPC [`getBlockCommitment`](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) fournit des informations sur l'état de [l'engagement](https://www.helius.dev/blog/solana-commitment-levels) d'un bloc spécifique dans le registre Solana. Cela est utile pour comprendre à quel point un bloc est finalisé, basé sur les enjeux qui ont voté pour lui.

## Cas d'utilisation courants

* **Évaluer la finalité des blocs :** Déterminez le niveau de consensus qu'un bloc a atteint en examinant les votes pondérés selon les enjeux à différentes profondeurs de confirmation.
* **Comprendre la santé du cluster :** Le `totalStake` fournit un aperçu du total des enjeux actifs dans le cluster au moment où le bloc a été traité.
* **Logique de confirmation avancée :** Pour les applications nécessitant des garanties très spécifiques concernant la finalité des blocs au-delà des niveaux d'engagement standard (`confirmed`, `finalized`).

## Paramètres

1. `slot` (nombre, requis) : Le numéro de slot (u64) du bloc pour lequel interroger les informations d'engagement.

## Réponse

Le champ `result` de la réponse JSON-RPC sera un objet contenant :

* `commitment` (tableau d'entiers u64 | null) :
  * Un tableau d'entiers u64, où chaque entier représente la quantité d'enjeux du cluster (en lamports) qui a voté pour le bloc à une profondeur de confirmation spécifique.
  * Le tableau a généralement 32 éléments (représentant les profondeurs de 0 à `MAX_LOCKOUT_HISTORY`, qui est 31).
  * L'index `i` du tableau montre les enjeux qui ont voté pour le bloc, en tenant compte des votes sur le bloc lui-même et ses descendants jusqu'à `i` niveaux de profondeur.
  * Si le bloc n'est pas trouvé ou si ses informations d'engagement ne sont pas disponibles (par exemple, s'il est trop ancien et supprimé du suivi de l'engagement), ce champ sera `null`.
* `totalStake` (nombre) :
  * Le total des enjeux actifs dans le cluster (en lamports) au slot où ce bloc a été traité. Cette valeur est utilisée pour calculer le pourcentage d'enjeux qui se sont engagés sur le bloc.

## Conseils pour les développeurs

* **Interpréter le tableau `commitment` :**
  * Le tableau `commitment` montre les enjeux (en lamports) qui ont voté pour le bloc à différentes profondeurs de confirmation. Des valeurs plus élevées à des indices plus profonds signifient une finalité plus forte.
  * Un tableau `null` `commitment` signifie souvent que le nœud n'a pas de données pour le slot, possiblement parce qu'il est trop ancien ou a été sauté.
  * Vous pouvez évaluer la finalité à la profondeur `i` si `commitment[i] / totalStake >= 2/3` (supermajorité).
* **Cas d'utilisation avancés :** `getBlockCommitment` est utilisé pour une analyse nuancée de la finalité. Pour la plupart des scénarios courants, s'appuyer sur les niveaux d'engagement standard (`processed`, `confirmed` ou `finalized`) avec d'autres méthodes RPC (comme `getTransaction` ou `getBlock`) est plus simple et suffisant.
* **Comprendre l'engagement :** Pour tirer pleinement parti de `getBlockCommitment`, une compréhension solide des niveaux d'engagement de Solana est essentielle. Consultez [Solana Commitment Levels](https://www.helius.dev/blog/solana-commitment-levels) pour des informations détaillées.
* **Élagage :** Soyez conscient que les nœuds RPC peuvent élaguer les anciennes informations d'engagement, entraînant des résultats `null` pour les slots plus anciens.

## Exemple : Récupérer des informations d'engagement de bloc

Essayons de récupérer des informations d'engagement pour un numéro de slot illustratif sur Devnet.
**Important :** Les numéros de slot sont traités rapidement. Le numéro de slot utilisé ci-dessous (`250000000`) est un indicateur. Vous devriez le remplacer par un slot récent et confirmé que vous savez exister sur votre réseau cible (par exemple, Devnet ou Mainnet) lorsque vous exécutez l'exemple. Vous pouvez trouver des numéros de slot récents en utilisant un explorateur de blocs Solana.

**Note :** Remplacez `YOUR_API_KEY` par votre véritable clé API Helius dans les exemples ci-dessous.

<CodeGroup>
  ```bash curl theme={"system"}
  # Replace 250000000 with a valid, recent slot number on Devnet/Mainnet
  curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getBlockCommitment",
    "params": [
      250000000 
    ]
  }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getBlockCommitmentDetails() {
    const rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY'; // Replace YOUR_API_KEY
    const connection = new Connection(rpcUrl, 'confirmed');
    
    // Replace with a valid, recent slot number on your target network
    const slotToQuery = 250000000; 

    try {
      // Note: getBlockCommitment is not directly available in @solana/web3.js Connection object.
      // You typically need to make a direct RPC call for this method.
      // The example below shows how to construct and send such a raw request.
      const response = await fetch(rpcUrl, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: 1,
          method: 'getBlockCommitment',
          params: [slotToQuery],
        }),
      });
      const result = await response.json();

      if (result.error) {
        console.error(`Error fetching block commitment for slot ${slotToQuery}:`, result.error.message);
        return;
      }

      const blockCommitment = result.result;

      if (blockCommitment) {
        console.log(`Block Commitment for Slot ${slotToQuery}:`);
        console.log(`   Total Stake (Lamports): ${blockCommitment.totalStake}`);
        console.log(`   Commitment Array:`, blockCommitment.commitment ? blockCommitment.commitment : 'Not available/Unknown block');
        // The commitment array shows lamports committed at different depths.
        // A null commitment array usually means the block is not found or too old.
        // A non-null array where later entries are higher indicates increasing finality.
      } else {
        console.log(`Block commitment data for slot ${slotToQuery} not found.`);
      }
    } catch (error) {
      console.error(`Error fetching block commitment for slot ${slotToQuery}:`, error);
    }
  }

  getBlockCommitmentDetails();
  ```

  ```typescript Kit theme={"system"}
  import { createSolanaRpc } from "@solana/kit";

  const rpc_url = "https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY";
  const rpc = createSolanaRpc(rpc_url);

  const slot_number = BigInt(5);

  let blockCommitment = await rpc.getBlockCommitment(slot_number).send();

  console.log("block commitment:", blockCommitment);
  ```
</CodeGroup>
