You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solana JSON RPC API各类交易规范及构造方法查询

自行构造Solana交易的核心规范参考

不用web3js、直接拼二进制交易调用sendTransaction接口是完全可行的,所有链上操作的指令格式都是固定公开的,不需要依赖特定语言的SDK,你提到的几类操作的具体规则如下:

通用交易结构(所有操作通用)

不管是哪种交易,整体二进制序列化顺序是固定的,乱序会导致解析失败:

  • 开头1字节是无符号整数,记录这笔交易带了多少个签名
  • 紧接着是签名列表,每个签名固定64字节,顺序和后面消息里的签名者账号一一对应
  • 后面是消息主体,结构固定:
    • 1字节版本号:新手直接用legacy版本填0即可,v0版本额外支持地址查找表,等基础逻辑跑通再研究
    • 32字节最近区块哈希:通过getLatestBlockhash RPC拉取,用来做交易防重放,超过有效期的区块哈希对应的交易会被直接拒绝
    • 账号地址列表:每个地址固定32字节,必须按「需签名+可写」→「需签名+只读」→「无需签名+可写」→「无需签名+只读」的优先级排序,第一个需签名的可写账号默认支付交易手续费
    • 指令数组:每个指令拆成三部分:1字节的程序ID索引(标记这个指令调用哪个链上程序,值是对应程序地址在前面账号列表里的位置)、账号索引数组(每个元素1字节,按程序要求的顺序列指令涉及的账号在总账号列表里的位置)、指令参数字节流(按对应指令的格式序列化)

常用操作的具体指令规则

1. 原生SOL转账(系统程序实现)

  • 调用的固定程序ID:11111111111111111111111111111111(系统程序,所有链上原生操作都走这个程序)
  • 涉及账号必须按以下顺序传入,且两个账号都要标记为可写:
    • SOL转出方地址:必须是签名者
    • SOL转入方地址
  • 参数序列化规则:
    • 前4字节固定为小端序u32值2,也就是字节流0x02,0x00,0x00,0x00,对应系统程序的Transfer指令
    • 后面跟8字节小端序u64值:转账的lamport数量,注意1 SOL = 10^9 lamport,别算错单位

2. SPL代币转账(SPL Token程序实现)

  • 调用的固定程序ID:TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
  • 普通Transfer指令涉及账号按以下顺序传入:
    • 转出方的SPL代币账户地址:可写
    • 转入方的SPL代币账户地址:可写
    • 转出代币账户的权属人地址:必须是签名者
  • 参数序列化规则:
    • 第1字节固定为0x03,对应Transfer指令标识
    • 后面跟8字节小端序u64值:转账的代币数量,要按对应代币的精度换算,比如9精度代币转1枚就要填10^9

生产环境建议用TransferChecked指令(标识0x0c),比普通Transfer多了代币铸造地址、代币精度两个校验位,不会因为关联错代币账户导致转错资产,安全性高很多。如果是委托代转的场景,第三个签名者位置换成被授权的委托地址即可。

3. SPL代币授权(Approve)

  • 同样调用上面的SPL Token程序
  • 涉及账号按以下顺序传入:
    • 要开授权的源代币账户地址:可写
    • 被授权的委托方地址
    • 源代币账户的权属人地址:必须是签名者
  • 参数序列化规则:
    • 第1字节固定为0x04,对应Approve指令标识
    • 后面跟8字节小端序u64值:给委托方开放的最大可动用代币额度

同样推荐用带精度校验的ApproveChecked指令(标识0x0d),额外传入代币铸造地址和精度参数,避免参数错误。

4. SPL代币撤销授权(Revoke)

  • 同样调用SPL Token程序
  • 涉及账号只有两个,按顺序传:
    • 要撤销授权的源代币账户地址:可写
    • 源代币账户的权属人地址:必须是签名者
  • 参数序列化规则:只有1字节固定指令标识0x05,不需要传额外参数。

构造注意事项

  • 所有多字节数值一律用小端序序列化,别用大端序,不然链上程序解析直接报错
  • 签名逻辑是先把消息体完整序列化,再用每个签名者的私钥对消息体的二进制内容做ed25519签名,把签名填到开头的签名数组位置,最后把整个交易二进制做base664编码,就能直接传给sendTransaction接口
  • 所有指令的账号顺序、参数偏移、字节长度必须严格匹配规则,链上程序是按位置解析的,顺序错一个就会报指令格式错误
  • 调试阶段全部在devnet测试网验证,跑通所有逻辑再切主网,避免不必要的资产损失

内容的提问来源于stack exchange,提问作者Configentia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:42:36