Solana/更多开发者工具/Anchor 环境搭建

在本书的中篇内容里, 我们将第一个想法带上 solana, 我们编写了一个可以存储任意数据的简单数据存储程序. 我们使用原生 rust 编写了这个程序, 但过程中需要我们直面账户校验, 序列化和客户端打包这些杂事, 往往会消磨兴致. Anchor 出场的意义, 正是把这些粗重活接过去, 让你把精力放在要实现什么, 而不是怎么让代码"跑"起来.

Anchor 是一种为 solana 区块链设计的开发框架, 用于快速, 安全地构建和部署链上程序. 它通过提供工具和抽象来简化开发流程, 包括自动处理账户和指令数据的序列化, 内置安全检查, 生成客户端库以及提供测试工具.

我们在这里用 Anchor 重写那个数据存储程序, 让你体会它的魔力. 我们不会在这里做说明书式的工具介绍, 如果您需要它, 请参考官方文档. 我们只会准备一张干净的工作台来组装代码, 让你专注于实现核心功能. 你会看到 anchor 的核心心智模型, 完成一次从零到一的本地运行, 并学会辨认路上的几个小坑.

环境搭建

如果你的机器还没有这些工具, 请先安好: rust, solana cli, node.js 与 yarn, 以及 anchor 本体. 下面的命令可以直接复用; 若你已有其一, 可跳过相应小节.

安装 anchor(使用 avm 管理版本):

$ cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
$ avm install latest
$ avm use latest
$ anchor --version

准备 solana cli 与本地链:

$  sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
$ solana --version
$ solana config set --url http://127.0.0.1:8899
$ solana-test-validator -r

准备 node.js 与 yarn, 因为 anchor 的测试与客户端默认使用 ts:

$ npm install -g yarn

本章节的配套代码在这里. 如果你正在阅读该配套仓库, Anchor.toml 已预设本地网络与钱包路径, tests/ 里也放好了 ts 的测试脚本. 进入仓库根目录, 装上依赖即可:

$ yarn install

小提示: 第一次跑本地链时, 别忘了给默认钱包要点启动资金.

$ solana airdrop 2

创建项目

我们先使用 anchor 搭一个最小可用的程序, 看看它长什么样.

$ anchor init pxsol-ss-anchor
$ cd pxsol-ss-anchor

脚手架会生成一套目录:

  • programs/<name>/src/lib.rs 是合约入口. 你会看到 #[program] 模块和一两个演示方法.
  • Anchor.toml 是配置中心, 记录 program id, 要连接的集群, 测试脚本等.
  • tests/ 放着 ts 测试, 等会儿它会代表客户端来"按按钮".

先试着构建它:

$ anchor build

如果你还没启动本地链, 开一个终端让验证器常驻:

$ solana-test-validator -r

接着跑一次测试:

$ anchor test --skip-local-validator

这条命令做了三件事:

  1. 构建 rust 程序
  2. 把它部署到本地链
  3. 运行 tests/ 下的 ts 测试用例

如何开始

当我们开始实现真正的业务, 可以沿着这条最小路径前进:

  1. programs/<name>/src/lib.rs 里新增一个方法, 先写出期望的 accounts 结构与约束
  2. tests/ 写一个最小的调用脚本, 跑 anchor test 观察失败信息
  3. 循环填写逻辑代码, 补齐账户, 空间与权限, 并时刻调整测试脚本, 直到测试通过
  4. 最后接入前端或后端服务

当你跨过这些门槛, anchor 就会像一把顺手的扳手. 你不用每天都去记 torx 和内六角的尺寸, 只管拧紧你真正关心的那颗螺丝.