登录 后可观看高清视频
Anchor 入门:SPL 与 Token 2022
217次播放
2026-01-24
本节课程围绕 Solana 的 SPL Token 体系 展开,重点帮助学员建立对 Mint、Token Account、Associated Token Account(ATA) 的清晰认知,并理解在 Anchor 程序中如何与 SPL Token(包括 Token-2022)进行交互,为后续涉及资产托管、转账、空投等场景打下基础。
一、核心学习目标
通过本节课程,学员应能够:
- 理解 SPL Token 的核心账户结构
- 区分 Mint、Token Account 与 ATA 的实际含义
- 理解 PDA 在 Token 管理与托管场景中的作用
- 理解 Anchor 程序与 TS / Python 脚本之间的职责分工
- 对 Token-2022 的扩展能力建立初步认知
二、SPL Token 的三类核心账户
这是本节课讨论最集中、也是最容易混淆的部分。
1. Mint Account(铸币账户)
- 定义一种代币本身
- 记录代币的:
- 总供应量
- 精度(decimals)
- 铸造权限(mint authority)
- 每一种 SPL Token 对应 唯一一个 Mint
可以把 Mint 理解为“代币的规格说明书”。
2. Token Account(代币账户)
- 用于存储某个地址持有的某种代币余额
- 一个 Token Account 只对应:
- 一个 Mint
- 一个 Owner
- 区块浏览器中常把 ATA 也统称为 Token Account,这也是初学者混淆的来源之一
3. Associated Token Account(ATA)
- ATA 是一种特殊规则下的 Token Account
- 由以下三者唯一确定:
- 钱包地址
- Mint
- ATA 程序规则
特点包括:
- 每个钱包地址 + 每种 Mint,最多只有一个 ATA
- 是官方推荐的钱包持币方式
- 大多数钱包、前端、SDK 默认只使用 ATA
可以理解为:
ATA 是 Token Account 的“标准形态”
三、为什么初学者容易混淆这些概念
课程中反复出现的疑问,本质原因在于:
- Solana 把一切状态都叫 Account
- 区块浏览器往往统一显示为 Token Account
- 历史早期存在“非 ATA 的 Token Account”用法
- 不同教程对命名不够统一
课堂给出的关键结论是:
- Mint ≠ Token Account
- ATA ⊂ Token Account
- 大多数应用场景下,可以直接把 ATA 当作默认 Token Account 使用
四、PDA 在 Token 场景中的作用
1. 程序账户无法签名
- 程序账户本身不能签名
- PDA 也不能直接签名
- PDA 通过
invoke_signed由程序“代签”
2. PDA + ATA 的常见组合
在实际开发中,常见模式包括:
- 使用 PDA 作为 Token Account 或 ATA 的 owner
- 实现:
- 资产托管
- 金库
- 合约控制资金流向
课堂中讨论的典型问题包括:
- 是否可以把 USDC 转入 PDA 的 ATA
- 是否可以再由 PDA 把资金转出到任意用户的 ATA
答案是:
逻辑上可行,但前提是权限与 signer 设计正确
五、Anchor 与 TS / Python 脚本的分工
这是很多新同学容易误解的点。
1. Anchor 的职责
- 编写和部署链上程序
- 定义:
- 账户结构
- 权限规则
- 状态变更逻辑
2. TS / Python 的职责
- 与链上程序交互
- 执行:
- 创建 ATA
- 转账
- 空投
- 查询状态
因此:
- Anchor 不是用来写“脚本”的
- TS / Python 不是用来写“合约逻辑”的
二者是明确分层的。
六、关于 Token-2022 的初步认知
课程后半段涉及 Token-2022,并引发了较多提问。
1. Token-2022 是什么
- SPL Token 的扩展版本
- 提供更多原生能力,例如:
- 冻结
- 转账限制
- 扩展字段
2. Anchor 中的抽象方式
- 使用
TokenInterfacetrait - 允许同一套程序逻辑同时兼容:
- 传统 SPL Token
- Token-2022
如果要使用 Token-2022 的特有能力,仍需要明确指定并处理对应逻辑。
七、开发中的安全与认知提醒
课堂中还反复提到一些重要提醒:
- 不要随意在脚本中填写真实主网私钥
- 理解代码在做什么,比“能跑起来”更重要
- API 不需要死记,核心是知道:
- 用什么场景
- 去哪里查文档
八、课后实践建议
- 自行梳理一张对照表:
- Mint
- Token Account
- ATA
- 使用区块浏览器观察真实代币的账户结构
- 尝试用 Anchor + 脚本完成:
- 创建 ATA
- 向 ATA 转账
- 使用 PDA 控制 Token 流转
- 把 Token 与账户模型的理解写成自己的笔记
文课程档:
https://accu.cc/content/solana/project_rule/
https://accu.cc/content/solana/project_control_by_program/
https://accu.cc/content/solana/project_code/
https://accu.cc/content/solana/project_airdrop/
https://accu.cc/content/solana/project_github/
项目代码仓库地址:
- 原生 rust 实现: https://github.com/mohanson/pxsol-spl
- Anchor 实现: https://github.com/mohanson/pxsol-spl-anchor