Ce qui change dans la transaction v1
Les transactions Legacy et v0 restent inchangées. Pour la plupart des intégrations, deux choses concernant la transaction v1 sont importantes :- Vous devez opter pour la recevoir. Les requêtes pour les données complètes de transaction nécessitent
maxSupportedTransactionVersion: 1, et votre bibliothèque client nécessite une version capable de désérialiser v1. - Le budget de calcul passe dans l’en-tête du message. Un message v1 transporte un objet
transactionConfigaveccomputeUnitLimit,heapSize,loadedAccountsDataSizeLimit, etpriorityFee. Il n’y a pas d’instructions de programme ComputeBudget dans une transaction v1.
"version": 1 et son message inclut transactionConfig :
"priorityFee": 50000 signifie que cette transaction paie 50,000 lamports au total. Un champ null signifie que l’expéditeur ne l’a pas défini. Les messages Legacy et v0 omettent complètement transactionConfig.
Définir maxSupportedTransactionVersion à 1
Chaque requête qui retourne des données complètes de transaction doit déclarer la version de transaction la plus élevée qu’elle peut gérer. DéfinissezmaxSupportedTransactionVersion: 1 sur :
getTransactiongetBlockgetTransactionsForAddressavectransactionDetails: "full"transactionSubscribeavectransactionDetails: "accounts"ou"full"blockSubscribe
0, échoue avec l’erreur JSON-RPC -32015 dès qu’elle touche une transaction v1 :
getBlock, une seule transaction v1 n’importe où dans le bloc fait échouer la requête entière. Si vous voyez -32015 dans vos journaux, le projet échoue déjà sur les transactions versionnées.
Mettez à niveau votre SDK avant d’augmenter la valeur
DéfinirmaxSupportedTransactionVersion: 1 indique au nœud de retourner des transactions v1. Votre bibliothèque client doit encore les désérialiser. Mettez à niveau d’abord, puis changez le paramètre :
Les anciennes implémentations
VersionedTransaction.deserialize en JavaScript ne gèrent que les versions Legacy et v0 et lancent une exception sur un octet de version 0x81. Les anciens protos de Yellowstone précèdent les champs de message v1, donc les consommateurs gRPC sur ces versions ne voient jamais transactionConfig. Pour les clients gRPC Go, régénérez à partir des derniers protos de Yellowstone et solana-storage-proto.
Lire les frais de priorité à partir de transactionConfig
Le code qui estime le frais de priorité d’une transaction en recherchant des instructions de programme ComputeBudget (ComputeBudget111111111111111111111111111111, setComputeUnitPrice, setComputeUnitLimit) lit chaque transaction v1 comme payant zéro. Sur v1, les valeurs résident dans message.transactionConfig, et les unités diffèrent :
Ne portez pas le calcul
price × computeUnitLimit ÷ 1e6 hérité sur priorityFee. C’est déjà le total.
priority-fee.ts
transactionConfig (ou sur version === 1) plutôt que sur la présence d’instructions ComputeBudget, car une transaction héritée sans frais de priorité n’a aucune non plus.
Décodez les octets de transaction bruts avec un analyseur compatible v1
Cette section ne s’applique que si vous consommez des octets de transaction bruts, par exemple à partir de preconfSubscribe, preprocessedSubscribe, ou d’une réponse RPC codéebase64. Si vous travaillez avec des réponses json ou jsonParsed, passez-le.
La transaction v1 modifie la disposition du fil de deux manières :
- Octet de version. Une transaction v1 commence par
0x81(décimal 129). Une transaction v0 commence par0x80. - Les signatures passent à la fin. Les transactions Legacy et v0 mettent d’abord les signatures, puis le message. La transaction v1 met d’abord le message et les signatures en dernier, donc les décodeurs de style
bincodequi s’attendent à un tableau de signatures en tête échouent sur les octets v1.

Disposition en octets d'une transaction v1 avec trois adresses et une instruction. La signature est à la fin, après le message.
- Rust :
agave-transaction-viewanalyse Legacy, v0, et v1 sur place.wincode, le sérialiseur compatible bincode utilisé par les SDK Solana actuels, décode également v1 enVersionedTransaction. - JavaScript / TypeScript :
@solana/kit8.0+ ou@solana/web3.jsv3.
0x81 signifie v1 et les signatures suivent le message au lieu de le précéder.
Liste de vérification
- Recherchez
getBlock,getTransaction,getTransactionsForAddress,transactionSubscribe, etblockSubscribe, y compris les corps JSON-RPC bruts et les wrappers SDK commeconnection.getParsedTransaction. - Mettez à niveau vers un SDK compatible v1.
- Définissez
maxSupportedTransactionVersion: 1sur chaque appel trouvé à l’étape 1. - Remplacez la recherche d’instruction ComputeBudget par une vérification
transactionConfig, et traitezpriorityFeecomme des lamports totaux. - Remplacez les décodeurs bruts de style
bincodeparagave-transaction-viewou un SDK mis à jour. - Augmentez les dépendances de streaming aux versions du tableau ci-dessus.
- Recherchez les journaux pour
-32015après le changement pour confirmer que rien n’échoue encore.
En relation
Guide de getTransaction
Paramètres, forme de réponse et exemples pour récupérer une seule transaction.
Guide de getBlock
Récupérez un bloc complet, y compris chaque transaction qu’il contient.
getTransactionsForAddress
Historique des transactions filtrées et paginées pour toute adresse en un appel.
checklist de migration Agave 4.2
Chaque changement important d’Agave 4.2, avec des étapes de remédiation.