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

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

El método RPC [`getBlockProduction`](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) proporciona información sobre la producción de bloques en la época actual o en un rango de slots especificado. Puedes usarlo para recuperar datos de todos los validadores o de la identidad de un validador específico. Esto resulta útil para monitorear el rendimiento de los validadores y comprender los patrones de producción de bloques en la red.

## Casos de uso comunes

* **Monitorear el rendimiento de los validadores:** Haz un seguimiento del número de bloques producidos y los slots de líder de un validador específico.
* **Analizar el rendimiento de una época:** Obtén un resumen de la producción de bloques de todos los validadores en la época actual o en una época anterior.
* **Identificar slots perdidos:** Comprueba si los validadores pierden los slots de líder que tienen asignados.
* **Comprobar el estado de la red:** Recopila datos sobre la eficiencia general de la producción de bloques.

## Parámetros de la solicitud

El método `getBlockProduction` acepta un objeto de configuración opcional con los siguientes parámetros:

1. **`commitment`** (cadena, opcional): Especifica el nivel de compromiso que se usará para la consulta. Si se omite, se usa el nivel de compromiso predeterminado del nodo.
2. **`range`** (objeto, opcional): Define el rango de slots que se consultará.
   * `firstSlot` (u64): El primer slot para el que se obtendrá información sobre la producción de bloques (inclusive).
   * `lastSlot` (u64, opcional): El último slot para el que se obtendrá información sobre la producción de bloques (inclusive). Si se omite, se devolverá la producción de bloques de la época actual hasta el slot actual.
3. **`identity`** (cadena, opcional): Una clave pública de la identidad de un validador codificada en base58. Si se proporciona, la respuesta solo incluirá información sobre la producción de bloques de este validador específico. Si se omite, se devuelve información de todos los validadores del rango especificado (o de la época actual).

**Nota:** Debes proporcionar al menos uno de los parámetros `identity` o `range.firstSlot`. Si no proporcionas `identity`, el parámetro `range` es obligatorio.

## Estructura de la respuesta

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

* `context` (objeto):
  * `slot` (u64): El slot en el que se recuperó la información.
* `value` (objeto):
  * `byIdentity` (objeto): Un objeto cuyas claves son cadenas de identidad de validadores (claves públicas codificadas en base58) y cuyos valores son objetos que contienen:
    * `leaderSlots` (u64): El número de slots de líder asignados a este validador en el rango o la época consultados.
    * `blocksProduced` (u64): El número de bloques producidos por este validador en el rango o la época consultados.
  * `range` (objeto):
    * `firstSlot` (u64): El primer slot del rango consultado.
    * `lastSlot` (u64): El último slot del rango consultado.

## Consejos para desarrolladores

* **Comprende los límites de las épocas**: Cuando realices una consulta mediante `identity` sin un `range`, los datos devueltos corresponderán a la época actual hasta el último slot procesado por el nodo. Si necesitas datos de una época anterior *completa* para un validador específico, tendrás que determinar los valores `firstSlot` e `lastSlot` de esa época.
* **Disponibilidad de datos del nodo**: El rango de datos históricos sobre la producción de bloques puede variar entre nodos RPC. Es posible que los rangos de slots muy antiguos no estén disponibles en todos los nodos.
* **Monitoreo del rendimiento**: `getBlockProduction` es fundamental para crear paneles o alertas relacionados con el tiempo de actividad de los validadores y las tasas de éxito de producción de bloques.
* **Combinación con `getLeaderSchedule`**: Para realizar un análisis más detallado, puedes correlacionar los datos de `getBlockProduction` con el resultado de `getLeaderSchedule` para ver qué slots de líder específicos se produjeron o se perdieron.
* **Identidad frente a todos los validadores**: Una consulta sin `identity` puede devolver una gran cantidad de datos, en especial si no especificas `range` o si especificas un `range` amplio. Ten en cuenta el tamaño de las respuestas y los requisitos de procesamiento.

## Ejemplos

### 1. Obtener la producción de bloques de la época actual (todos los validadores)

Este ejemplo obtiene datos sobre la producción de bloques de todos los validadores en la época actual.

<CodeGroup>
  ```bash cURL theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction"
    }'
  ```

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

  async function getEpochBlockProduction() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction();
      console.log('Block Production for Current Epoch:', JSON.stringify(blockProduction, null, 2));
      // Example: Accessing data for a specific validator (if present)
      // const specificValidatorIdentity = " deaktivCQ2sV2KF1y7n4qX1xUFk6VXL79CdfjrmLdshs"; // Replace with actual identity
      // if (blockProduction.value.byIdentity[specificValidatorIdentity]) {
      //   console.log(\`Data for \${specificValidatorIdentity}:\`, blockProduction.value.byIdentity[specificValidatorIdentity]);
      // }
    } catch (error) {
      console.error('Error fetching block production:', error);
    }
  }

  getEpochBlockProduction();
  ```
</CodeGroup>

### 2. Obtener la producción de bloques de un validador específico en la época actual

Este ejemplo obtiene la producción de bloques de la identidad de un validador específico en la época actual.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY with the actual validator's base58 public key.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY"
        }
      ]
    }'
  ```

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

  async function getValidatorBlockProduction(validatorIdentity) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({ identity: validatorIdentity });
      console.log(\`Block Production for \${validatorIdentity}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity}:\`, error);
    }
  }

  // Replace with the validator identity you want to query
  const validatorIdentity = "So11111111111111111111111111111111111111112"; // Example: Solana Foundation
  getValidatorBlockProduction(validatorIdentity);
  ```
</CodeGroup>

### 3. Obtener la producción de bloques de un rango de slots y un validador específicos

Este ejemplo obtiene datos sobre la producción de bloques de un validador específico dentro de un rango de slots definido.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY, START_SLOT, and END_SLOT.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY",
          "range": {
            "firstSlot": START_SLOT, # e.g., 200000000
            "lastSlot": END_SLOT    # e.g., 200010000
          }
        }
      ]
    }'
  ```

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

  async function getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({
        identity: validatorIdentity,
        range: {
          firstSlot: firstSlot,
          lastSlot: lastSlot,
        },
      });
      console.log(\`Block Production for \${validatorIdentity} in range \${firstSlot}-\${lastSlot}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity} in range:\`, error);
    }
  }

  // Replace with your desired parameters
  const validatorIdentity = "Beefy1So11111111111111111111111111111111111"; // Example validator
  const firstSlot = 200000000; // Example start slot
  const lastSlot = 200010000;   // Example end slot
  getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot);
  ```
</CodeGroup>

Esta guía debería ayudarte a comprender bien cómo usar el método RPC `getBlockProduction` para analizar la producción de bloques en Solana.

## Métodos relacionados

<CardGroup cols={2}>
  <Card title="getLeaderSchedule" href="/docs/es/api-reference/rpc/http/getleaderschedule">
    Obtén la programación completa de líderes para correlacionarla con los datos de producción
  </Card>

  <Card title="getVoteAccounts" href="/docs/es/api-reference/rpc/http/getvoteaccounts">
    Obtén información sobre todos los validadores con derecho a voto
  </Card>
</CardGroup>
