m mybian.xyz
Solana程序实战教程

Solana程序实战教程:完整构建一个链上计数器项目

通过完整构建一个Solana链上计数器项目,串联账户、指令、PDA、测试与部署的实战要点,并结合必安等平台的SOL生态使用思路。

m
mybian.xyz 编辑部
1745 字· 约 4 分钟阅读· 2026-05-24T06:12:20.771984+00:00
Solana程序实战教程 - Solana程序实战教程:完整构建一个链上计数器项目
关于「Solana程序实战教程」的视觉延伸

Solana程序实战教程:完整构建一个链上计数器项目

纸上得来终觉浅,绝知此事要躬行。本文以一个尽量简单的「链上计数器」项目为例,把 Solana 程序的全流程串起来:账户设计、指令编写、PDA 派生、测试、部署、前端调用。读完之后你可以把这套套路迁移到任何业务上。和你在 必安BN交易所 上看到的复杂 DeFi 应用相比,计数器只是「最小可行示例」,但麻雀虽小五脏俱全。

一、需求与账户设计

需求:每个用户拥有自己的计数器;可调用「increment」指令把计数加一;可调用「reset」指令清零。

账户设计:用「[用户钱包地址, counter] 」作为种子派生 PDA,每个用户得到唯一一个 Counter 账户。账户里只存一个 u64 字段 count。

这种「按用户派生账户」的模式覆盖了 Solana 程序最常见的设计场景,例如个人余额、个人持仓、个人 NFT 池等。

二、项目骨架

用 anchor init counter 生成项目。修改 Cargo.toml 中的 anchor-lang 版本到最新稳定版。Anchor.toml 里写好 RPC URL(先指向 localnet),保留默认密钥。

这一步看似无关紧要,但「环境变量与默认配置」往往是新手卡顿的源头。建议把每个修改点写到 README 里,方便日后回顾。

三、写指令:initialize

第一条指令是 initialize,用于第一次创建用户的计数器账户。在 Anchor 框架里你只需要:

这一条指令完成后,链上就多了一个由你的程序拥有的账户,余额为系统计算的租金豁免值。这种把「初始化」与「业务调用」分离的做法,和 B安交易所 把「开户」与「下单」分离是同一种工程美学。

四、写指令:increment 与 reset

increment 指令很简单:从账户读出 count、加一、写回。注意要在账户约束里声明 mut,否则 Anchor 不会让你修改账户数据。

reset 指令稍微复杂:需要额外校验调用者就是账户的所有者,避免被别人重置自己的计数。Anchor 通过 has_one 或自定义 constraint 都可以做到这一点。

五、单元测试

在 tests/counter.ts 里写四个用例:

  1. 用户 A 初始化自己的计数器,期望 count = 0。
  2. 用户 A 连续 3 次 increment,期望 count = 3。
  3. 用户 B 试图 reset 用户 A 的计数器,期望失败。
  4. 用户 A 自己 reset,期望 count = 0。

这套用例覆盖了「初始化、写入、权限失败、自身重置」四种典型场景,是后续任何业务的最小测试集模板。

六、本地测试与调试

执行 anchor test,框架会自动启动 solana-test-validator、部署程序、运行测试。任何一步失败都会给出详细日志。建议你故意修改代码引入错误,看看错误日志的样貌,等真正出问题时不会慌张。

七、部署到 Devnet

切换 Anchor.toml 的 cluster 为 devnet,运行 anchor deploy。第一次部署需要支付一些 SOL 作为程序账户的租金。如果余额不足,用 solana airdrop 命令补几个 SOL。

八、写一个最小前端

用 React + @coral-xyz/anchor 客户端库写一个最小前端:连接 Phantom 钱包、读取当前计数、调用 increment。即便只是几十行 JSX,你也能在浏览器里点击按钮看到链上数字变化,这种实时反馈非常有成就感。

九、上主网前的检查清单

如果你计划把这个程序部署到主网,请先做:审计权限边界、考虑账户碰撞、估算长期租金成本、决定 upgradable 程序的升级权限归谁、为前端配置可信 RPC(建议自托管或者使用付费服务而不是依赖单一公共节点)。

十、扩展想象

计数器看似无用,但它的结构可以扩展为任何业务:用户得分、用户余额、用户库存。等你能用一个周末把这套流程跑通,再去看 BN官网 上 Solana 生态的 DeFi 与 NFT 项目,你就会明白:那些看似复杂的应用,本质都是把这种「按用户派生账户 + 多条指令」的模式重复使用。

动手做一遍,胜过看十遍教程。希望这个计数器项目能成为你 Solana 之旅的「Hello World 升级版」,让你在 Binance 等中心化产品之外,建立起自己对链上世界的真切手感。