getRecentPrioritizationFees fournit des informations sur les frais de priorisation payés dans les blocs récents sur le réseau Solana. En examinant ces frais, les développeurs peuvent prendre des décisions plus éclairées sur le montant du frais supplémentaire (frais de priorité) à ajouter à leurs transactions pour augmenter leur probabilité d’être traitées rapidement, surtout pendant les périodes de forte activité du réseau.
Les nœuds mettent généralement en cache les données de frais de priorisation pour jusqu’à 150 blocs récents.
Cas d’Utilisation Communes
- Estimation Dynamique des Frais : Déterminer un frais de priorité compétitif pour une transaction en observant quels frais ont récemment réussi.
- Analyse de la Congestion : Comprendre l’état actuel de la congestion du réseau en examinant le niveau des frais de priorité payés.
- Intégration de Portefeuille : Permettre aux portefeuilles de suggérer des frais de priorité appropriés aux utilisateurs en fonction des conditions récentes du réseau.
- Bots d’Arbitrage : Pour des opérations sensibles au temps comme l’arbitrage, définir un frais de priorité optimal est crucial pour une exécution rapide.
Paramètres de Requête
lockedWritableAccounts(arraydestring, optionnel) :- Un tableau de clés publiques encodées en base-58 des comptes que votre transaction a l’intention de verrouiller pour l’écriture.
- Un maximum de 128 adresses peut être fourni.
- Si fourni, la méthode retourne les frais de priorisation payés par des transactions qui ont verrouillé tous les comptes spécifiés comme écriture.
- Si omis ou si un tableau vide est passé, la méthode retourne une vue plus générale des frais de priorisation observés à travers les blocs récents, non spécifiques à un ensemble particulier de comptes.
Structure de Réponse
Le champresult de la réponse JSON-RPC est un tableau d’objets de frais de priorisation. Chaque objet détaille les frais d’un créneau récent spécifique et a la structure suivante :
slot(u64) : Le numéro de créneau dans lequel les transactions contribuant à ces données de frais ont été traitées.prioritizationFee(u64) : Le frais de priorisation minimum (en micro-Lamports par Unité de Calcul) payé par au moins une transaction dans ce créneau (et correspondant au filtrelockedWritableAccounts, le cas échéant). Une valeur de0signifie souvent qu’aucune transaction dans ce créneau (correspondant aux critères) n’a payé un frais de priorité supplémentaire au-delà du frais de base, ou que le nœud n’a pas observé de transaction pour les comptes donnés.
Exemples
1. Obtenir les Frais de Priorisation Récents Globaux
Cet exemple récupère une liste générale de frais de priorisation récents sans spécifier de comptes verrouillés.2. Obtenir les Frais de Priorisation Récents pour des Comptes Ecriture Spécifiques
Cet exemple récupère les frais de priorisation pertinents pour une transaction qui doit verrouiller pour l’écriture deux comptes spécifiques.Conseils pour les Développeurs
- Unités de Frais : Les frais de priorisation sont exprimés en micro-Lamports (0.000001 Lamports) par Unité de Calcul (CU).
- Fenêtre de Cache : Les nœuds RPC mettent généralement en cache ces frais pendant environ 150 blocs. Cela signifie que vous examinez une fenêtre historique relativement courte (environ 1 à 2 minutes).
- Frais Zéro : Un
prioritizationFeede0ne signifie pas nécessairement que aucun frais n’a été payé, mais plutôt que pour le créneau et le(s) compte(s) donné(s), les transactions échantillonnées n’incluaient pas de frais de priorité, ou étaient en dessous d’un seuil que le nœud considère comme significatif. - Utilisation Stratégique : Ne choisissez pas simplement le frais le plus élevé récemment. Analysez la distribution (par exemple, médiane, 75e centile des frais non nuls) pour faire un choix rentable. Surpayer ne garantit pas une inclusion plus rapide au-delà d’un certain point si le bloc est déjà rempli de transactions à haute priorité.
- Unités de Calcul : Le frais de priorité total pour votre transaction sera
prioritizationFee_per_CU * your_transaction_compute_units. Vous devez également définir la limite d’unités de calcul pour votre transaction (ComputeBudgetProgram.setComputeUnitLimit) et le prix (ComputeBudgetProgram.setComputeUnitPrice).
getRecentPrioritizationFees peut améliorer considérablement la fiabilité de confirmation des transactions dans des conditions de réseau dynamiques.