Chapter 1: 在 Rust 中本地设置、构建和部署 Solana 程序

Rust 是编写 Solana 程序最常用的编程语言。本快速入门指南将演示如何快速设置、构建第一个基于 Rust 的 Solana 程序并将其部署到区块链。

您安装了 SOLANA CLI 吗?

本指南使用 Solana CLI 并假设您已设置本地开发环境。请在此处查看我们的本地开发快速入门指南以快速进行设置。

你将学到什么

  • 如何在本地安装Rust语言
  • 如何初始化新的 Solana Rust 程序
  • 如何使用 Rust 编写基本的 Solana 程序
  • 如何构建和部署 Rust 程序

安装 Rust 和 Cargo

为了能够编译基于 Rust 的 Solana 程序,请使用 Rustup 安装 Rust 语言和 Cargo(Rust 包管理器):

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

运行你的本地主机验证器

Solana CLI 附带内置的测试验证器。此命令行工具将允许您在计算机上运行完整的区块链集群。

solana-test-validator

PRO TIP:提示

在新的/单独的终端窗口中运行 Solana 测试验证器,该窗口将保持打开状态。此命令行程序必须保持运行,以便本地主机验证器保持在线并准备好执行操作。

配置您的 Solana CLI 以将本地主机验证器用于所有未来的终端命令和 Solana 程序部署:

solana config set --url localhost

使用 Cargo 创建一个新的 Rust 库

用 Rust 编写的 Solana 程序是编译为 BPF 字节码并以 .so 格式保存的库。

通过 Cargo 命令行初始化一个名为 hello_world 的新 Rust 库:

cargo init hello_world --lib
cd hello_world

solana-program 箱添加到新的 Rust 库中:

cargo add solana-program

PRO TIP:提示

强烈建议使您的 solana-program 和其他 Solana Rust 依赖项与您安装的 Solana CLI 版本保持一致。例如,如果您正在运行 Solana CLI 1.17.17 ,则可以运行

cargo add solana-program@1.17.17

这将确保您的 crate 仅使用 1.17.17 而没有其他内容。如果您遇到 Solana 依赖项的兼容性问题,请查看 Solana Stack Exchange

打开您的 Cargo.toml 文件并添加这些必需的 Rust 库配置设置,并根据需要更新您的项目名称:

[lib]
name = "hello_world"
crate-type = ["cdylib", "lib"]

创建您的第一个 Solana 程序

基于 Rust 的 Solana 程序的代码将位于您的 src/lib.rs 文件中。在 src/lib.rs 中,您将能够导入 Rust 包并定义您的逻辑。在您喜欢的编辑器中打开您的 src/lib.rs 文件。

lib.rs 顶部,导入 solana-program 包并将我们需要的项目放入本地命名空间中:

#![allow(unused)]
fn main() {
use solana_program::{
    account_info::AccountInfo,
    entrypoint,
    entrypoint::ProgramResult,
    pubkey::Pubkey,
    msg,
};
}

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

