b bajsj.com
~ / bajsj.com / rusthe-yue-kai-fa-jiao-cheng

Rust合约开发教程:从环境搭建到主网部署的完整路径

published: 2026-05-24T06:12:20.811235+00:00 updated: 2026-05-24T15:21:05.032852+00:00
Rust合约开发教程 - Rust合约开发教程:从环境搭建到主网部署的完整路径

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-appcargo near new my-app,生成的目录里 Cargo.toml 会带 crate-type = ["cdylib", "lib"],这是 BPF/Wasm 编译目标的关键。改完依赖立即跑一次 anchor buildcargo near build,确认工具链正常。

二、合约结构与关键宏

Rust 链上合约本质是「带状态的纯函数」。Anchor 用 #[program]#[derive(Accounts)]#[account] 三个宏定义入口、账户校验、数据结构。CosmWasm 则用 instantiateexecutequery 三大入口函数,分别对应初始化、写、读。

写第一支合约可以从「计数器」起步:一个 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。初始化是调用 instantiateinitialize 指令,给状态账户写第一份数据。验证则是用客户端脚本调用 query/view 接口,确认数据写入正确。

升级路径方面,Solana 默认可升级(upgrade authority),CosmWasm 默认不可升级(除非用 admin 字段),NEAR 通过 DEPLOY_CONTRACT action 升级。无论哪种链,都要在团队里明确升级密钥的多签托管方案,避免单点失守。

五、安全审计与上线节奏

上主网之前做三件事:自审计、外部审计、漏洞悬赏。自审计是开发团队互相 review,重点查算术溢出、重入、权限校验。外部审计找 OtterSec、Halborn 或国内的几家专业团队。漏洞悬赏建议挂在 Immunefi,按 TVL 比例设奖金。

上线后保持监控告警:单日异常交易数、合约余额突变、关键事件日志。任何异常都比BN官网当天的暴涨暴跌更值得关注。这份 Rust 合约开发教程把全流程的纪律点列出来,照着走能极大降低事故概率。