isBlockhashValid prüft, ob ein zuvor abgerufener Blockhash vom Netzwerk noch als gültig betrachtet wird. Blockhashes haben eine begrenzte Gültigkeitsdauer (etwa 2 Minuten oder 150 Blöcke). Danach werden Transaktionen abgelehnt, die auf sie verweisen.
Diese Methode ist unverzichtbar für Anwendungen, die Blockhashes einige Zeit speichern, bevor sie eine Transaktion übermitteln. So stellst du sicher, dass die Transaktion nicht wegen eines abgelaufenen Blockhashes fehlschlägt.
Versionshinweis: Diese Methode ist ab solana-core v1.9 verfügbar. Für nodes mit solana-core v1.8 oder älter solltest du getFeeCalculatorForBlockhash verwenden. Diese Methode liefert zusätzlich zu den Gebühreninformationen auch implizit die Gültigkeit des Blockhashes. Ist der Blockhash zu alt, gibt sie einen Fehler zurück.
Häufige Anwendungsfälle
- Erneutes Übermitteln einer Transaktion: Bevor du eine fehlgeschlagene Transaktion erneut versuchst, prüfe, ob ihr ursprünglicher Blockhash noch gültig ist. Falls nicht, musst du einen neuen Blockhash abrufen.
- Verzögertes Signieren von Transaktionen: Wenn du eine Transaktion vorbereitest, aber erst später signierst und übermittelst, prüfe die Gültigkeit des Blockhashes unmittelbar vor dem Übermitteln.
- Optimistische Transaktionsverarbeitung: Ermittle, ob das Netzwerk einen Blockhash wahrscheinlich akzeptiert, wenn du sofort eine Transaktion sendest.
Parameter des Requests
blockhash(String, erforderlich): Der zu prüfende Blockhash als Base58-codierter String.options(Objekt, optional): Ein optionales Konfigurationsobjekt, das Folgendes enthalten kann:commitment(String, optional): Legt das commitment-Level für die Abfrage fest, z. B."finalized","confirmed"oder"processed". Wenn du es weglässt, wird das standardmäßige commitment des nodes verwendet.minContextSlot(u64, optional): Der minimale slot, für den der request ausgewertet werden kann. Dadurch antwortet der RPC node nicht mit einem Status aus einem slot, der älter alsminContextSlotist.
Struktur der Response
Das Feldresult in der JSON-RPC-response ist ein RpcResponse-Objekt mit folgendem Inhalt:
context(Objekt): Ein Objekt mit folgendem Inhalt:slot(u64): Der slot, für den der RPC node die Gültigkeit des Blockhashes ausgewertet hat.
value(boolescher Wert):true, wenn der Blockhash noch gültig ist, andernfallsfalse.
Codebeispiele
Tipps für Entwickler
- Blockhashes laufen ab: Blockhashes sind nur für begrenzte Zeit gültig, etwa 150 slots beziehungsweise ungefähr 1–2 Minuten. Rufe immer einen neuen Blockhash ab, wenn du unsicher bist oder längere Zeit vergangen ist.
minContextSlotverwenden: VerwendeminContextSlot, um Abfragen an einen veralteten RPC node zu vermeiden. Dieser könnte für einen Blockhash eine veraltete „gültige“ response liefern, obwohl er aus Sicht des restlichen cluster bereits zu alt ist.- Alternative für ältere nodes: Verwende für nodes mit Solana-Versionen vor 1.9
getFeeCalculatorForBlockhash("<YOUR_BLOCKHASH>"). Wenn diese Methode erfolgreich eine response liefert, ist der Blockhash gültig. Gibt sie einen Fehler zurück – typischerweise, weil der Blockhash nicht gefunden wurde oder zu alt ist –, ist der Blockhash ungültig. - Bestätigung durch das Netzwerk: Selbst wenn
isBlockhashValidden Werttruezurückgibt, ist eine Transaktion erst finalisiert, wenn sie nach dem Übermitteln das gewünschte commitment-Level im Netzwerk erreicht.
isBlockhashValid beim Entwickeln von Solana-Anwendungen effektiv zu verwenden.
Verwandte Methoden
getLatestBlockhash
Rufe einen neuen Blockhash für neue Transaktionen ab