教程的分类
- Anchor 文档教程 (偏向入门)
- Anchor SPL Tokens (SPL专题)
- Anchor AMM Swap 合约程序 (项目应用)
- Anchor Staking (项目应用)
- Anchor GMGN 类的合约程序 (项目应用)
- 手续费扣留等 Wrap 包装
《Anchor 入门教程》
《Anchor 入门教程》 Bilibili链接: https://www.bilibili.com/video/BV14Zj7zsEBz/
其它相关教程
- 《Solidity 高级程序设计》Bilibili 链接: https://www.bilibili.com/video/BV1HR4y197Ag/
《Anchor 文档教程》的大纲
- anchor Doc: https://learnblockchain.cn/docs/anchor
- anchor Api: https://docs.rs/anchor-lang/latest/anchor_lang/index.html
主要依靠官方文档和API,初步的大纲:
- 环境安装
- Hello Anchor
- Anchor 程序结构
- Anchor 账户类型
Signer<'info>: 验证账户已签署交易的类型Program<'info, T>: 验证账户是指定程序类型Account<'info, T>: 在反序列化时检查所有权的账户容器UncheckedAccount<'info>: AccountInfo 类型的显式包装器,强调不执行检查- 添加
/// CHECK:文档注释,解释为什么无需进行类型检查。
- 添加
AccountInfo<'info>: 可以作为类型使用,但应改用 Unchecked AccountSystemAccount<'info>: 验证账户由系统程序拥有的类型AccountLoader<'info, T>: 用于按需零拷贝反序列化的类型Box<Account<'info, T>>: 用于节省栈空间的 Box 类型Interface<'info, T>: 验证账户属于给定程序集之一的类型InterfaceAccount<'info, T>: 在反序列化时检查所有权的账户容器Option<Account<'info, T>>: 用于可选账户的 Option 类型Sysvar<'info, T>: 验证账户是 sysvar 并对其进行反序列化的类型
- Anchor 账户约束
- Anchor PDA
- 详细的约束:
- 初始化账户
init / init_if_needed#[account(init)]#[account(init_if_needed)]#[account(signer)](支付者payer/ 空间space)- 常被
Signer<'info>取代
- 常被
- 可变性(mut)与只读:
#[account(mut)] - 种子与 PDA
#[account(seeds, bump)]验证 PDA#[account(realloc)]重分配#[account(zero)]重分配
- 零拷贝账户:
#[account(zero_copy)] - 关闭账户:
#[account(close = target)] - 所有权相关约束
owner / has_one / constraint#[account(owner = expr)]#[account(has_one = target)]#[account(constraint = expr)]#[account(address = expr)]#[account(executable)]
- SPL 约束
- SPL
#[account(token::*)] - SPL
#[account(mint::*)] - SPL
#[account(associated_token::*)] - SPL
#[account(*::token_program = expr)]
- SPL
- 指令属性
#[instruction(...)]
- Anchor 账户空间
- Anchor IDL
- Anchor CPI
- Solana转账
- 调用其他程序,无依赖组合
declare_program
- Anchor 错误
- Anchor 事件
emit/emit_cpi
- 零拷贝
- Anchor Cli
- Anchor 智能合约安全知识
- Anchor 测试
- 简单的应用:
program-derived-addressesrepository-layo
第一个教程完成之后,再考虑搞后面的教程。规划太多,容易偏离初心。
🌹 送人玫瑰,手留余香;人人为我,我为人人。加油,奥利给!🌹