Solana程序升级失败报错,求修复方案及日志查看方法
Solana程序升级报错修复与日志查看
问题概述
此前通过关闭并重新部署Solana程序进行更新,现改用程序升级方式,但执行以下命令时出现报错:
solana program upgrade target/deploy/program-keypair.json new_program.json owner.json -u "https://mainnet.helius-rpc.com/?api-key=7e466"
报错信息:
Error: Upgrading program failed: RPC response error -32002: Transaction simulation failed: Error processing Instruction 0: invalid program argument [3 log messages]
部署命令参考:
solana program deploy target/deploy/program.so -u "https://mainnet.helius-rpc.com/?api-key=7e466" --program-id new_program.json
测试程序代码:
Rust程序代码
use solana_program::{ account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey, msg, }; // declare and export the program's entrypoint entrypoint!(process_instruction); // program entrypoint's implementation pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], instruction_data: &[u8] ) -> ProgramResult { // log a message to the blockchain msg!("Hello, world!"); // msg!("Hello, world!"); Ok(()) }
Cargo.toml配置
[package] name = "hello_world" version = "0.1.0" edition = "2018" [lib] name = "hello_world" crate-type = ["cdylib", "lib"] [dependencies] solana-program = "1.18.2"
报错修复步骤
1. 修正升级命令参数顺序与格式
solana program upgrade的正确参数格式为:
solana program upgrade <编译后的程序SO文件> <程序ID密钥文件> --upgrade-authority <升级授权密钥文件> [其他参数]
你的错误在于将程序密钥文件(program-keypair.json)作为了待升级的二进制文件传入,正确命令应为:
solana program upgrade target/deploy/program.so new_program.json --upgrade-authority owner.json -u "https://mainnet.helius-rpc.com/?api-key=7e466"
2. 验证升级授权权限
确保owner.json对应的密钥是目标程序的升级授权者。执行以下命令查看程序的升级授权信息:
solana program show new_program.json -u "https://mainnet.helius-rpc.com/?api-key=7e466"
核对输出中的Upgrade authority字段与owner.json的公钥是否一致。若不一致,需使用正确的授权密钥,或先转移程序的升级授权。
3. 确认程序二进制兼容性
确保升级后的程序符合Solana升级规则:
- 程序入口点函数签名与旧版本完全一致(你的测试程序满足此要求)
- 未修改现有账户的结构体布局(测试程序未使用自定义账户,无此问题)
日志信息查看方法
1. 用--verbose参数输出详细日志
在升级命令末尾添加--verbose,执行后会直接输出交易模拟的详细日志:
solana program upgrade target/deploy/program.so new_program.json --upgrade-authority owner.json -u "https://mainnet.helius-rpc.com/?api-key=7e466" --verbose
2. 实时监听区块链日志
打开新终端执行以下命令,然后重新运行升级操作,即可实时获取日志:
solana logs -u "https://mainnet.helius-rpc.com/?api-key=7e466"
3. 通过交易哈希查询日志
若升级命令返回了交易哈希(即使失败),可通过以下命令查询该交易的完整日志:
solana transaction-status <交易哈希值> -u "https://mainnet.helius-rpc.com/?api-key=7e466" --verbose
内容的提问来源于stack exchange,提问作者Suliman Mukhtar
相关产品推荐
相关产品推荐

