Solana构建发起交易时,返回错误

(*jsonrpc.RPCError)(0xc00739b530)({
 Code: (int) -32602,
 Message: (string) (len=122) "base64 encoded solana_sdk::transaction::versioned::VersionedTransaction too large: 1668 bytes (max: encoded/raw 1644/1232)",
 Data: (interface {}) <nil>
})

错误分析

交易的大小超过1232 字节限制

static_assertions::const_assert_eq!(PACKET_DATA_SIZE, 1232);
/// Maximum over-the-wire size of a Transaction
/// 1280 是 IPv6 最小 MTU
/// 40 字节是 IPv6 报头的大小
/// 8 字节是分片报头的大小
pub const PACKET_DATA_SIZE: usize = 1280 - 40 - 8;

PACKET_DATA_SIZE 硬编码,不可配置,为保障节点间数据传输的稳定和安全性

解决

拆分交易,将多个逻辑拆分到多笔交易

参考

https://github.com/solana-foundation/anchor/issues/2051