#![allow(unused)]
fn main() {
// 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(()) 优雅退出。

构建你的 Rust 程序

在终端窗口内,您可以通过在项目的根目录(即包含 Cargo.toml 文件的目录)中运行来构建 Solana Rust 程序

cargo build-bpf

PRO TIP:提示

每次构建 Solana 程序后,上述命令将输出已编译程序的 .so 文件的构建路径以及将用于程序地址的默认密钥文件。 cargo build-bpf 从当前安装的 solana CLI 工具安装工具链。如果遇到任何版本不兼容的情况,您可能需要升级这些工具。

部署您的 Solana 程序

使用 Solana CLI,您可以将程序部署到当前选择的集群:

solana program deploy ./target/deploy/hello_world.so

一旦您的 Solana 程序被部署(并且交易完成),上述命令将输出您程序的公共地址(也称为“程序 id”)。

# example output
Program Id: EFH95fWg49vkFNbAdw9vy75tM7sWZ2hQbTTUmuACGip3

恭喜!

您已使用 Rust 语言成功设置、构建和部署了 Solana 程序。

检查您的钱包余额!

部署后再次检查 Solana 钱包的余额。看看部署您的简单程序需要多少 SOL 成本?

下一步

请参阅下面的链接,了解有关编写基于 Rust 的 Solana 程序的更多信息:

Solana CookBook

入门

与 Solana 一起烹饪

Solana Cookbook 是一个开发人员资源,提供在 Solana 上构建应用程序的基本概念和参考。每个概念和参考都将重点关注 Solana 开发的特定方面,同时提供其他详细信息和使用示例。

贡献

Cookbook 的设计方式使新的 Solana 开发人员可以轻松做出贡献。即使您不知道如何做某事,为食谱做出贡献也是一种很好的学习方式!

在这里查看所有未解决的问题。贡献指南请参见此处。如果您发现食谱缺少建议,请添加问题。

如何阅读食谱

Solana 食谱分为不同的部分,每个部分都有不同的目标。

SectionDescription
核心概念有助于开发的 Solana 构建块
Guides关于不同开发工具的简短指南
References对常用代码片段的引用

Install

安装Web3.js

您可以使用一些库来开始在 Solana 上使用 javascript 或 typescript。

Web3.js

@solana/web3.js是一个库,拥有许多用于交互、发送交易和从区块链读取的基本 Solana 工具。

您可以使用以下命令进行安装:

npm install --save @solana/web3.js

SPL代币

@solana/spl-token 是一个库,其中包含与 SPL 令牌交互所需的许多 javascript/typescript 绑定。您可以使用此库铸造新的 SPL 代币、转移代币等。

您可以使用以下命令安装该库:

npm install --save @solana/spl-token

钱包适配器

有一组库可以帮助在 Solana 内引导钱包连接,称为钱包适配器。目前该包支持在 Svelte、Angular、Vue.js 和 React 中使用。钱包适配器可以快速启动您的 dApp 与 PhantomSolflare 等钱包的集成。

您可以使用以下命令安装该库:

npm install --save @solana/wallet-adapter-wallets \
    @solana/wallet-adapter-base

安装 Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

对于 Windows,请访问 Rust 安装站点

安装命令行界面

macOS 和 Linux

打开您最喜欢的终端应用程序。

替换LATEST_RELEASE为您所需的版本,并通过运行以下命令在您的计算机上安装最新的 Solana 版本:

sh -c "$(curl -sSfL https://release.solana.com/LATEST_RELEASE/install)"

您可以替换LATEST_RELEASE为与所需版本的软件版本相匹配的版本标签,或使用三个符号通道名称之一: stablebetaedge 。要查找最新版本,请在此处检查可用版本。

以下输出表明更新成功:

downloading LATEST_RELEASE installer
Configuration: /home/solana/.config/solana/install/config.yml
Active release directory: /home/solana/.local/share/solana/install/active_release
* Release version: LATEST_RELEASE
* Release URL: https://github.com/solana-labs/solana/releases/download/LATEST_RELEASE/solana-release-x86_64-unknown-linux-gnu.tar.bz2
Update successful

根据您的系统,安装程序消息结束时可能会提示您

Please update your PATH environment variable to include the solana programs:

如果您收到上述消息,请复制并粘贴其下方的推荐命令来更新 PATH

通过运行以下命令确认您已安装所需版本的 solana

solana --version

成功安装后, solana-install update 可用于随时轻松地将 Solana 软件更新到新版本。

下载二进制文件 (Linux)

或者,您可以从二进制文件安装,而不是使用 solana-install。

通过导航到 https://github.com/solana-labs/solana/releases/latest 下载二进制文件,下载 。打开一个新终端,将二进制文件从下载文件夹移动到根文件夹,然后提取存档:

mv Downloads/solana-release-x86_64-unknown-linux-gnu.tar.bz2 .
tar jxf solana-release-x86_64-unknown-linux-gnu.tar.bz2

接下来,您需要使 solana-cli 在所有终端中均可访问。为此,您需要将其添加到 PATH 中。使用以下命令打开终端配置文件

sudo nano /etc/profile

在所示的 Nano 编辑器底部,您将添加以下代码行

export PATH=/home/coderina/solana-release/bin:$PATH

按 CTRL + X,然后按 Y,然后按 Enter 保存文件。

重新启动计算机以使此更改生效。瞧,您现在可以在计算机上的任何终端中访问 solana-cli。

下载二进制文件 (macOS)

或者,您可以从二进制文件安装,而不是使用 solana-install。

导航到 https://github.com/solana-labs/solana/releases/latest 下载二进制文件,然后解压存档:

tar jxf solana-release-x86_64-apple-darwin.tar.bz2
cd solana-release/
export PATH=$PWD/bin:$PATH

Windows

以管理员身份打开命令提示符 ( cmd.exe )。

在 Windows 搜索栏中搜索命令提示符。当命令提示符应用程序出现时,右键单击并选择“以管理员身份打开”。如果弹出窗口提示您“是否允许此应用程序对您的设备进行更改?”,请单击“是”。

复制并粘贴以下命令,然后按 Enter 键将 Solana 安装程序下载到临时目录中:

curl https://release.solana.com/v1.9.16/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\solana-install-tmp\solana-install-init.exe --create-dirs

如果v1.9.16不是您想要的版本,请在此处查找最新版本。

复制并粘贴以下命令,然后按 Enter 键安装最新版本的 Solana。如果您看到系统弹出安全窗口,请选择允许程序运行。

C:\solana-install-tmp\solana-install-init.exe v1.9.16

要查找最新版本,请在此处)检查可用版本。

