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

Anchor部署至Solana Devnet失败:陷入交易发送/区块等待循环

问题诊断与解决方案

部署至Solana Devnet时陷入循环发送交易的情况,本质是交易持续失败触发客户端自动重试导致的。结合你的代码,主要存在以下问题及对应修复方案:

1. 程序ID不匹配

代码中declare_id!("2QmXMXyMAmZCE92Uqm2YhKgpqH3Teo6vZDNg7CRHYCK7")指定的程序ID,必须与部署时Anchor生成的程序ID完全一致。如果部署时通过anchor keys new生成了新密钥对,或anchor deploy自动分配的地址与代码中硬编码的不一致,会直接导致交易验证失败,陷入重试循环。

修复步骤:

  • 打开项目根目录的Anchor.toml文件,找到[programs.devnet]下counter_program对应的地址。
  • 将该地址替换到代码中的declare_id!宏内。
  • 重新编译部署:执行anchor build && anchor deploy。

2. Decrement函数上下文语义错误

你的decrement函数错误复用了Increment上下文结构体,虽然当前校验规则(mut counter + has_one = authority)逻辑上可行,但属于语义错误,可能引发后续维护问题,也不排除客户端处理时的潜在异常。

修正代码:
新增Decrement上下文结构体,并更新decrement函数的上下文绑定:

#[derive(Accounts)]
pub struct Decrement<'info> {
    #[account(mut, has_one = authority)]
    pub counter: Account<'info, Counter>,
    pub authority: Signer<'info>,
}

#[program]
pub mod counter_program {
    use super::*;

    // ... 保留其他函数不变

    pub fn decrement(ctx: Context<Decrement>) -> Result<()> {
        ctx.accounts.counter.count -= 1;
        Ok(())
    }
}

额外排查方向

若以上修复后问题仍存在,可执行以下操作定位原因:

  • 检查Devnet连接状态:运行solana cluster-info确认节点正常响应。
  • 查看交易错误日志:执行anchor logs获取部署过程的详细错误信息,根据错误代码(如0x0通用错误、0x1账户已存在等)针对性处理。
  • 确认部署账户余额:Devnet部署需要少量SOL支付手续费,运行solana balance查看余额,不足时用solana airdrop 2领取测试代币。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:15:35