Solana 开发入门(仅使用浏览器)

在这个“hello world”快速入门指南中,我们将使用 Solana Playground,一个基于浏览器的 IDE 来开发和部署我 们的 Solana 程序。 使用它,你不需要在电脑上安装任何软件。 只需在你选择的浏览 器中打开 Solana Playground,你就可以开始编写和部署 Solana 程序。

你将学到什么 #

  • 如何开始使用 Solana Playground
  • 如何在 Playground 上创建一个 Solana 钱包
  • 如何用 Rust 编写一个基本的 Solana 程序
  • 如何构建和部署一个 Solana Rust 程序
  • 如何使用 JavaScript 与链上程序交互

使用 Solana Playground #

Solana Playground是一个基于浏览器的应用程序,可以让你编 写、构建和部署链上 Solana 程序。 所有操作都在浏览器中完成, 无需安装。

这是一个很好的开发资源,特别适合在 Windows 上开始 Solana 开发。

导入我们的示例项目 #

在浏览器的新标签页中,打开我们的示 例Solana Playground 上的Hello World”项目

接下来,通过点击“Import”图标并命名你的项目为hello_world,将项目导入到你的 本地工作区。

Info

如果你将程序导入你的 Solana Playground,那么你将无法对代码进行更 改。但你仍然可以构建和部署代码到 Solana 集群。 但你仍然可以构建和部署 代码到 Solana 集群。

创建一个 Playground 钱包 #

通常在本地开发中,你需 要创建一个文件系统钱包以便与 Solana CLI 一起使用。 但在 Solana Playground 中,你 只需点击几个按钮即可创建一个基于浏览器的钱包。

Info

你的 Playground Wallet 将保存在浏览器的本地存储中。清除浏览器缓存将删除你保 存的钱包。 当创建新钱包时,你将有机会保存钱包密钥对文件的本地副本。

点击屏幕左下角的红色状态指示按钮,(可选)将钱包的密钥对文件保存到你的电脑以备 份,然后点击“Continue”。

创建 Playground Wallet 后,你会注意到窗口底部现在显示你的钱包地址、你的 SOL 余额 以及你连接的 Solana 集群(通常默认/推荐的是 Devnet,但“localhost” 测试验证器也是可以接受 的)。

创建一个 Solana 程序 #

你的基于 Rust 的 Solana 程序的代码将位于src/lib.rs文件中。在src/lib.rs中,你 可以导入 Rust crates 并定义你的逻辑。 在 Solana Playground 中打开你 的src/lib.rs文件。

导入solana_programcrate #

lib.rs的顶部,我们导入solana-programcrate 并将所需的项目引入本地命名空间:

use solana_program::{
    account_info::AccountInfo,
    entrypoint,
    entrypoint::ProgramResult,
    pubkey::Pubkey,
    msg,
};

编写你的程序逻辑 #

每个 Solana 程序必须定义一个entrypoint,告诉 Solana 运行时从哪里开始执行你的链 上代码。 你的程序的 entrypoint 应该提供一个名为process_instruction的公共函数:

// 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!");
 
    // gracefully exit the program
    Ok(())
}

每个链上程序都应返回Okresult 枚举,值 为()。 这告诉 Solana 运行时你的程序成功执行且没有错误。

我们上面的程序将简单地将“Hello, world!” 的日志消息记录到区块链集群,然后优雅地 以Ok(())退出。

构建你的程序 #

在左侧边栏中,选择“Build & Deploy”标签。 接下来,点击“Build”按钮。

如果你查看 Playground 的终端,你应该会看到你的 Solana 程序开始编译。 完成后,你 会看到一条成功消息。

Info

当你的程序编译时,你可能会收到未使用变量的 警告。 不用担心,这些警告不会影响 你的构建。 它们是由于我们非常简单的程序没有使用process_instruction函数中声明 的所有变量。

部署你的程序 #

你可以点击“Deploy”按钮将你的第一个程序部署到 Solana 区块链。 具体到你选择的集群 (例如 Devnet、Testnet 等)。

每次部署后,你会看到你的 Playground Wallet 余额发生变化。 默认情况下,Solana Playground 会自动请求 SOL 空投,以确保你的钱包有足够的 SOL 来支付部署费用。

