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

Solana Anchor测试报错:Transaction simulation failed 求助

问题分析与解决方案

核心问题:账户空间分配错误

你遇到的Program failed to complete错误,根源是初始化Article账户时分配的空间计算错误,导致程序无法完成账户数据写入。

在Anchor框架中,账户空间需要精确计算:

  • 每个Anchor账户都有8字节的discriminator(用于标识账户类型)
  • String类型的存储结构是:4字节的长度前缀 + 实际字符串的字节数

你的代码中space = 8 + 32 + 10000是错误的——32字节无对应依据,正确计算应为:8(discriminator) + 4(字符串长度前缀) + 10000(预留内容空间)= 10012。

修复步骤

1. 修正lib.rs中的账户空间配置

修改Initialize结构体中article账户的space参数:

#[derive(Accounts)]
pub struct Initialize<'info> {
  #[account(
        init,
        payer = authority,
        space = 8 + 4 + 10000 // 修正后的空间计算
    )]
  pub article: Account<'info, Article>,
  #[account(mut)]
  pub authority: Signer<'info>,
  pub system_program: Program<'info, System>,
}

2. (可选)启用Anchor调试日志排查后续问题

如果仍有错误,可通过环境变量开启调试日志,获取更详细的错误信息:

export ANCHOR_DEBUG=1
anchor test

这会输出程序执行过程中的具体日志,帮助定位深层问题。

3. 验证测试代码逻辑

你的测试代码中,deployerKeypair作为新创建的Article账户密钥对,已加入签名列表,这部分逻辑正确,无需修改。

额外建议

对于包含动态类型(如String、Vec)的Anchor账户,推荐使用Anchor提供的自动空间计算能力,或调用anchor_lang::solana_program::borsh::get_packed_len精确计算空间,避免手动计算出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:26