交易 v1 的变化
旧版和 v0 交易未更改。对于大多数集成,交易 v1 有两点需要注意:- 您必须选择接收它。 完整交易数据的请求需要
maxSupportedTransactionVersion: 1,并且您的客户端库需要能够反序列化 v1 的版本。 - 计算预算移入消息头。 v1 消息携带一个
transactionConfig对象,包含computeUnitLimit、heapSize、loadedAccountsDataSizeLimit和priorityFee。在 v1 交易中没有计算预算程序指令。
"version": 1 及其 message 包括 transactionConfig:
"priorityFee": 50000 表示这笔交易总共支付了 50000 lamports。一个 null 字段表示发送者未设置。旧版和 v0 消息完全省略 transactionConfig。
设置 maxSupportedTransactionVersion 为 1
每个返回完整交易数据的请求都必须声明其能够处理的最高交易版本。在以下位置设置maxSupportedTransactionVersion: 1:
getTransactiongetBlockgetTransactionsForAddresswithtransactionDetails: "full"transactionSubscribewithtransactionDetails: "accounts"or"full"blockSubscribe
0 的请求在触及 v1 交易时会由于 JSON-RPC 错误 -32015 而失败:
getBlock,区块中的任何一个 v1 交易都会导致整个请求失败。如果在日志中看到 -32015,表示该项目在版本化交易上已经失败。
在增加值之前升级您的 SDK
设置maxSupportedTransactionVersion: 1 告诉节点返回 v1 交易。您的客户端库仍需反序列化这些交易。请先升级,然后更改参数:
旧的
VersionedTransaction.deserialize JavaScript 实现仅处理旧版和 v0,并在前导 0x81 字节上抛出错误。旧版 Yellowstone protos 早于 v1 消息字段版本,因此在这些版本上的 gRPC 使用者从未看到 transactionConfig。对于 Go gRPC 客户端,从最新的 Yellowstone protos 中重新生成并 solana-storage-proto。
从 transactionConfig 中读取优先费用
通过扫描计算预算程序指令 (ComputeBudget111111111111111111111111111111,setComputeUnitPrice,setComputeUnitLimit) 来估算交易优先费用的代码读取每个 v1 交易支付为零。在 v1 中,这些值位于 message.transactionConfig,单位不同:
不要将旧版
price × computeUnitLimit ÷ 1e6 数学迁移到 priorityFee。它已经是总数。
priority-fee.ts
transactionConfig(或 version === 1)而不是计算预算指令的存在来分支,因为没有优先费用的旧版交易也没有。
使用支持 v1 的解析器解码原始交易字节
如果您使用原始交易字节,例如从 preconfSubscribe、preprocessedSubscribe 或base64 编码的 RPC 响应中,那么此部分适用。如果您处理 json 或 jsonParsed 响应,请跳过此部分。
交易 v1 以两种方式改变了线路布局:
- 版本字节。 v1 交易以
0x81(十进制 129) 开始。v0 交易以0x80开始。 - 签名移到最后。 旧版和 v0 先放置签名,然后是消息。交易 v1 先放置消息,然后将签名放在最后,因此期望前导签名数组的
bincode样式解码器在 v1 字节上失败。

具有三个地址和一个指令的交易 v1 的字节布局。签名位于消息后的结尾。
- Rust:
agave-transaction-view就地解析旧版、v0 和 v1。wincode,用于当前 Solana SDK 的 bincode 兼容序列化器,也将 v1 解码到VersionedTransaction。 - JavaScript / TypeScript:
@solana/kit8.0+ 或@solana/web3.jsv3。
0x81 表示 v1,签名在消息之后而不是之前。
清单
- grep 搜索
getBlock、getTransaction、getTransactionsForAddress、transactionSubscribe和blockSubscribe,包括原始 JSON-RPC 主体和类似connection.getParsedTransaction的 SDK 包。 - 升级到支持 v1 的 SDK。
- 在步骤 1 中找到的每个调用上设置
maxSupportedTransactionVersion: 1。 - 用
transactionConfig检查替换计算预算指令扫描,并将priorityFee视为总 lamports。 - 用
agave-transaction-view或升级的 SDK 替换bincode样式的原始解码器。 - 将流依赖项提高到上表中的版本。
- 在更改后在日志中 grep 搜索
-32015以确认没有任何失败。
相关
getTransaction 指南
获取单个交易的参数、响应格式和示例。
getBlock 指南
获取完整区块,包括其包含的每笔交易。
getTransactionsForAddress
在一次调用中获取任何地址的过滤、分页交易历史。
Agave 4.2 迁移清单
每个 Agave 4.2 的重大更改及补救步骤。