在这个“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
,将项目导入到你的
本地工作区。
如果你不将程序导入你的 Solana Playground,那么你将无法对代码进行更 改。但你仍然可以构建和部署代码到 Solana 集群。 但你仍然可以构建和部署 代码到 Solana 集群。
创建一个 Playground 钱包 #
通常在本地开发中,你需 要创建一个文件系统钱包以便与 Solana CLI 一起使用。 但在 Solana Playground 中,你 只需点击几个按钮即可创建一个基于浏览器的钱包。
你的 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_program
crate #
在lib.rs
的顶部,我们导入solana-program
crate 并将所需的项目引入本地命名空间:
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(())
}
每个链上程序都应返回Ok
result 枚举,值
为()
。 这告诉 Solana 运行时你的程序成功执行且没有错误。
我们上面的程序将简单地将“Hello, world!”
的日志消息记录到区块链集群,然后优雅地
以Ok(())
退出。
构建你的程序 #
在左侧边栏中,选择“Build & Deploy”标签。 接下来,点击“Build”按钮。
如果你查看 Playground 的终端,你应该会看到你的 Solana 程序开始编译。 完成后,你 会看到一条成功消息。
当你的程序编译时,你可能会收到未使用变量的 警告。 不用担心,这些警告不会影响
你的构建。 它们是由于我们非常简单的程序没有使用process_instruction
函数中声明
的所有变量。
部署你的程序 #
你可以点击“Deploy”按钮将你的第一个程序部署到 Solana 区块链。 具体到你选择的集群 (例如 Devnet、Testnet 等)。
每次部署后,你会看到你的 Playground Wallet 余额发生变化。 默认情况下,Solana Playground 会自动请求 SOL 空投,以确保你的钱包有足够的 SOL 来支付部署费用。
注意:如果你需要更多 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
来帮助
我们的客户端应用程序。
这个 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.js
和pg
用于 Solana
Playground 工具。
你可以通过在编辑器中按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);
签名者数组中的第一个签名者默认是交易费用支付者。我们使用我们的密钥
对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 程序和设置本地开发环境的信息: