摘要
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
数组:
| 字段 | 大小 | 描述 |
|---|---|---|
0x80 | 1 字节 | 版本前缀字节 |
header | 3 字节 | 消息头(与传统相同) |
static_account_keys | compact-u16 + N × 32 字节 | 交易中直接出现的密钥 |
recent_blockhash | 32 字节 | 区块哈希 |
instructions | compact-u16 + 可变长度 | 与传统格式相同 |
address_table_lookups | compact-u16 + 可变长度 | ALT 引用(见下文) |
每个地址表查找项包含:
| 字段 | 大小 | 描述 |
|---|---|---|
account_key | 32 字节 | ALT 账户的公钥 |
writable_indexes | compact-u16 + N × 1 字节 | ALT 中可写账户的索引 |
readonly_indexes | compact-u16 + N × 1 字节 | ALT 中只读账户的索引 |
地址查找表解析
ALT 是一种链上账户,可存储最多 256 个公钥。通过引用 ALT,交易可以使用 1 字节索引来包含额外账户,而不是 32 字节公钥,从而显著降低每个账户的开销。
在运行时,执行开始前,validator 会将所有 ALT 引用解析为完整公钥。解析后的地址会追加到静态账户密钥后,形成完整的账户密钥列表。ALT 解析账户的顺序与静态账户一致:可写查找项在只读查找项之前。
地址查找表只影响账户在链上传输时的引用方式。在执行时,运行时会将所有索引解析为完整账户地址。ALT 解析账户只能是可写或只读(非签名者);不能作为签名者。
Is this page helpful?