getRecentPrioritizationFees bietet Einblicke in die Priorisierungsgebühren, die in den letzten Blöcken im Solana-Netzwerk gezahlt wurden. Anhand dieser Gebühren können Entwickler fundierter entscheiden, welche zusätzliche Gebühr (Prioritätsgebühr) sie ihren Transaktionen hinzufügen sollten, damit diese mit höherer Wahrscheinlichkeit schnell verarbeitet werden. Das ist besonders bei hoher Netzwerkaktivität wichtig.
Nodes speichern Daten zu Priorisierungsgebühren normalerweise für bis zu 150 der letzten Blöcke im Cache.
Häufige Anwendungsfälle
- Dynamische Gebührenschätzung: Ermittle eine wettbewerbsfähige Prioritätsgebühr für eine Transaktion, indem du prüfst, welche Gebühren zuletzt erfolgreich waren.
- Überlastungsanalyse: Beurteile den aktuellen Zustand der Netzwerkauslastung anhand der gezahlten Prioritätsgebühren.
- Wallet-Integration: Ermögliche Wallets, Nutzern anhand der aktuellen Netzwerkbedingungen passende Prioritätsgebühren vorzuschlagen.
- Arbitrage-Bots: Bei zeitkritischen Vorgängen wie Arbitrage ist eine optimale Prioritätsgebühr entscheidend für die rechtzeitige Ausführung.
Parameter des Request
lockedWritableAccounts(arrayausstring, optional):- Ein Array mit Base58-codierten öffentlichen Schlüsseln der Konten, für die deine Transaktion eine Schreibsperre setzen soll.
- Du kannst maximal 128 Adressen angeben.
- Wenn du diesen Parameter angibst, gibt die Methode die Priorisierungsgebühren von Transaktionen zurück, die alle angegebenen Konten als beschreibbar gesperrt haben.
- Wenn du den Parameter weglässt oder ein leeres Array übergibst, gibt die Methode eine allgemeinere Übersicht der in den letzten Blöcken beobachteten Priorisierungsgebühren zurück. Diese bezieht sich nicht auf eine bestimmte Gruppe von Konten.
Struktur der response
Das Feldresult der JSON-RPC-response enthält ein Array mit Objekten für Priorisierungsgebühren. Jedes Objekt beschreibt Gebühren aus einem bestimmten kürzlich verarbeiteten slot und hat die folgende Struktur:
slot(u64): Die Nummer des slot, in dem die Transaktionen verarbeitet wurden, die zu diesen Gebührendaten beigetragen haben.prioritizationFee(u64): Die niedrigste Priorisierungsgebühr in Mikro-Lamports pro Compute Unit, die mindestens eine Transaktion in diesem slot gezahlt hat und die gegebenenfalls dem FilterlockedWritableAccountsentspricht. Ein Wert von0bedeutet häufig, dass keine den Kriterien entsprechende Transaktion in diesem slot zusätzlich zur Grundgebühr eine Prioritätsgebühr gezahlt hat oder dass der node für die angegebenen Konten keine solche Gebühr erkannt hat.
Beispiele
1. Aktuelle netzwerkweite Priorisierungsgebühren abrufen
Dieses Beispiel ruft eine allgemeine Liste aktueller Priorisierungsgebühren ab, ohne gesperrte Konten anzugeben.2. Aktuelle Priorisierungsgebühren für bestimmte beschreibbare Konten abrufen
Dieses Beispiel ruft Priorisierungsgebühren ab, die für eine Transaktion relevant sind, die zwei bestimmte Konten mit einer Schreibsperre versehen muss.Tipps für Entwickler
- Gebühreneinheiten: Priorisierungsgebühren werden in Mikro-Lamports (0,000001 Lamports) pro Compute Unit (CU) angegeben.
- Cache-Zeitraum: RPC nodes speichern diese Gebühren normalerweise für etwa 150 Blöcke im Cache. Du betrachtest also einen relativ kurzen historischen Zeitraum von ungefähr 1–2 Minuten.
- Gebühren von null: Ein Wert von
0fürprioritizationFeebedeutet nicht zwingend, dass keine Gebühren gezahlt wurden. Stattdessen enthielten die geprüften Transaktionen für den angegebenen slot und die angegebenen Konten möglicherweise keine Prioritätsgebühr oder lagen unter einem Schwellenwert, den der node als relevant betrachtet. - Strategische Nutzung: Wähle nicht einfach die höchste zuletzt gezahlte Gebühr. Analysiere die Verteilung, zum Beispiel den Median oder das 75. Perzentil der Gebühren über null, um eine kosteneffiziente Entscheidung zu treffen. Wenn ein Block bereits mit Transaktionen hoher Priorität gefüllt ist, garantiert eine überhöhte Gebühr ab einem gewissen Punkt keine schnellere Aufnahme.
- Compute Units: Die gesamte Prioritätsgebühr für deine Transaktion beträgt
prioritizationFee_per_CU * your_transaction_compute_units. Du musst außerdem das Compute-Unit-Limit für deine Transaktion (ComputeBudgetProgram.setComputeUnitLimit) und den Preis (ComputeBudgetProgram.setComputeUnitPrice) festlegen.
getRecentPrioritizationFees effektiv nutzt, kannst du die Zuverlässigkeit von Transaktionsbestätigungen bei dynamischen Netzwerkbedingungen deutlich verbessern.