Token-2022 集成防护指南 是做什么的?
作者/检查者 vs 消费者。 该工具包的
token-2022材料和广泛的代币扩展技能(solana-token-extensions、token-2022-extensions)适用于代币的作者——选择扩展、创建铸币以及一个只读的铸币检查者。 本技能是相反的方面:一个程序如何安全地消费它不控制的第三方铸币。一个铸币是不受信任的输入。在那些技能说 “集成者应使用净额” 的地方,本技能强制执行并测试它——一个防护金库,能够证明份额偿付能力漏洞并在链上阻止它。严格互补;请与它们一起安装。
何时使用本技能
当用户处于 Token-2022 铸币的消费方时使用:
- 为 AMM、金库、借贷市场、托管、质押或支付流程添加 Token-2022 支持。
- 决定是否上市/质押/接受特定代币(“这个铸币集成安全吗?”)。
- 调试“对不上”的份额/LP/托管数学(几乎总是转账费用错误)。
- 审查移动 SPL 代币的 Anchor/原生程序的 Token-2022 安全性。
- 编写证明你的集成能抵御恶意铸币的测试。
如果用户想创建一个带扩展的代币,那是发行方——请参考核心 token-2022 技能。
一段话的威胁模型
一个 Token-2022 铸币可以携带改变转账行为的扩展。作为集成方,你必须假设铸币作者是恶意的。危险的有:转账费用使入账金额小于发送金额(破坏 1:1 份额数学);转账钩子在每次转账时运行由发行者控制的代码(重入、拒绝服务、账户注入);永久委托可以随时从你的金库转移/销毁代币;默认账户状态 = 冻结使你新创建的代币账户无法使用;机密转账向你的记账隐藏真实余额;可暂停允许发行者冻结你的提款。默认拒绝。
操作流程
- 先扫描。 识别铸币上的每个扩展及其对集成方的影响。
→ scanning.md(可运行的
t22-scanCLI)和 extension-risk-matrix.md(每个扩展的含义)。 - 根据配置决策。 AMM、金库、借贷和托管对不同扩展的容忍度不同。使用矩阵裁决(
ALLOW/HANDLE/REJECT)。 - 强化程序。 应用你选择支持的模式:
- 转账费用 → transfer-fee-accounting.md
- 转账钩子 → transfer-hook-reentrancy.md
- 永久委托 / 冻结 → permanent-delegate-and-freeze.md
- 在链上强制执行默认拒绝白名单 → extension-allowlist-pattern.md
- 用测试证明。 编写加载真实 Token-2022 程序的 LiteSVM 测试,并断言你的防护器阻止了攻击。 → testing.md
- 引用来源/深入了解。 → resources.md
路由表
| 用户正在处理… | 阅读 |
|---|---|
| “这个铸币集成安全吗?” / 扫描代币 | scanning.md, extension-risk-matrix.md |
| 份额/LP/托管金额错误,“费用吃掉我的存款” | transfer-fee-accounting.md |
| 转账钩子、重入、ExtraAccountMetaList、转账时的 CPI | transfer-hook-reentrancy.md |
| 永久委托、冻结权限、默认冻结、收回 | permanent-delegate-and-freeze.md |
| “如何在我的程序中拒绝危险铸币?” | extension-allowlist-pattern.md |
| 为 Token-2022 边界情况编写/运行测试 | testing.md |
| 存在哪些扩展以及每个扩展的风险程度 | extension-risk-matrix.md |
| 来源、审计、DEX 政策、进一步阅读 | resources.md |
本技能包含的内容
| 制品 | 路径 | 说明 |
|---|---|---|
| 扫描器 CLI | tools/t22-scan/ | t22-scan <mint> --profile=vault → 每个扩展的风险裁决 + 用于 CI 的退出码。已对主网真实铸币进行验证。 |
| 防护程序 | examples/guard/ | 一个真正的 Anchor 1.0 金库:链上扩展白名单 + 增量测量的费用安全存款 + 防重入提款。 |
| 攻击测试 | examples/guard/tests/ | 加载真实 spl_token_2022 程序的 LiteSVM 测试,证明漏洞存在,以及防护器能阻止它。 |
命令与智能体
| 触发器 | 功能 |
|---|---|
/scan-mint | 扫描铸币地址,并根据所选配置报告集成方风险。 |
/audit-t22-integration | 审计程序源代码中的 Token-2022 集成错误。 |
智能体: token2022-integration-auditor | 生成一个专注的审查者,扫描已配置的铸币并 grep 程序中 transfer 与 transfer_checked、信任金额的数学以及缺少扩展检查的地方。 |
不可协商的规则(每次集成都适用)
- 默认拒绝。 拒绝任何你没有明确处理的扩展。未知 TLV = 拒绝。
- 永远不要信任
amount参数 来记账。测量收到的增量(reload()+ 余额差)或读取费用配置;按实际收到的金额记账。 - 始终使用
transfer_checked(含铸币地址和小数位数),绝不使用已废弃的transfer。 - 锁定代币程序。 设置
token::token_program/associated_token::token_program,使攻击者无法将经典 Token 账户混入 Token-2022 CPI。 - 在使用时重新验证,而不仅仅是在上市时——铸币的转账钩子程序和费用可以更改。
- 用测试证明。 提供一个 LiteSVM 测试,该测试在没有你的防护器时失败,在有防护器时通过。