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

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

El método RPC [`getLeaderSchedule`](https://www.helius.dev/docs/api-reference/rpc/http/getleaderschedule) devuelve la asignación del liderazgo de producción de bloques a los validadores para una época específica. Comprender el calendario de líderes puede ser útil para analizar la red, predecir qué validador producirá bloques en determinados momentos o desarrollar herramientas que interactúen con líderes específicos.

## Casos de uso comunes

* **Monitoreo de la red:** Observa la distribución de los slots de líder entre los validadores de una época.
* **Enrutamiento de transacciones (avanzado):** Algunas aplicaciones avanzadas pueden intentar enrutar transacciones al líder actual o al próximo, aunque generalmente la red y los nodos RPC se encargan de esto.
* **Análisis del rendimiento de validadores:** Correlaciona el calendario de líderes con la producción real de bloques para evaluar el tiempo de actividad y el rendimiento de los validadores.
* **Comprensión del avance de una época:** Consulta qué validadores son responsables de producir bloques durante una época.

## Parámetros de solicitud

El método puede aceptar hasta dos parámetros opcionales:

1. **`slot`** (u64, opcional): Un número de slot. Si lo proporcionas, se obtendrá el calendario de líderes de la época que contiene este slot. Si es `null` o se omite, se obtiene el calendario de líderes de la época actual.
2. **`config`** (objeto, opcional): Un objeto de configuración que puede contener:
   * **`commitment`** (cadena, opcional): Especifica el [nivel de compromiso](https://www.helius.dev/blog/solana-commitment-levels). Si no lo proporcionas, se usa el compromiso predeterminado del nodo.
   * **`identity`** (cadena, opcional): Una clave pública de un validador codificada en base 58. Si la proporcionas, el calendario devuelto solo incluirá los slots asignados a este validador específico.

## Estructura de la respuesta

El campo `result` de la respuesta JSON-RPC será:

* `null`: Si no se encuentra la época correspondiente al `slot` solicitado (o la época actual si no se proporciona ningún slot) o si su calendario de líderes no está disponible (por ejemplo, para una época futura que aún no se ha calculado).
* Un **objeto**: Si se encuentra un calendario. Este objeto es un mapa donde:
  * Cada **clave** es la clave pública codificada en base 58 (identidad) de un validador.
  * El **valor** correspondiente es un arreglo de números. Cada número es un índice de slot *relativo al inicio de la época* para el que ese validador es el líder.

Por ejemplo, si una época comienza en el slot `1000` y un validador tiene `[0, 1, 5]` en su calendario, significa que ese validador es el líder de los slots `1000`, `1001` y `1005`.

## Ejemplos

### 1. Obtener el calendario de líderes de la época actual

Este ejemplo obtiene el calendario de líderes completo de la época actual.

<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. Obtener el calendario de líderes de un validador específico en una época específica (por slot)

Este ejemplo obtiene el calendario de líderes de una identidad de validador determinada para la época que contiene el 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>

## Consejos para desarrolladores

* **Límites de las épocas:** El calendario de líderes permanece fijo durante toda una época. Puedes usar `getEpochInfo` para encontrar los slots de inicio y fin de una época.
* **Épocas futuras:** Solicitar el calendario de una época muy lejana en el futuro puede devolver `null` si la red aún no lo ha calculado.
* **Índices de slot relativos:** Recuerda que los números de slot de la respuesta son relativos al primer slot de la época *solicitada*, no números de slot absolutos de la blockchain.
* **Respuesta grande:** Para el calendario completo de una época sin un filtro de identidad, la respuesta puede ser grande e incluir todos los validadores y los slots que tienen asignados.

Esta guía proporciona la información necesaria para usar `getLeaderSchedule` y consultar las asignaciones de productores de bloques de cualquier época determinada en la red de Solana.

## Métodos relacionados

<CardGroup cols={2}>
  <Card title="getEpochInfo" href="/docs/es/api-reference/rpc/http/getepochinfo">
    Obtén información sobre la época actual, incluidos los límites de slots
  </Card>

  <Card title="getSlotLeaders" href="/docs/es/api-reference/rpc/http/getslotleaders">
    Obtén los líderes de un intervalo específico de slots
  </Card>
</CardGroup>
