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

是否可通过Solana SDK部署Solana程序?

如何通过Solana SDK部署可升级BPF程序

完全可以通过Solana SDK部署程序——毕竟程序本身就是一种可执行账户,其所有者为BPF Upgradeable Loader程序,Solana SDK(比如JS/TS的@solana/web3.js)提供了所有底层链交互能力,能替代CLI完成部署流程。

核心操作思路

Solana CLI的部署逻辑本质就是调用BPF Upgradeable Loader的指令,你可以用SDK直接复现这些操作,步骤如下:

  • 读取编译好的BPF程序字节码(.so文件)为二进制数组
  • 连接目标Solana集群(主网、测试网或本地节点)
  • 创建/复用升级程序账户与数据账户(首次部署需创建两者)
  • 构建并发送包含部署指令的交易

简化代码示例(TypeScript)

import { Connection, Keypair, Transaction, sendAndConfirmTransaction, BPFUpgradeableLoaderProgram } from '@solana/web3.js';
import fs from 'fs';

// 读取编译后的程序字节码
const programBuffer = new Uint8Array(fs.readFileSync('./target/deploy/your_program.so'));

// 初始化连接与付费账户
const connection = new Connection('https://api.devnet.solana.com');
const payer = Keypair.fromSecretKey(Uint8Array.from([/* 替换为你的payer私钥数组 */]));

// 生成程序账户与程序数据账户的密钥对(首次部署用)
const programKeypair = Keypair.generate();
const programDataKeypair = Keypair.generate();

// 构建部署交易:先创建可升级程序账户,再写入字节码
const deployTx = new Transaction().add(
  // 创建可升级程序账户
  BPFUpgradeableLoaderProgram.createUpgradeableProgram(
    payer.publicKey,
    programKeypair.publicKey,
    programDataKeypair.publicKey,
    BPFUpgradeableLoaderProgram.programId,
    programBuffer.length,
  ),
  // 写入程序字节码到数据账户
  BPFUpgradeableLoaderProgram.write(
    programDataKeypair.publicKey,
    payer.publicKey,
    0,
    programBuffer,
  )
);

// 发送并确认交易
const txSignature = await sendAndConfirmTransaction(
  connection,
  deployTx,
  [payer, programKeypair, programDataKeypair]
);

console.log(`部署完成,交易签名:${txSignature}`);

关键注意事项

  • 确保payer账户有足够SOL支付账户创建和交易手续费
  • 升级已有程序时,无需重新创建账户,只需调用write上传新字节码,再调用upgrade指令完成升级
  • Anchor框架的部署逻辑底层也是基于Solana SDK,如果你需要更灵活的控制,直接使用@solana/web3.js即可实现全流程自动化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:45