版本化交易

摘要

V0 交易引入了地址查找表(ALT),允许通过 1 字节索引引用账户,而不是 32 字节密钥。每个通过 ALT 解析的账户可节省 31 字节。

Solana 支持两种交易格式:传统版本化(v0)。

validator 通过检查消息的第一个字节来判断格式:

  • 如果第一个字节设置了 版本前缀 位,则为版本化消息。目前仅支持版本 0。接下来的 3 个字节为 MessageHeader
  • 否则为传统消息。第一个字节为 num_required_signatures,接下来的 2 个字节补全头部。

何时使用 V0 交易

当交易引用了大量账户并接近 1,232 字节数据包限制时,建议使用 V0。如果所有账户都内联且交易大小未超限,传统交易更简单且工具支持更广泛。使用地址查找表时必须采用 V0。

V0 消息格式

v0 消息与传统消息字段相同,但在指令后追加了一个额外的 address_table_lookups 数组:

字段大小描述
0x801 字节版本前缀字节
header3 字节消息头(与传统相同)
static_account_keyscompact-u16 + N × 32 字节交易中直接出现的密钥
recent_blockhash32 字节区块哈希
instructionscompact-u16 + 可变长度与传统格式相同
address_table_lookupscompact-u16 + 可变长度ALT 引用(见下文)

每个地址表查找项包含:

字段大小描述
account_key32 字节ALT 账户的公钥
writable_indexescompact-u16 + N × 1 字节ALT 中可写账户的索引
readonly_indexescompact-u16 + N × 1 字节ALT 中只读账户的索引

地址查找表解析

ALT 是一种链上账户,可存储最多 256 个公钥。通过引用 ALT,交易可以使用 1 字节索引来包含额外账户,而不是 32 字节公钥,从而显著降低每个账户的开销。

在运行时,执行开始前,validator 会将所有 ALT 引用解析为完整公钥。解析后的地址会追加到静态账户密钥后,形成完整的账户密钥列表。ALT 解析账户的顺序与静态账户一致:可写查找项在只读查找项之前。

地址查找表只影响账户在链上传输时的引用方式。在执行时,运行时会将所有索引解析为完整账户地址。ALT 解析账户只能是可写或只读(非签名者);不能作为签名者。

Is this page helpful?

Table of Contents

Edit Page

管理者

©️ 2026 Solana 基金会版权所有
取得联系