安装程序完成后,按 Enter 键。

关闭命令提示符窗口并以普通用户身份重新打开新的命令提示符窗口。

在搜索栏中搜索“命令提示符”,然后左键单击命令提示符应用程序图标(无需以管理员身份运行)。

通过输入以下内容确认您已安装所需版本的 solana :

solana --version

成功安装后, solana-install update 可用于随时轻松地将 Solana 软件更新到新版本。

下载二进制文件

或者,您可以从二进制文件安装,而不是使用 solana-install。

通过导航到 https://github.com/solana-labs/solana/releases/latest 下载二进制文件,下载 ,然后使用 WinZip 或类似工具解压存档。

打开命令提示符并导航到您提取二进制文件的目录并运行:

cd solana-release/
set PATH=%cd%/bin;%PATH%

从源代码构建

如果您无法使用预构建的二进制文件或者更喜欢自己从源代码构建它,请导航到 https://github.com/solana-labs/solana/releases/latest,然后下载存档。提取代码并使用以下命令构建二进制文件:

./scripts/cargo-install-all.sh .
export PATH=$PWD/bin:$PATH

然后,您可以运行以下命令以获得与预构建二进制文件相同的结果:

solana-install init

核心概念

账户

Solana 内的帐户用于存储状态。它们是在 Solana 上进行开发的重要构建块。

FACT 事实

情况说明书

  • 账户用于存储数据
  • 每个账户都有一个唯一的地址
  • 帐户的最大大小为 10MB(10 兆字节)
  • PDA 帐户的最大大小为 10KB(10 千字节)
  • PDA 帐户可用于代表程序签名
  • 帐户大小在创建时是固定的,但可以使用 realloc 进行调整
  • 账户数据存储是通过租金支付的
  • 默认帐户所有者是系统程序

深入

账户模型

Solana 上有 3 种账户:

  • 数据帐户存储数据
  • 程序帐户存储可执行程序
  • 本机帐户表示 Solana 上的本机程序,例如系统、权益和投票

数据帐户内有 2 种类型:

  • 系统拥有的帐户
  • PDA(程序派生地址)帐户

每个帐户都有一个地址(通常是公钥)和所有者(程序帐户的地址)。帐户存储的完整字段列表如下。

Programs

Transactions

Program Derived Address

Cross Program Invocations