在Solana部署智能合约时遇报错:账户非可升级程序或已被占用
Solana合约部署错误:Account is not an upgradeable program or already in use
针对这个错误,你可以按以下步骤排查解决:
检查目标账户状态
运行solana account <错误中的账户地址>查看账户详情:- 如果账户是普通非程序账户,说明你选错了部署目标,需要更换为专门的程序账户。
- 如果账户已被其他程序占用,可执行
solana close <账户地址>关闭该账户(账户内SOL会转回升级权威账户),之后重新部署。
确认升级able程序部署流程
- 首次部署升级able程序时,需确保使用正确的命令创建程序账户:
用Anchor开发的话,要保证solana program deploy --program-id <你的程序账户地址> --upgrade-authority <升级权威账户地址> <程序.so文件路径>Anchor.toml中upgrade_authority配置正确,且程序账户是为升级场景创建的。 - 升级现有程序时,必须指定之前创建的升级able程序账户,且升级权威账户和初始部署时一致。
- 首次部署升级able程序时,需确保使用正确的命令创建程序账户:
重新生成程序账户密钥
- 删除
target/deploy目录下对应的程序密钥文件(比如shii-keypair.json),重新运行部署命令,Anchor会自动生成新的合法程序账户。 - 也可手动生成新密钥对:
生成后重新执行部署。solana-keygen new -o target/deploy/shii-keypair.json
- 删除
验证网络与账户余额
- 用
solana cluster-info确认当前连接的是devnet(和部署命令中的网络一致)。 - 运行
solana balance <升级权威账户地址>检查账户是否有足够SOL支付部署手续费。
- 用
内容的提问来源于stack exchange,提问作者EtDude
相关产品推荐
相关产品推荐

