部署您的第一个 Solana 程序

使用 Anchor 框架将您的第一个 程序 构建、部署并测试到 Solana 区块链。本指南将帮助您熟悉 Solana Playground,并为您使用程序派生地址 (PDA) 和跨程序调用 (CPI) 做好准备。

创建 Anchor 项目

  1. 在您的网页浏览器中打开 Solana Playground
  2. 在左侧面板中,点击 + 创建新项目
  3. 输入一个 项目名称
  4. 选择 Anchor (Rust) 作为框架
  5. 点击 创建

新项目新项目

src/lib.rs 源文件将打开。它包含一个名为 Initialize 的结构体,该结构体执行以下操作:

  • 接收一个名为 data: u64 的必需参数
  • 创建一个新账户
  • data: u64 的值保存到新账户中
  • 将一条消息添加到交易的程序日志中
lib.rs
use anchor_lang::prelude::*;
// This is your program's public key and it will update
// automatically when you build the project.
declare_id!("11111111111111111111111111111111");
#[program]
mod hello_anchor {
use super::*;
pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {
ctx.accounts.new_account.data = data;
msg!("Changed data to: {}!", data); // Message will show up in the tx logs
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
// We must specify the space in order to initialize an account.
// First 8 bytes are default account discriminator,
// next 8 bytes come from NewAccount.data being type u64.
// (u64 = 64 bits unsigned integer = 8 bytes)
#[account(
init,
payer = signer,
space = 8 + 8
)]
pub new_account: Account<'info, NewAccount>,
#[account(mut)]
pub signer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct NewAccount {
data: u64
}

构建并部署程序

  1. 编译程序代码
Terminal
$
build

您的 程序 ID,定义在 declare_id!() 中,现在将被更新。

  1. 向您的钱包添加 SOL(可选)

部署程序需要在程序的链上账户中有 SOL。如果需要,在继续第 3 步之前,向您的钱包添加 SOL

  1. 将程序部署到网络
Terminal
$
deploy

部署后,程序的字节码将存储在一个可执行的程序账户中。

注意: 如果您愿意,可以使用左侧面板中的 BuildDeploy 按钮,如下图所示。

构建和部署构建和部署

测试程序

  1. 打开名为 tests/anchor.test.ts 的测试文件。此文件演示了如何从客户端调用程序的 initialize 结构体。
anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const data = new BN(42);
const txHash = await pg.program.methods
.initialize(data)
.accounts({
newAccount: newAccountKp.publicKey,
signer: pg.wallet.publicKey,
systemProgram: web3.SystemProgram.programId
})
.signers([newAccountKp])
.rpc();
console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);
// Confirm transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const newAccount = await pg.program.account.newAccount.fetch(
newAccountKp.publicKey
);
console.log("On-chain data is:", newAccount.data.toString());
// Check whether the data on-chain is equal to local 'data'
assert(data.eq(newAccount.data));
});
});
  1. 运行测试文件
Terminal
$
test
  1. 存储输出中包含的交易哈希 (TxHash)

(在上面的示例中,交易哈希为 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc。)

注意: 如果需要,可以使用左侧面板上的 Test 按钮。

运行测试运行测试

  1. 运行 solana confirm -v [TxHash] 查看交易日志
Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
  1. 查看交易详情

打开 SolanaFMSolana Explorer,并搜索交易哈希。

Solana Explorer: 将网络集群设置为 devnet,以匹配 Solana Playground 的网络。

关闭程序

关闭程序以回收分配给链上程序的 SOL。为此,请运行 solana program close [ProgramID],使用存储在 declare_id!() 宏中的程序地址。

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

程序 只能 由具有升级权限的账户关闭或更新。当程序部署时,您的 Playground 钱包会自动成为每个程序的升级权限账户。如果升级权限被撤销,程序将变为不可更改。

恭喜!您已使用 Anchor 构建并部署了您的第一个 Solana 程序。

下一步

现在您已经部署了您的第一个程序,您可以开始探索程序派生地址跨程序调用

Is this page helpful?

Table of Contents

Edit Page