Skip to main content
Die 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

  1. lockedWritableAccounts (array von string, 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

Das result 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 dem lockedWritableAccounts-Filter entspricht, falls vorhanden). Ein Wert von 0 bedeutet 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 prioritizationFee von 0 bedeutet 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_units sein. Sie müssen auch das Compute Unit-Limit für Ihre Transaktion (ComputeBudgetProgram.setComputeUnitLimit) und den Preis (ComputeBudgetProgram.setComputeUnitPrice) festlegen.
Die effektive Nutzung von getRecentPrioritizationFees kann die Zuverlässigkeit der Transaktionsbestätigung unter dynamischen Netzwerkbedingungen erheblich verbessern.