Was ändert sich in Transaktion v1
Legacy- und v0-Transaktionen bleiben unverändert. Für die meisten Integrationen sind zwei Dinge bei Transaktion v1 wichtig:- Sie müssen sich dafür entscheiden, sie zu empfangen. Anfragen für vollständige Transaktionsdaten benötigen
maxSupportedTransactionVersion: 1, und Ihre Client-Bibliothek benötigt eine Version, die v1 deserialisieren kann. - Das Berechnungsbudget verschiebt sich in den Nachrichten-Header. Eine v1-Nachricht enthält ein
transactionConfig-Objekt mitcomputeUnitLimit,heapSize,loadedAccountsDataSizeLimitundpriorityFee. Es gibt keine CalculateBudget-Programmanweisungen in einer v1-Transaktion.
"version": 1 und ihr message enthält transactionConfig:
"priorityFee": 50000 bedeutet, dass diese Transaktion insgesamt 50.000 Lamports zahlt. Ein null-Feld bedeutet, dass der Absender es nicht gesetzt hat. Legacy- und v0-Nachrichten lassen transactionConfig vollständig aus.
Setzen Sie maxSupportedTransactionVersion auf 1
Jede Anfrage, die vollständige Transaktionsdaten zurückgibt, muss die höchste Transaktionsversion deklarieren, die sie verarbeiten kann. Setzen SiemaxSupportedTransactionVersion: 1 auf:
getTransactiongetBlockgetTransactionsForAddressmittransactionDetails: "full"transactionSubscribemittransactionDetails: "accounts"oder"full"blockSubscribe
0 setzt, schlägt mit JSON-RPC-Fehler -32015 fehl, sobald sie eine v1-Transaktion berührt:
getBlock schlägt eine v1-Transaktion im Block die gesamte Anfrage fehl. Wenn Sie -32015 in Ihren Protokollen sehen, schlägt das Projekt bereits bei versionierten Transaktionen fehl.
Aktualisieren Sie Ihr SDK, bevor Sie den Wert erhöhen
Das Setzen vonmaxSupportedTransactionVersion: 1 teilt dem Knoten mit, v1-Transaktionen zurückzugeben. Ihre Client-Bibliothek muss sie dennoch deserialisieren. Aktualisieren Sie zuerst und ändern Sie dann den Parameter:
Ältere
VersionedTransaction.deserialize-Implementierungen in JavaScript verarbeiten nur Legacy und v0 und werfen bei einem führenden 0x81-Byte einen Fehler. Ältere Yellowstone-Protos sind vor den v1-Nachrichtenfeldern, daher sehen gRPC-Verbraucher in diesen Versionen nie transactionConfig. Für Go gRPC-Clients, regenerieren Sie von den neuesten Yellowstone-Protos und solana-storage-proto.
Lesen Sie prioritäre Gebühren aus transactionConfig
Code, der die Prioritätsgebühr einer Transaktion schätzt, indem er nach ComputeBudget-Programmanweisungen sucht (ComputeBudget111111111111111111111111111111, setComputeUnitPrice, setComputeUnitLimit), liest jede v1-Transaktion als zahlen null. In v1 befinden sich die Werte in message.transactionConfig, und die Einheiten unterscheiden sich:
Portieren Sie nicht die Legacy
price × computeUnitLimit ÷ 1e6-Mathematik auf priorityFee. Es ist bereits die Summe.
priority-fee.ts
transactionConfig (oder auf version === 1), anstatt auf das Vorhandensein von ComputeBudget-Anweisungen zu achten, da eine Legacy-Transaktion ohne Prioritätsgebühr ebenfalls keine hat.
Dekodieren Sie rohe Transaktionsbytes mit einem v1-fähigen Parser
Dieser Abschnitt gilt nur, wenn Sie rohe Transaktionsbytes konsumieren, zum Beispiel von preconfSubscribe, preprocessedSubscribe oder einerbase64-kodierten RPC-Antwort. Wenn Sie mit json- oder jsonParsed-Antworten arbeiten, überspringen Sie es.
Transaktion v1 ändert das Drahtlayout auf zwei Arten:
- Versionsbyte. Eine v1-Transaktion beginnt mit
0x81(dezimal 129). Eine v0-Transaktion beginnt mit0x80. - Signaturen verschieben sich ans Ende. Legacy und v0 platzieren Signaturen zuerst, dann die Nachricht. Transaktion v1 platziert die Nachricht zuerst und die Signaturen zuletzt, so dass
bincode-Decoder, die ein führendes Signaturfeld erwarten, bei v1-Bytes fehlschlagen.

Byte-Layout einer Transaktion v1 mit drei Adressen und einer Anweisung. Die Signatur befindet sich am Ende, nach der Nachricht.
- Rust:
agave-transaction-viewanalysiert Legacy, v0 und v1 vor Ort.wincode, der bincode-kompatible Serializer, der von aktuellen Solana-SDKs verwendet wird, dekodiert auch v1 inVersionedTransaction. - JavaScript / TypeScript:
@solana/kit8.0+ oder@solana/web3.jsv3.
0x81 bedeutet v1 und die Signaturen folgen der Nachricht anstatt sie voranzustellen.
Checkliste
- Durchsuchen Sie
getBlock,getTransaction,getTransactionsForAddress,transactionSubscribeundblockSubscribe, einschließlich roher JSON-RPC-Körperschaften und SDK-Wrapper wieconnection.getParsedTransaction. - Aktualisieren Sie auf ein v1-fähiges SDK.
- Setzen Sie
maxSupportedTransactionVersion: 1bei jedem in Schritt 1 gefundenen Aufruf. - Ersetzen Sie das Scannen von ComputeBudget-Anweisungen durch eine
transactionConfig-Prüfung, und behandeln SiepriorityFeeals Gesamtlaports. - Ersetzen Sie
bincode-Style-Rohdecoder durchagave-transaction-viewoder ein aktualisiertes SDK. - Aktualisieren Sie Streaming-Abhängigkeiten auf die Versionen in der Tabelle oben.
- Durchsuchen Sie Protokolle nach
-32015nach der Änderung, um sicherzustellen, dass nichts mehr fehlschlägt.
Verwandt
getTransaction guide
Parameter, Antwortform und Beispiele zum Abrufen einer einzelnen Transaktion.
getBlock guide
Laden Sie einen vollständigen Block, einschließlich jeder darin enthaltenen Transaktion.
getTransactionsForAddress
Gefilterte, paginierte Transaktionshistorie für jede Adresse in einem Aufruf.
Agave 4.2 Migrations-Checkliste
Jede Agave 4.2-breaking changes mit Maßnahmen zur Behebung.