getRecentPrioritizationFees RPC-Methode bietet Einblicke in die Priorisierungsgebühren, die in den letzten Blöcken des Solana-Netzwerks gezahlt wurden. Durch die Untersuchung dieser Gebühren können Entwickler fundiertere Entscheidungen darüber treffen, welche zusätzliche Gebühr (Prioritätsgebühr) sie ihren Transaktionen hinzufügen sollten, um deren Wahrscheinlichkeit zu erhöhen, insbesondere während Zeiten hoher Netzaktivität, schnell verarbeitet zu werden.
Nodes cachen typischerweise Priorisierungsgebührendaten für bis zu 150 aktuelle Blöcke.
Häufige Anwendungsfälle
- Dynamische Gebührenschätzung: Bestimmen Sie eine wettbewerbsfähige Prioritätsgebühr für eine Transaktion, indem Sie beobachten, welche Gebühren kürzlich erfolgreich waren.
- Stauanalyse: Verstehen Sie den aktuellen Stand der Netzwerkkongestion, indem Sie sich die Höhe der gezahlten Prioritätsgebühren ansehen.
- Wallet-Integration: Erlauben Sie Wallets, basierend auf den aktuellen Netzwerkkonditionen angemessene Prioritätsgebühren vorzuschlagen.
- Arbitrage-Bots: Für zeitkritische Operationen wie Arbitrage ist das Setzen einer optimalen Prioritätsgebühr entscheidend für die rechtzeitige Ausführung.
Anforderungsparameter
lockedWritableAccounts(arrayvonstring, optional):- Ein Array von base-58 kodierten öffentlichen Schlüsseln von Konten, die Ihre Transaktion schreibsperren möchte.
- Maximal können 128 Adressen angegeben werden.
- Wenn angegeben, gibt die Methode die von Transaktionen gezahlten Priorisierungsgebühren zurück, die alle der angegebenen Konten als schreibbar gesperrt haben.
- Wenn ausgelassen oder ein leeres Array übergeben wird, gibt die Methode eine allgemeinere Ansicht über die Priorisierungsgebühren zurück, die über die letzten Blöcke hinweg beobachtet wurden, ohne auf eine spezifische Kontengruppe zu achten.
Antwortstruktur
Dasresult Feld der JSON-RPC-Antwort ist ein Array von Priorisierungsgebühr-Objekten. Jedes Objekt enthält Gebühren aus einem bestimmten aktuellen Slot und hat die folgende Struktur:
slot(u64): Die Slotnummer, in der die Transaktionen, die zu diesen Gebührendaten beigetragen haben, verarbeitet wurden.prioritizationFee(u64): Die minimale Priorisierungsgebühr (in Mikro-Lamports pro Compute Unit), die von mindestens einer Transaktion in diesem Slot gezahlt wurde (und die demlockedWritableAccounts-Filter entspricht, falls vorhanden). Ein Wert von0bedeutet oft, dass keine Transaktionen in diesem Slot (die den Kriterien entsprechen) eine zusätzliche Prioritätsgebühr über die Basisgebühr hinaus bezahlt haben oder der Node keine für die gegebenen Konten beobachtet hat.
Beispiele
1. Abrufen der letzten globalen Priorisierungsgebühren
Dieses Beispiel ruft eine allgemeine Liste der letzten Priorisierungsgebühren ab, ohne spezifische gesperrte Konten anzugeben.2. Abrufen der letzten Priorisierungsgebühren für spezifische schreibbare Konten
Dieses Beispiel ruft Priorisierungsgebühren ab, die für eine Transaktion relevant sind, die zwei spezifische Konten schreibsperren muss.Entwicklertipps
- Gebühreneinheiten: Priorisierungsgebühren werden in Mikro-Lamports (0,000001 Lamports) pro Compute Unit (CU) ausgedrückt.
- Cache-Dauer: RPC-Nodes cachen diese Gebühren typischerweise für etwa 150 Blöcke. Das bedeutet, dass Sie ein relativ kurzes historisches Fenster betrachten (ungefähr 1-2 Minuten).
- Null-Gebühren: Ein
prioritizationFeevon0bedeutet nicht unbedingt, dass keine Gebühren bezahlt wurden. Vielmehr, dass für den gegebenen Slot und die Konten, die beobachteten Transaktionen keine Prioritätsgebühr beinhalteten oder unter einem Schwellenwert lagen, den der Node als signifikant erachtet. - Strategische Nutzung: Wählen Sie nicht einfach die höchste kürzlich gezahlte Gebühr. Analysieren Sie die Verteilung (z.B. Median, 75. Perzentil der nicht-Null-Gebühren), um eine kosteneffiziente Wahl zu treffen. Überbezahlungen garantieren keine schnellere Inklusion, wenn der Block bereits voller hochprioritärer Transaktionen ist.
- Compute Units: Die Gesamtprioritätsgebühr für Ihre Transaktion wird
prioritizationFee_per_CU * your_transaction_compute_unitssein. Sie müssen auch das Compute Unit-Limit für Ihre Transaktion (ComputeBudgetProgram.setComputeUnitLimit) und den Preis (ComputeBudgetProgram.setComputeUnitPrice) festlegen.
getRecentPrioritizationFees kann die Zuverlässigkeit der Transaktionsbestätigung unter dynamischen Netzwerkbedingungen erheblich verbessern.