3 秒后将继续下一节内容
下一节
重播
学习下一节
登录 后可观看高清视频

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 中的抽象方式

  • 使用 TokenInterface trait
  • 允许同一套程序逻辑同时兼容:
    • 传统 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/

项目代码仓库地址: