d doeda-zogt.xyz
BTC ▲ 67,820 ETH ▲ 3,540 BNB ▼ 612 SOL ▲ 198 XRP ▲ 0.62 DOGE ▼ 0.14 ADA ▲ 0.58 AVAX ▲ 42.30
doeda-zogt.xyz » rusthe-yue-ru-men-zhi-nan
深度 Rust合约入门指南 - Rust合约入门指南:零基础开发者的第一支链上程序

Rust合约入门指南:零基础开发者的第一支链上程序

发布 · 2026-05-24T06:12:20.812947+00:00 更新 · 2026-05-24T15:21:51.248838+00:00

很多读者第一次接触链上合约时是从 Solidity 入门的,但近两年 Rust 合约的份额迅速上升。这篇 Rust 合约入门指南面向零基础读者,目标是带你从「不知道合约是什么」一路走到「在测试网部署成功」,并理解为什么连BN交易所都在加码 Rust 合约生态。

一、合约究竟是什么

链上合约本质是一段「确定性代码 + 永久存储」。任何人发起的调用都会被全网节点重复执行一遍,结果完全一致才会写入账本。这意味着写合约不能依赖时间、随机数、网络请求等不确定输入,只能依赖链上已有状态。

和你日常写的 Web 服务相比,合约更像「无状态函数 + KV 存储」。你不需要管线程池、不需要管数据库连接,但你要管账户、要管 gas、要管签名。先理解这套心智模型,再写代码会事半功倍。

二、环境准备

安装顺序:Rust 工具链 → 目标链 CLI → 项目脚手架。Rust 用 rustup 装最新 stable,然后 rustup target add wasm32-unknown-unknown(CosmWasm/NEAR 需要)。Solana 开发还要装 Solana CLI,命令是 sh -c "$(curl -sSfL https://release.solana.com/stable/install)"

装完之后 solana --versionanchor --versioncargo --version 三条命令都要能输出版本号。如果有报错先解决,不要硬着头皮往下走。许多新手在这一步被卡了一两天,是正常现象。和必安交易所那种「点开就能用」的产品不同,开发工具链需要耐心。

三、第一支合约:Hello World

用 Anchor 起手:anchor init hello,然后改 programs/hello/src/lib.rs,在 #[program] 模块里加一个 pub fn say_hello(ctx: Context<SayHello>) -> Result<()> { msg!("hello world"); Ok(()) }SayHello 是空的账户结构体,因为这个指令不读写任何状态。

anchor build 编译,跑 anchor test 自动起本地测试节点并跑测试用例。看到日志里 Program log: hello world 就算成功。这一刻你已经完成了零到一,剩下的都是加复杂度。

四、加上状态

Hello World 没意思,下一步加状态。新建一个 Counter 结构,#[account] pub struct Counter { pub count: u64 },再加一个 initialize 指令创建 PDA,加一个 increment 指令把 count + 1。

注意 PDA 的派生方式:seeds = [b"counter", user.key().as_ref()],意味着每个用户都有自己的 counter,互不干扰。这种「每用户独立账户」的模式比B安交易所那种集中账本更符合链上原生设计。

五、部署到测试网

solana config set --url devnet 切到 devnet,用 solana airdrop 2 领点测试币,然后 anchor deploy。部署成功后 program id 会写回 Anchor.toml,前端通过 @coral-xyz/anchor SDK 调用即可。

如果部署报「insufficient funds」,多 airdrop 几次;如果报「program account too small」,加大 programs/hello/.so 的预估大小。这些坑都踩过一遍之后,你才算真正入门。后面想往主网走、想接BN官网的代币桥、想做产品化,都建立在这一支跑通的 Hello World 之上。