运行anchor test报错,寻求技术排查协助
解决Anchor测试报错:This program may not be used for executing instructions
可能的原因及排查修复步骤
1. 测试环境Validator配置冲突
你的anchor.toml中[test.validator]设置了主网节点URL,这会导致本地测试Validator试图连接主网,和你克隆到本地的元数据程序产生权限冲突。本地测试应使用独立的本地链环境,而非主网节点。
修复方案:
修改anchor.toml的[test.validator]配置,移除url字段,让Validator启动本地独立链:
[test] startup_wait = 5000 shutdown_wait = 2000 [test.validator] bind_address = "127.0.0.1" ledger = ".anchor/test-ledger" rpc_port = 8899 [[test.validator.clone]] address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
2. 程序ID关联不匹配
检查以下三处程序ID是否完全一致:
Anchor.toml中[programs.localnet]下的程序IDprograms/sol_404/src/lib.rs里declare_id!宏指定的ID- 测试代码
tests/sol_404.ts调用createmint指令时传入的程序账户ID
3. 程序未正确部署为可执行账户
重新编译部署程序,确保本地测试链中你的程序账户被标记为可执行状态:
anchor build && anchor deploy
可通过以下命令验证账户状态:
solana account <你的程序ID>
查看输出的executable字段是否为true。
4. 指令调用了非程序账户
检查createmint.rs中的指令逻辑,确认所有被调用的程序账户都是合法的可执行程序,没有误将数据账户或其他非程序账户当作程序调用。
内容的提问来源于stack exchange,提问作者papi
相关产品推荐
相关产品推荐

