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

# Cómo usar getBlockCommitment

> Conoce los casos de uso de getBlockCommitment, ejemplos de código, parámetros de solicitud, estructura de respuesta y consejos.

El método RPC [`getBlockCommitment`](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) proporciona información sobre el estado de [compromiso](https://www.helius.dev/blog/solana-commitment-levels) de un bloque específico en el libro mayor de Solana. Esto sirve para conocer el grado de finalidad de un bloque según el stake que haya votado por él.

## Casos de uso comunes

* **Evaluar la finalidad de un bloque:** Determina el nivel de consenso que alcanzó un bloque examinando los votos ponderados por stake en diferentes profundidades de confirmación.
* **Comprender el estado del clúster:** `totalStake` proporciona información sobre el stake activo total del clúster en el momento en que se procesó el bloque.
* **Lógica de confirmación avanzada:** Para aplicaciones que requieren garantías muy específicas sobre la finalidad de un bloque más allá de los niveles de compromiso estándar (`confirmed`, `finalized`).

## Parámetros

1. `slot` (número, obligatorio): El número de slot (u64) del bloque cuya información de compromiso quieres consultar.

## Respuesta

El campo `result` de la respuesta JSON-RPC será un objeto que contiene:

* `commitment` (arreglo de enteros u64 | null):
  * Un arreglo de enteros u64, donde cada entero representa la cantidad de stake del clúster (en lamports) que votó por el bloque en una profundidad de confirmación específica.
  * Por lo general, el arreglo tiene 32 elementos (que representan las profundidades de 0 a `MAX_LOCKOUT_HISTORY`, que es 31).
  * El índice `i` del arreglo muestra el stake que votó por el bloque, considerando los votos por el propio bloque y sus descendientes hasta `i` niveles de profundidad.
  * Si no se encuentra el bloque o su información de compromiso no está disponible (por ejemplo, porque es demasiado antiguo y se eliminó del seguimiento de compromisos), este campo será `null`.
* `totalStake` (número):
  * El stake activo total del clúster (en lamports) en el slot en el que se procesó este bloque. Este valor se usa para calcular el porcentaje de stake comprometido con el bloque.

## Consejos para desarrolladores

* **Interpretar el arreglo `commitment`:**
  * El arreglo `commitment` muestra el stake (en lamports) que votó por el bloque en diferentes profundidades de confirmación. Los valores más altos en índices más profundos indican una finalidad más sólida.
  * Un arreglo `commitment` con valor `null` suele significar que el nodo no tiene datos para el slot, posiblemente porque es demasiado antiguo o se omitió.
  * Puedes estimar la finalidad en la profundidad `i` si `commitment[i] / totalStake >= 2/3` (supermayoría).
* **Casos de uso avanzados:** `getBlockCommitment` sirve para realizar análisis detallados de finalidad. En la mayoría de los casos habituales, es más sencillo y suficiente usar niveles de compromiso estándar (`processed`, `confirmed` o `finalized`) con otros métodos RPC (como `getTransaction` o `getBlock`).
* **Comprender el compromiso:** Para aprovechar al máximo `getBlockCommitment`, es esencial comprender bien los niveles de compromiso de Solana. Consulta [Niveles de compromiso de Solana](https://www.helius.dev/blog/solana-commitment-levels) para obtener información detallada.
* **Poda:** Ten en cuenta que los nodos RPC pueden eliminar información de compromiso antigua, lo que genera resultados `null` para slots antiguos.

## Ejemplo: Obtener información sobre el compromiso de un bloque

Intentemos obtener información de compromiso para un número de slot ilustrativo en Devnet.
**Importante:** Los números de slot se procesan rápidamente. El número de slot usado a continuación (`250000000`) es un marcador de posición. Cuando ejecutes el ejemplo, debes reemplazarlo por un slot reciente y confirmado que sepas que existe en tu red de destino (por ejemplo, Devnet o Mainnet). Puedes encontrar números de slot recientes con un explorador de bloques de Solana.

**Nota:** Reemplaza `YOUR_API_KEY` por tu clave de API de Helius real en los siguientes ejemplos.

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