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

# Como Usar getBlockProduction

> Aprenda sobre casos de uso de getBlockProduction, exemplos de código, parâmetros de solicitação, estrutura de resposta e dicas.

O método RPC [getBlockProduction](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) fornece informações sobre a produção de blocos no epoch atual ou em um intervalo de slots especificado. Pode ser usado para recuperar dados de todos os validadores ou de um identificador específico de validador. Isso é valioso para monitorar o desempenho dos validadores e entender os padrões de produção de blocos na rede.

## Casos Comuns de Uso

* **Monitoramento de Desempenho do Validador:** Acompanhe o número de blocos produzidos e slots de líder para um validador específico.
* **Análise de Desempenho do Epoch:** Obtenha uma visão geral da produção de blocos em todos os validadores no epoch atual ou passado.
* **Identificação de Slots Perdidos:** Veja se os validadores estão perdendo seus slots de líder atribuídos.
* **Verificações de Saúde da Rede:** Reúna dados sobre a eficiência geral da produção de blocos.

## Parâmetros de Solicitação

O método getBlockProduction aceita um objeto de configuração opcional com os seguintes parâmetros:

1. **commitment** (string, opcional): Especifica o nível de compromisso a ser usado para a consulta. Se omitido, o compromisso padrão do nó é usado.
2. **range** (objeto, opcional): Define um intervalo de slots para consulta.
   * start\_slot (u64): O primeiro slot para buscar informações de produção de bloco (inclusivo).
   * end\_slot (u64, opcional): O último slot para buscar informações de produção de bloco (inclusivo). Se omitido, a produção de bloco do epoch atual até o slot atual será retornada.
3. **identity** (string, opcional): Uma chave pública codificada em base58 de uma identidade de validador. Se fornecida, a resposta incluirá apenas informações de produção de bloco para este validador específico. Se omitida, as informações para todos os validadores no intervalo especificado (ou epoch atual) são retornadas.

**Nota:** Pelo menos um dos parâmetros identity ou range deve ser fornecido. Se identity não for fornecido, o parâmetro range é obrigatório.

## Estrutura de Resposta

O campo result da resposta JSON-RPC será um objeto contendo:

* context (objeto):
  * slot (u64): O slot no qual a informação foi recuperada.
* value (objeto):
  * validators (objeto): Um objeto onde as chaves são strings de identidade de validador (chaves públicas codificadas em base58), e os valores são objetos contendo:
    * leaderSlots (u64): O número de slots de líder atribuídos a este validador no intervalo/epoch consultado.
    * blocksProduced (u64): O número de blocos produzidos por este validador no intervalo/epoch consultado.
  * range (objeto):
    * start\_slot (u64): O primeiro slot do intervalo consultado.
    * end\_slot (u64): O último slot do intervalo consultado.

## Dicas para Desenvolvedores

* **Entenda as Fronteiras do Epoch**: Ao consultar por identity sem um range, os dados retornados são para o epoch atual até o último slot processado pelo nó. Se precisar de dados para um epoch passado completo para um validador específico, você precisará determinar start\_slot e end\_slot para esse epoch.
* **Disponibilidade de Dados do Nó**: A gama de dados históricos de produção de blocos pode variar entre os nós RPC. Faixas de slots muito antigas podem não estar disponíveis em todos os nós.
* **Monitoramento de Desempenho**: getBlockProduction é crucial para construir painéis ou alertas relacionados ao tempo de atividade do validador e taxas de sucesso de produção de blocos.
* **Combinando com getLeaderSchedule**: Para uma análise mais profunda, você pode correlacionar dados de getBlockProduction com a saída de getLeaderSchedule para ver quais slots de líder específicos foram feitos ou perdidos.
* **Identidade vs. Todos os Validadores**: Consultar sem uma identity pode retornar uma grande quantidade de dados, especialmente se nenhum range ou um range amplo for especificado. Esteja atento aos tamanhos de resposta e aos requisitos de processamento.

## Exemplos

### 1. Obter Produção de Blocos para o Epoch Atual (Todos os Validadores)

Este exemplo busca dados de produção de blocos para todos os validadores no epoch atual.

<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. Obter Produção de Blocos para um Validador Específico no Epoch Atual

Este exemplo busca a produção de blocos para uma identidade de validador específica no epoch atual.

<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. Obter Produção de Blocos para um Intervalo de Slots Específico e Validador

Este exemplo busca dados de produção de blocos para um validador específico dentro de um intervalo 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>

Este guia deve fornecer uma compreensão sólida de como usar o método RPC getBlockProduction para analisar a produção de blocos no Solana.

## Métodos Relacionados

<CardGroup cols={2}>
  <Card title="getLeaderSchedule" href="/docs/pt-BR/api-reference/rpc/http/getleaderschedule">
    Obtenha a programação completa de líderes para correlacionar com os dados de produção
  </Card>

  <Card title="getVoteAccounts" href="/docs/pt-BR/api-reference/rpc/http/getvoteaccounts">
    Obtenha informações sobre todos os validadores de votação
  </Card>
</CardGroup>
