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

# Comment Utiliser getLeaderSchedule

> Découvrez les cas d'utilisation de getLeaderSchedule, des exemples de code, les paramètres de requête, la structure de réponse et des conseils.

La méthode RPC [`getLeaderSchedule`](https://www.helius.dev/docs/api-reference/rpc/http/getleaderschedule) renvoie l'attribution de la production de blocs aux validateurs pour une époque spécifique. Comprendre le calendrier des leaders peut être utile pour l'analyse du réseau, prévoir quel validateur produira des blocs à certains moments, ou pour les outils qui interagissent avec des leaders spécifiques.

## Cas d'Utilisation Communes

* **Surveillance du Réseau :** Observer la distribution des créneaux de leader parmi les validateurs lors d'une époque.
* **Routage de Transactions (Avancé) :** Certaines applications avancées pourraient essayer de router des transactions vers le leader actuel ou à venir, bien que cela soit généralement géré par le réseau et les nœuds RPC.
* **Analyse des Performances des Validateurs :** Corréler le calendrier des leaders avec la production réelle de blocs pour évaluer la disponibilité et les performances du validateur.
* **Compréhension de la Progression de l'Époque :** Voir quels validateurs sont responsables de la production de blocs tout au long d'une époque.

## Paramètres de Requête

La méthode peut accepter jusqu'à deux paramètres optionnels :

1. **`slot`** (u64, optionnel) : Un numéro de créneau. Si fourni, le calendrier des leaders pour l'époque contenant ce créneau sera récupéré. Si `null` ou omis, le calendrier des leaders pour l'époque actuelle est récupéré.
2. **`config`** (objet, optionnel) : Un objet de configuration qui peut contenir :
   * **`commitment`** (chaîne, optionnelle) : Spécifie le [niveau d'engagement](https://www.helius.dev/blog/solana-commitment-levels). Si non fourni, l'engagement par défaut du nœud est utilisé.
   * **`identity`** (chaîne, optionnelle) : Une clé publique encodée en base-58 d'un validateur. Si fourni, le calendrier retourné inclura uniquement les créneaux attribués à ce validateur spécifique.

## Structure de Réponse

Le champ `result` de la réponse JSON-RPC sera :

* `null` : Si l'époque correspondant au `slot` demandé (ou époque actuelle si aucun créneau n'est fourni) n'est pas trouvée ou si son calendrier des leaders n'est pas disponible (par exemple, pour une époque future non calculée).
* Un **objet** : Si un calendrier est trouvé. Cet objet est une carte où :
  * Chaque **clé** est la clé publique encodée en base-58 (identité) d'un validateur.
  * La **valeur** correspondante est un tableau de chiffres. Chaque chiffre est un indice de créneau *relatif au début de l'époque* pour lequel ce validateur est le leader.

Par exemple, si une époque commence au créneau `1000` et qu'un validateur a `[0, 1, 5]` dans son calendrier, cela signifie que ce validateur est le leader pour les créneaux `1000`, `1001`, et `1005`.

## Exemples

### 1. Obtenir le Calendrier des Leaders pour l'Époque Actuelle

Cet exemple récupère le calendrier complet des leaders pour l'époque actuelle.

<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. Obtenir le Calendrier des Leaders pour un Validateur Spécifique dans une Époque Spécifique (par Créneau)

Cet exemple récupère le calendrier des leaders pour un identifiant de validateur donné pour l'époque contenant le créneau `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>

## Conseils pour les Développeurs

* **Limites des Époques :** Le calendrier des leaders est fixe pour toute une époque. Vous pouvez utiliser `getEpochInfo` pour trouver les créneaux de début et de fin d'une époque.
* **Époques Futures :** Demander le calendrier pour une époque très future peut retourner `null` si le réseau ne l'a pas encore calculé.
* **Indices de Créneaux Relatifs :** Rappelez-vous que les numéros de créneaux dans la réponse sont relatifs au premier créneau de l'époque *demandée*, et non des numéros de créneaux absolus sur la blockchain.
* **Réponse Important :** Pour un calendrier complet d'une époque sans filtre d'identité, la réponse peut être importante, répertoriant tous les validateurs et leurs créneaux assignés.

Ce guide fournit les informations nécessaires pour utiliser `getLeaderSchedule` afin de demander les affectations de producteurs de blocs pour toute époque donnée sur le réseau Solana.

## Méthodes Associées

<CardGroup cols={2}>
  <Card title="getEpochInfo" href="/docs/fr/api-reference/rpc/http/getepochinfo">
    Obtenez des informations sur l'époque en cours, y compris les limites de créneaux
  </Card>

  <Card title="getSlotLeaders" href="/docs/fr/api-reference/rpc/http/getslotleaders">
    Obtenez les leaders pour une plage spécifique de créneaux
  </Card>
</CardGroup>
