Rust 已经成为 Solana、NEAR、CosmWasm 等主流公链的合约首选语言。这篇 Rust 合约开发教程瞄准的是有一定 Rust 基础、但从未写过链上合约的工程师,目标是让你在一周内完成从环境搭建到主网部署的整条流水线,并能与BN交易所上市项目的代码风格对齐。
一、工具链与项目脚手架
第一步装 Rust:curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh,安装完成后切到 1.75 以上稳定版。然后装目标链的命令行工具,比如 Solana CLI 或 NEAR CLI。最后再装项目脚手架,Solana 用 cargo install anchor-cli,NEAR 用 cargo install cargo-near。
新建项目的标准做法是 anchor init my-app 或 cargo near new my-app,生成的目录里 Cargo.toml 会带 crate-type = ["cdylib", "lib"],这是 BPF/Wasm 编译目标的关键。改完依赖立即跑一次 anchor build 或 cargo near build,确认工具链正常。
二、合约结构与关键宏
Rust 链上合约本质是「带状态的纯函数」。Anchor 用 #[program]、#[derive(Accounts)]、#[account] 三个宏定义入口、账户校验、数据结构。CosmWasm 则用 instantiate、execute、query 三大入口函数,分别对应初始化、写、读。
写第一支合约可以从「计数器」起步:一个 count: u64 状态,一个 increment 指令。把这个例子写顺之后再加权限校验,比如只允许某个 PDA 调用。对比必安交易所那些复杂的产品合约,自己手写的最简版本更利于理解状态机本质。
三、单元测试与本地仿真
Rust 的最大优势是测试体系。#[cfg(test)] mod tests 写在合约同一个文件里,跑 cargo test 直接验证业务逻辑。对于需要模拟链环境的场景,Anchor 提供 solana-program-test,CosmWasm 提供 cw-multi-test,都能在本地 fork 出一条临时链。
建议每个指令至少写三类测试:正常路径、权限拒绝路径、边界条件路径。覆盖率达到 80% 之上再考虑部署测试网。这种严苛的测试纪律比B安交易所那种「先上线再修补」更适合链上场景,因为合约一旦部署到主网就很难回滚。
四、部署脚本与升级路径
部署的标准动作分四步:编译、上传、初始化、验证。编译产物是 .so(Solana)或 .wasm(CosmWasm/NEAR),上传命令各链不同但都需要支付 gas。初始化是调用 instantiate 或 initialize 指令,给状态账户写第一份数据。验证则是用客户端脚本调用 query/view 接口,确认数据写入正确。
升级路径方面,Solana 默认可升级(upgrade authority),CosmWasm 默认不可升级(除非用 admin 字段),NEAR 通过 DEPLOY_CONTRACT action 升级。无论哪种链,都要在团队里明确升级密钥的多签托管方案,避免单点失守。
五、安全审计与上线节奏
上主网之前做三件事:自审计、外部审计、漏洞悬赏。自审计是开发团队互相 review,重点查算术溢出、重入、权限校验。外部审计找 OtterSec、Halborn 或国内的几家专业团队。漏洞悬赏建议挂在 Immunefi,按 TVL 比例设奖金。
上线后保持监控告警:单日异常交易数、合约余额突变、关键事件日志。任何异常都比BN官网当天的暴涨暴跌更值得关注。这份 Rust 合约开发教程把全流程的纪律点列出来,照着走能极大降低事故概率。