LogoAnchor 中文文档

Solana Playground

了解如何直接在浏览器中使用 Anchor 框架构建您的第一个 Solana 程序。

在本节中,我们将使用 Anchor 框架构建、部署和测试一个简单的 Solana 程序。到最后,你将把你的第一个程序部署到 Solana 区块链上!

Solana Playground (Solpg) 是一个基于浏览器的开发环境,允许你快速开发、部署和测试 Solana 程序!

开始使用

在您的网页浏览器中打开一个新标签页并导航至 https://beta.solpg.io/。

创建 Playground 钱包

如果你是 Solana Playground 的新手,第一步是创建你的 Playground 钱包。这个钱包将允许你直接在浏览器中与 Solana 网络进行交互。

第 1 步. 连接到 Playground

点击屏幕左下角的“未连接”按钮。

未连接

第 2 步. 创建您的钱包

你将看到一个保存钱包密钥对的选项。可选地,保存你的钱包密钥对以备份,然后点击“继续”。

创建 Playground 钱包

你现在应该看到你钱包的地址、SOL 余额以及底部连接的集群(默认为 devnet)。

已连接

你的 Playground 钱包将保存在浏览器的本地存储中。清除浏览器缓存将删除你保存的钱包。

一些你可能会觉得有用的定义:

  • 钱包地址:一个公钥,作为你在 Solana 区块链上的唯一身份。就像使用电子邮件地址接收电子邮件一样,你的钱包地址用于接收 SOL。
  • 连接集群:一组 Solana 节点(运行 Solana 验证者客户端的计算机)。Devnet 是用于开发者测试的集群。

获取 Devnet SOL

在我们开始构建之前,我们首先需要一些 devnet SOL。

从开发者的角度来看,SOL 主要用于两个用途:

  • 在网络上创建账户以存储数据或部署程序
  • 在与网络交互时支付交易费用

以下是为你的钱包提供 devnet SOL 的两种方法:

选项 1:使用 Playground 终端

为你的 Playground 钱包提供 devnet SOL。在 Playground 终端中运行:

solana airdrop 5

选项 2:使用 Devnet 软件发放器

如果 airdrop 命令不工作(由于速率限制或错误),你可以使用 Web Faucet

  • 输入你的钱包地址(在 Playground 窗口的底部找到)并选择一个金额
  • 点击“确认发放”以接收你的 devnet SOL

水龙头发放

创建 Anchor 项目

首先,在新的浏览器标签页中打开 https://beta.solpg.io。

  • 点击左侧面板上的“创建新项目”按钮。

  • 输入项目名称,选择 Anchor 作为框架,然后点击“创建”按钮。

新项目

你将看到创建的新项目,其程序代码位于 src/lib.rs 文件中。

use anchor_lang::prelude::*;
 
// 这是你程序的公钥,当你构建项目时,它会自动更新。
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); // 消息将在交易日志中显示
        Ok(())
    }
}
 
#[derive(Accounts)]
pub struct Initialize<'info> {
    // 我们必须指定空间以初始化账户。
    // 前 8 个字节是默认的账户离散器,
    // 后 8 个字节来自 NewAccount.data,其类型为 u64。
    // (u64 = 64 位无符号整数 = 8 字节)
    #[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
}

构建和部署程序

要构建程序,只需在终端中运行 build

build

注意 declare_id!() 中的地址已被更新。这是你程序的链上地址。

程序构建完成后,在终端中运行 deploy 将程序部署到网络(默认为 devnet)。为了部署程序,必须为存储程序的链上账户分配 SOL。

在部署之前,请确保你有足够的 SOL。你可以通过在 Playground 终端中运行 solana airdrop 5 或使用 Web Faucet 来获取 devnet SOL。

deploy

另外,你也可以使用左侧面板上的 BuildDeploy 按钮。

构建和部署

程序部署后,你现在可以调用其指令。

测试程序

初始代码中包含一个测试文件,位于 tests/anchor.test.ts 中。该文件演示了如何从客户端调用初始程序上的 initialize 指令。

// 无需导入:web3、anchor、pg 等在全局中可用
 
describe("测试", () => {
  it("initialize", async () => {
    // 为新账户生成密钥对
    const newAccountKp = new web3.Keypair();
 
    // 发送交易
    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(`使用 'solana confirm -v ${txHash}' 查看日志`);
 
    // 确认交易
    await pg.connection.confirmTransaction(txHash);
 
    // 获取创建的账户
    const newAccount = await pg.program.account.newAccount.fetch(
      newAccountKp.publicKey,
    );
 
    console.log("链上数据为:", newAccount.data.toString());
 
    // 检查链上的数据是否等于本地的 'data'
    assert(data.eq(newAccount.data));
  });
});

要在程序部署后运行测试文件,请在终端中运行 test

test

你应该会看到一个输出,指示测试成功通过。

你也可以使用左侧面板上的 Test 按钮。

运行测试

然后你可以通过运行 solana confirm -v 命令并指定测试输出中的事务哈希(签名)来查看交易日志:

solana confirm -v [TxHash]

例如:

solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

另外,你也可以通过搜索事务签名(哈希)在 SolanaFMSolana Explorer 中查看交易详情。

请记得在你使用的 Explorer 上更新集群(网络)连接,以匹配 Solana Playground。Solana Playground 的默认集群为 devnet。

关闭程序

最后,分配给链上程序的 SOL 可以通过关闭程序完全回收。

你可以通过运行以下命令并指定在 declare_id!() 中找到的程序地址来关闭程序:

solana program close [ProgramID]

例如:

solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

恭喜你!你刚刚使用 Anchor 框架构建和部署了你的第一个 Solana 程序!

On this page

在GitHub上编辑