Skip to main content

各格式的大小限制

交易 v1 是 SIMD-0385 引入的消息格式。对发送方而言,主要变化在于大小:v1 交易最大可达 4096 字节,而 legacy 和 v0 交易仍为 1232 字节。 Apex 根据交易字节检测格式。无需设置任何标志,也没有单独的路由。
捆绑包成员无论采用何种格式,每笔都限制为 1232 字节。
超过 1232 字节的 legacy 或 v0 交易,或任何超过 4096 字节的交易,都会因过大而被拒绝。参见错误与速率限制

使用规范编码器序列化 v1

v1 交易必须使用该格式的规范编码器进行序列化。在 Rust 中即 wincode。较旧的 bincode 和 serde 方式对 legacy 和 v0 能生成正确的字节,但对 v1 会生成错误的字节,交易会因格式错误而被拒绝。 Rust 客户端通过 apex_sender_client::serialize_transaction 提供了正确的编码器。对于 legacy 和 v0,它与 bincode 逐字节相同,对 v1 也是正确的。ApexSenderClient::send_transaction 在内部使用它,因此只有在您需要字节本身时才需自行调用,例如用于 HTTP 路由。 在其他语言中,请使用实现了 SIMD-0385 序列化的 Solana 库版本。发送前请检查序列化后消息的第一个字节是否为 v1 版本前缀。

小费规则保持不变

v1 交易需要相同的小费:一条顶层的 SystemProgram 转账,转给已公布的小费账户,由签名者出资,且不低于您所在等级的下限。 一个区别在于计算预算。在 v1 消息中,计算预算位于消息自身的 TransactionConfig 中,而不是 ComputeBudget 程序指令中。TransactionConfig 中未设置的每一项限制都为 0,包括已加载账户数据大小。在我们 2026-09-19 的主网测试中,一笔依赖 ComputeBudget 指令的 v1 交易成功落地,随后在链上以 MaxLoadedAccountsDataSizeExceeded 失败。 因此请三项都设置:计算单元上限、已加载账户数据大小上限,以及用于优先级的费用。优先费是以 lamports 计的总额,而不是每计算单元的价格。使用这样的配置,276、741 和 1641 字节的 v1 交易通过 Apex 经 QUIC 在主网成功落地。其中 1641 字节的那一笔超过了 legacy 的 1232 字节上限。

Rust 示例

该程序构建一笔带有 3,000 字节 memo 式负载的 v1 交易(legacy 交易无法容纳),并通过 QUIC 发送。除快速入门的依赖外,它还需要 solana-message = "=4.4.1"
发送超过 4096 字节的内容会在本地以 Error::TooLarge 失败,不会有任何数据到达网络。

通过 HTTP 发送 v1

一旦您持有正确序列化的 v1 字节,HTTP 路由接收它们的方式与接收任何交易完全相同:sendTransaction/send 使用 base64,/send-bin/send-batch 使用原始字节。