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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:32:25