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

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

O método RPC [`getLeaderSchedule`](https://www.helius.dev/docs/api-reference/rpc/http/getleaderschedule) retorna a atribuição de liderança na produção de blocos para validadores em um epoch específico. Entender a programação dos líderes pode ser útil para análise de rede, prever qual validador produzirá blocos em determinados momentos ou para ferramentas que interagem com líderes específicos.

## Casos de Uso Comuns

* **Monitoramento de Rede:** Observe a distribuição de slots de líderes entre validadores em um epoch.
* **Roteamento de Transações (Avançado):** Algumas aplicações avançadas podem tentar rotear transações para o líder atual ou futuro, embora isso seja geralmente gerenciado pela rede e nós RPC.
* **Análise de Desempenho de Validadores:** Correlacione a programação dos líderes com a produção de blocos real para avaliar o tempo de atividade e desempenho dos validadores.
* **Compreensão da Progressão do Epoch:** Veja quais validadores são responsáveis por produzir blocos ao longo de um epoch.

## Parâmetros de Solicitação

O método pode aceitar até dois parâmetros opcionais:

1. **`slot`** (u64, opcional): Um número de slot. Se fornecido, a programação dos líderes para o epoch contendo este slot será buscada. Se `null` ou omitido, a programação dos líderes para o epoch atual é buscada.
2. **`config`** (objeto, opcional): Um objeto de configuração que pode conter:
   * **`commitment`** (string, opcional): Especifica o [nível de compromisso](https://www.helius.dev/blog/solana-commitment-levels). Se não for fornecido, o compromisso padrão do nó é usado.
   * **`identity`** (string, opcional): Uma chave pública codificada em base-58 de um validador. Se fornecido, a programação retornada incluirá apenas slots atribuídos a este validador específico.

## Estrutura da Resposta

O campo `result` da resposta JSON-RPC será:

* `null`: Se o epoch correspondente ao `slot` solicitado (ou epoch atual se nenhum slot for fornecido) não for encontrado ou sua programação de líderes não estiver disponível (por exemplo, para um epoch futuro, ainda não calculado).
* Um **objeto**: Se uma programação for encontrada. Este objeto é um mapa onde:
  * Cada **chave** é a chave pública codificada em base-58 (identidade) de um validador.
  * O **valor** correspondente é um array de números. Cada número é um índice de slot *relativo ao início do epoch* para o qual esse validador é o líder.

Por exemplo, se um epoch começa no slot `1000` e um validador tem `[0, 1, 5]` em sua programação, isso significa que o validador é o líder para os slots `1000`, `1001`, e `1005`.

## Exemplos

### 1. Obter a Programação de Líderes para o Epoch Atual

Este exemplo busca a programação completa de líderes para o epoch atual.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API 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": "getLeaderSchedule"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchCurrentLeaderSchedule() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const leaderSchedule = await connection.getLeaderSchedule(); // Fetches for current epoch by default
      if (leaderSchedule) {
        console.log('Leader Schedule for Current Epoch:');
        for (const [validatorIdentity, slots] of Object.entries(leaderSchedule)) {
          console.log(`  Validator: ${validatorIdentity}`);
          console.log(`    Slots (relative to epoch start): ${slots.join(', ')}`);
        }
      } else {
        console.log('Leader schedule for the current epoch not found or not yet available.');
      }
      // console.log(JSON.stringify(leaderSchedule, null, 2));
    } catch (error) {
      console.error('Error fetching leader schedule:', error);
    }
  }

  fetchCurrentLeaderSchedule();
  ```
</CodeGroup>

### 2. Obter a Programação de Líderes para um Validador Específico em um Epoch Específico (por Slot)

Este exemplo busca a programação de líderes para uma identidade de validador dada para o epoch que contém o slot `200000`.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace VALIDATOR_PUBKEY with an actual validator identity 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": "getLeaderSchedule",
      "params": [
        200000,
        { "identity": "VALIDATOR_PUBKEY" }
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  // Replace VALIDATOR_PUBKEY with an actual validator identity public key
  const { Connection, PublicKey } = require('@solana/web3.js');

  async function fetchValidatorEpochSchedule() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const targetSlot = 200000;
    const validatorIdentity = 'VALIDATOR_PUBKEY'; // e.g., 'Vote111111111111111111111111111111111111111'

    try {
      const leaderSchedule = await connection.getLeaderSchedule(targetSlot, { identity: validatorIdentity });
      if (leaderSchedule && leaderSchedule[validatorIdentity]) {
        console.log(`Leader Schedule for Validator ${validatorIdentity} in epoch of slot ${targetSlot}:`);
        console.log(`  Slots (relative to epoch start): ${leaderSchedule[validatorIdentity].join(', ')}`);
      } else {
        console.log(`No leader slots found for validator ${validatorIdentity} in epoch of slot ${targetSlot}, or schedule not available.`);
      }
      // console.log(JSON.stringify(leaderSchedule, null, 2));
    } catch (error) {
      console.error('Error fetching validator leader schedule:', error);
    }
  }

  fetchValidatorEpochSchedule();
  ```
</CodeGroup>

## Dicas para Desenvolvedores

* **Limites do Epoch:** A programação dos líderes é fixa para um epoch inteiro. Você pode usar `getEpochInfo` para encontrar o início e o fim dos slots de um epoch.
* **Epochs Futuros:** Solicitar a programação para um epoch muito no futuro pode retornar `null` se a rede ainda não a calculou.
* **Índices de Slot Relativos:** Lembre-se de que os números de slot na resposta são relativos ao primeiro slot do *epoch solicitado*, não números absolutos na blockchain.
* **Resposta Grande:** Para uma programação completa de epoch sem filtro de identidade, a resposta pode ser grande, listando todos os validadores e seus slots atribuídos.

Este guia fornece as informações necessárias para usar `getLeaderSchedule` para consultar as atribuições de produtores de blocos para qualquer epoch na rede Solana.

## Métodos Relacionados

<CardGroup cols={2}>
  <Card title="getEpochInfo" href="/docs/pt-BR/api-reference/rpc/http/getepochinfo">
    Obter informações do epoch atual, incluindo limites de slots
  </Card>

  <Card title="getSlotLeaders" href="/docs/pt-BR/api-reference/rpc/http/getslotleaders">
    Obter líderes para um intervalo específico de slots
  </Card>
</CardGroup>
