部署Solana程序时报custom program error: 0x1错误该如何解决?
部署表现差异的核心原因
- 首先是Solana CLI新旧部署命令的底层实现完全不同:
- 不带
program关键字的旧版solana deploy默认调用BPF Loader v2处理部署逻辑,新版solana program deploy默认使用BPF Loader v3作为部署执行器,两个加载器的账户权限校验、部署流程规则完全独立 - 你已经通过旧版命令在主网部署过对应程序ID的账户,该账户的所有权属于BPF Loader v2,此时用新版
solana program deploy尝试修改该账户数据时,BPF Loader v3校验账户所有权不匹配,就会抛出custom program error: 0x1的权限错误
- 不带
- 其次是devnet和主网的程序账户状态差异:
- 你在devnet使用
solana program deploy时是首次部署对应程序ID,链上没有历史账户记录,BPF Loader v3可以直接创建归属于自己的程序账户完成部署,因此不会报错
- 你在devnet使用
可行的解决方案
- 如果你需要继续使用新版
solana program deploy部署现有主网程序ID,需要在命令中追加--loader参数指定旧版部署使用的BPF Loader v2地址,匹配账户所属加载器即可完成部署 - 如果不需要保留现有程序ID,可以生成新的程序密钥对,直接用新版命令部署即可
- 也可以继续使用无
program关键字的旧版部署命令完成主网更新,和你之前的操作逻辑保持一致
内容的提问来源于stack exchange,提问作者Foobar
相关产品推荐
相关产品推荐