Info

注意:如果你需要更多 SOL,你可以通过在 playground 终端中输入空投命令来空投更 多:

solana airdrop 2

查找你的程序 ID #

当使用 web3.js另一个 Solana 程序执行程序时,你需要提供program id(即 程序的公共地址)。

在 Solana Playground 的 Build & Deploy 侧边栏中,你可以在 Program Credentials 下拉菜单中找到你的program id

恭喜! #

你已经成功地在浏览器中使用 Rust 语言设置、构建和部署了一个 Solana 程序。 接下 来,我们将演示如何与链上程序交互。

与链上程序交互 #

一旦你成功地将 Solana 程序部署到区块链,你将希望能够与该程序交互。

像大多数创建 dApps 和网站的开发者一样,我们将使用 JavaScript 与我们的链上程序交 互。 具体来说,我们将使用开源 NPM 包 @solana/web3.js来帮助 我们的客户端应用程序。

Info

这个 web3.js 包是 JSON RPC API 之上的一个抽象层,减少了重写常 见样板代码的需求,有助于简化你的客户端应用程序代码。

初始化客户端 #

我们将使用 Solana Playground 进行客户端生成。 通过在 playground 终端中运 行run命令创建一个客户端文件夹:

run

我们已经创建了client文件夹和一个默认的client.ts。这是我们将在接下来 的hello world程序中工作的地方。 这是我们将在接下来的hello world程序中工作的 地方。

Playground globals #

在 playground 中,有许多全局可用的工具供我们使用,无需安装或设置任何东西。 对于 我的hello world程序,最重要的是web3用于@solana/web3.jspg用于 Solana Playground 工具。

Info

你可以通过在编辑器中按CTRL+SPACE(或在 macOS 上按CMD+SPACE)查看所有可用的 全局变量。

调用程序 #

要执行你的链上程序,你必须向其发送一个交易。 提交 到 Solana 区块链的每笔交易都包含一系列指令(以及指令将与之交互的程序)。

在这里,我们创建一个新交易并向其中添加一个instruction

// create an empty transaction
const transaction = new web3.Transaction();
 
// add a hello world program instruction to the transaction
transaction.add(
  new web3.TransactionInstruction({
    keys: [],
    programId: new web3.PublicKey(pg.PROGRAM_ID),
  }),
);

每个instruction必须包含操作中涉及的所有密钥和我们要执行的程序 ID。 在这个例子 中,keys是空的,因为我们的程序只记录hello world,不需要任何账户。

创建交易后,我们可以将其提交到集群:

// send the transaction to the Solana cluster
console.log("Sending transaction...");
const txHash = await web3.sendAndConfirmTransaction(
  pg.connection,
  transaction,
  [pg.wallet.keypair],
);
console.log("Transaction sent with hash:", txHash);
Info

签名者数组中的第一个签名者默认是交易费用支付者。我们使用我们的密钥 对pg.wallet.keypair进行签名。

运行应用程序 #

编写客户端应用程序后,你可以通过相同的run命令运行代码。

一旦你的应用程序完成,你将看到类似以下的输出:

Running client...
  client.ts:
    My address: GkxZRRNPfaUfL9XdYVfKF3rWjMcj5md6b6mpRoWpURwP
    My balance: 5.7254472 SOL
    Sending transaction...
    Transaction sent with hash: 2Ra7D9JoqeNsax9HmNq6MB4qWtKPGcLwoqQ27mPYsPFh3h8wignvKB2mWZVvdzCyTnp7CEZhfg2cEpbavib9mCcq

获取交易日志 #

我们将在 playground 中直接使用solana-cli获取有关任何交易的信息:

solana confirm -v <TRANSACTION_HASH>

<TRANSACTION_HASH>替换为你从调用hello world程序中收到的哈希。

你应该在输出的 Log Messages 部分看到Hello, world!。 🎉

恭喜!!! #

你现在已经为你的链上程序编写了一个客户端应用程序。 你现在是一名 Solana 开发者 了!

PS:尝试更新你的程序消息,然后重新构建、重新部署和重新执行你的程序。

下一步 #

请参阅以下链接,了解更多关于编写 Solana 程序和设置本地开发环境的信息: