b biangogo.com
BTC ▲ 67,820 ETH ▲ 3,540 BNB ▼ 612 SOL ▲ 198 XRP ▲ 0.62 DOGE ▼ 0.14 ADA ▲ 0.58 AVAX ▲ 42.30
biangogo.com » rusthe-yue-tu-wen-jiao-cheng
深度 Rust合约图文教程 - Rust合约图文教程:用流程图与代码对照讲透完整开发链路

Rust合约图文教程:用流程图与代码对照讲透完整开发链路

发布 · 2026-05-24T06:12:20.847616+00:00 更新 · 2026-05-24T15:34:33.273899+00:00

纯代码教程容易让新手迷失,纯图示教程又抓不住技术细节。本文用「流程图 + 代码片段」对照的方式呈现 Rust 合约开发链路,让你既能看到全局,又能直接复制可运行的样板。讲解节奏对标BN交易所生态里头部项目的工程师内部分享。

一、账户流转流程图

想象一支转账合约的账户流转:用户钱包 → 用户 token account → 合约 PDA token account → 接收方 token account。流程图上画四个圆角矩形,箭头表示资金流向,箭头上注明指令名。

对应代码:源账户 from、目标账户 to、token program、authority。Anchor 模板:

pub fn transfer(ctx: Context<TransferCtx>, amount: u64) -> Result<()> {
    let cpi = CpiContext::new(
        ctx.accounts.token_program.to_account_info(),
        Transfer { from: ctx.accounts.from.to_account_info(), to: ctx.accounts.to.to_account_info(), authority: ctx.accounts.authority.to_account_info() },
    );
    token::transfer(cpi, amount)
}

这种「画流程 + 配代码」的方式比单看代码理解快两倍。和必安交易所那种「资金从用户到平台」的中心化路径不同,链上每一步都显式地落在账户对象上。

二、CPI 调用层级图

CPI 是 Solana 上最关键的概念之一。画一棵调用树:我的合约 → SPL Token Program → 系统调用 sol_invoke_signed_c。每一级的 program id 不同,每一级的账户列表不同。

代码段落:构造 Instruction { program_id, accounts, data },再 invoke_signed(&ix, &account_infos, signer_seeds)。如果你没用 Anchor 的 CpiContext,必须手动把这些都拼对,错一个就报「IllegalOwner」。

三、PDA 派生示意图

PDA 派生用一张表格说明:seeds 列出种子内容,bump 是寻找曲线外点的字节,最终生成的 32 字节地址在最右一列。所有同种 seeds + 相同 program_id 永远派生出同一个 PDA。

代码:let (pda, bump) = Pubkey::find_program_address(&[b"vault", user.key().as_ref()], &program_id); 派生之后把 bump 存到 account 里,后续 CPI 时直接 &[b"vault", user.key().as_ref(), &[bump]] 作为 seeds。这种模式在和BN官网生态里的桥接合约交互时同样适用。

四、状态机时序图

业务复杂的合约通常有多个状态。比如拍卖合约:Pending → Live → Ended → Settled。画一张时序图:纵轴是状态,横轴是事件,每条转换线上写触发指令名。

代码层面用枚举:pub enum AuctionStatus { Pending, Live, Ended, Settled },每条转移指令开头 require!(status == ExpectedStatus, ErrorCode::InvalidStatus)。这种「状态机驱动」的合约最易审计、最易测试,是高质量合约的标志。

五、部署与运维拓扑图

最后一张图画运维拓扑:本地开发机 → CI/CD(GitHub Actions) → devnet → mainnet-beta;旁边接监控系统(Prometheus + Grafana + PagerDuty);再旁边是多签升级密钥(Squads)。每条线代表一个工具链动作。

这张图不是为了好看,而是为了让团队成员对项目「全局拓扑」有一致认知。新人入职第一天看这张图,能在 30 分钟内理解他将工作的整个环境。和B安交易所内部系统拓扑图一样,可视化是协作效率的放大器。把这份「Rust合约图文教程」做成 wiki 长期维护,比一份过时的 PDF 文档好用得多。