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

如何在Serum Anchor中签名通证交易?跨程序调用未授权报错如何解决

报错根因与修复方案

1. 核心错误:收款账户未标记可写权限

你定义的Interaction账户结构体中,收款账户to没有添加mut可写标记。SPL Token转账操作需要同时修改付款方、收款方两个Token账户的余额,二者都需要声明可写权限,你仅为付款账户from添加了mut标记,导致跨程序调用SPL Token程序时,因收款账户无写入权限触发该报错。
修复后的账户结构体代码如下:

#[derive(Accounts)]
pub struct Interaction<'info> {
    #[account(mut, has_one = owner)]
    from: CpiAccount<'info, TokenAccount>,
    // 新增mut标记,同时把检查逻辑放到constraint中符合Anchor规范
    #[account(mut, constraint = from.mint == to.mint)]
    to: CpiAccount<'info, TokenAccount>,
    #[account(signer)]
    owner: AccountInfo<'info>,
    token_program: AccountInfo<'info>,
}

2. 可选校验项

如果修改后仍报错,可逐一检查以下配置:

  • 确认god账户(付款Token账户)的owner字段与你传入的program.provider.wallet.publicKey完全一致,保证has_one = owner校验通过
  • 确认你传入的TOKEN_PROGRAM_ID为官方SPL Token程序地址TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA,不要填错程序ID
  • 确认转账金额INTERACTION_FEE没有超过god账户的可用余额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:36:02