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

使用Python发送Solana链交易及与Program ID交互问题咨询

Solana Python交易开发问题解答

1. 报错invalid transaction: index out of bounds解决方法

你出现该报错的核心原因是签名者传入不全:create_account指令要求付款账户(account)和新创建的账户(new_account)都对交易签名,你调用cli.send_transaction时仅传入了new_account,缺少account签名者,导致指令要求的签名索引和实际传入的签名列表不匹配,触发越界错误。
正确的调用写法为:

send_tx = cli.send_transaction(transaction, account, new_account)

2. 与Program ID交互的通用流程

所有和链上程序交互的交易都遵循以下逻辑:

  • 确认目标程序的ID,以及对应指令的规则:包括需要传入的账户列表(每个账户的可写权限、是否需要签名)、指令数据的序列化格式
  • 构造TransactionInstruction对象,核心参数如下:
    • program_id:目标程序的公钥
    • keys:按程序要求的顺序排列的AccountMeta列表
    • data:序列化后的指令参数字节数组
  • 将构造好的指令添加到Transaction实例中
  • 传入所有需要签名的账户,调用RPC接口发送签名后的交易

3. 交易Data相关问题解答

你在区块浏览器中看到的交易Data就是指令的data字段,是链上程序执行所需的参数序列化后的字节内容,必须随交易发送。

  • 插入位置:构造TransactionInstruction对象时,直接将序列化好的字节数组赋值给data参数即可
  • 是否随交易变化:每笔交易的Data都会随交易内容变化,不同的指令类型、不同的入参(比如购买不同的NFT、支付不同金额的SOL)都会生成完全不同的Data字节内容,Data是和当前交易的业务逻辑强绑定的。

4. 现有代码的逻辑说明

你当前编写的代码仅调用系统程序的create_account指令,创建了一个归目标NFT市场程序所有的独立账户,这只是NFT购买完整流程中的其中一个前置步骤,不是完整的购买交易。如果要实现NFT购买,你需要参考对应交易市场程序的接口文档,构造对应的买入指令,传入正确的账户列表和参数序列化后的Data。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:39:03