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

如何在现有Solana项目中强制生成新的Program ID?

如何在现有Solana项目中更换Program ID

不用重新创建Cargo项目,按以下步骤操作就能给现有程序换个新的Program ID:

  • 生成新的程序密钥对:执行命令 solana-keygen new -o new-program-keypair.json,会在当前目录生成新的密钥对文件。你可以用 solana-keygen pubkey new-program-keypair.json 提取新的公钥,这就是你的新Program ID。
  • 更新项目内的所有Program ID引用:
    • 打开 src/lib.rs,找到 declare_id! 宏,把里面的旧公钥替换成新生成的那个。
    • 编辑 Cargo.toml,找到 package.metadata.solana.program-id 字段,替换为新公钥。
    • 如果用了Anchor框架,还要修改 Anchor.toml 里的 programs.<你的程序名>.programId,同时更新客户端代码里所有用到旧Program ID的地方。
  • 重新构建并部署:用 cargo build-bpf(原生Solana程序)或 anchor build(Anchor程序)重新编译,然后执行 solana program deploy target/deploy/<你的程序文件名>.so --keypair new-program-keypair.json 完成部署。
  • 清理缓存(可选):删除项目的 target 目录,避免旧的Program ID缓存影响后续构建。
Program ID的生成与变更机制

生成逻辑

Program ID本质就是Solana Ed25519密钥对的公钥:

  • 当你用 solana-keygen new 生成密钥对时,工具会基于Ed25519椭圆曲线算法生成一对公私钥,其中公钥就可以作为Program ID使用。
  • 部署程序时,Solana链会将这个公钥与你上传的程序二进制文件绑定,只有持有对应私钥的账户才能对该程序进行升级或重新部署操作。
  • 本地开发时,你也可以用 solana-keygen grind 生成自定义的“vanity address”(易记的公钥),但生产环境建议用随机生成的密钥对,避免安全风险。

变更逻辑

Solana里不存在“直接修改现有Program ID”的操作,更换Program ID本质是部署一个全新的程序实例:

  • 旧的Program ID对应的程序会继续存在于链上,除非你持有对应私钥并执行关闭程序账户的操作(关闭会销毁账户内的SOL)。
  • 新的Program ID绑定的是你重新编译后的程序二进制,相当于链上的一个全新程序,客户端必须更新所有对旧ID的引用才能和新程序交互。

内容的提问来源于stack exchange,提问作者jord

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:42:41