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

创建TransactionInstruction时账户列表需按特定顺序排列还是可随机排序?

Solana TransactionInstruction 账户列表排序规则说明

结论

账户列表绝对不可以随机排序,必须严格遵循你所调用的目标链上程序约定的固定顺序

原因说明

  • Solana链上程序执行时,只会按照keys数组的索引下标读取对应账户,不会根据公钥、isSigner/isWritable属性自动匹配账户用途
  • 比如你调用的指令约定第1位是付款签名账户、第2位是收款账户,你把两者顺序调换后,程序会直接尝试从第1位的收款账户扣除转账金额,几乎必然导致交易失败,极端情况甚至会触发不符合预期的业务逻辑
  • 不同程序、同一程序的不同指令,要求的账户顺序都可能完全不同,没有通用的全局排序规则,完全由目标程序的业务逻辑决定

开发注意事项

构造keys数组前,请先核对对应程序的官方文档、IDL(接口描述文件)中对应指令的账户列表要求,确保账户顺序、isSigner/isWritable属性都和约定完全一致,避免交易执行报错。

你给出的示例代码中的keys数组,就是按照对应PROGRAM_ID下目标指令的账户顺序要求构造的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:39:03