CPI Guard能阻止哪些跨程序调用? 图 1
CPI Guard能阻止哪些跨程序调用? · 图 1

说明在Token账户启用CPI Guard的步骤、被限制的转账与授权操作,以及它为何不能替代签名和程序权限检查。

CPI Guard是Token账户所有者给跨程序调用加的一道限制,不是代币级总开关。

规范锚点

  1. CPI Guard配置在Token账户而非mint,账户owner可启用或关闭该保护。
  2. 启用后Token-2022会拒绝若干由其他链上程序通过CPI发起的转账、授权或关闭账户路径。
  3. 它不阻止账户owner直接签署的顶层指令,也不能修复调用程序自身的权限或签名漏洞。

账户配置

扩展位于具体Token账户,owner可发指令启用或禁用。一个mint下不同持币账户可以有不同设置。

受限指令

启用后,Token-2022在CPI上下文拒绝受限的转账、授权、关闭等路径,目的在于降低用户把签名交给任意程序后被深层调用滥用。

落到审计记录

核验对象本主题动作失败处理
账户配置从Solana Documentation确认Token-2022 CPI Guard如何开启的正式定义,并保存网络、地址与读取时间定义或版本对不上时,不继续套用本文步骤
受限指令在原始返回、签名消息或交易指令中定位对应字段,不用界面缩写代替找不到原始值时,把结果标为未验证
测试步骤用Token-2022 Program Source复核实现行为,特别记录可选扩展与权限主体实现与规范语义不一致时,按具体部署重新评审
能力边界构造一个失败样例,确认客户端会明确拒绝而不是静默修正失败仍被显示为成功时,停止上线并补充状态校验

记录Token-2022 CPI Guard时,把“输入快照”和“判断结果”分开。该主题的快照包含原始bytes、字段单位、对象地址、区块高度与Solana Documentation版本;结果注明通过的规则和仍未知的能力边界。这样即使Token-2022 CPI Guard如何开启随后变化,也能复现当时的结论。

Token-2022 CPI Guard的测试至少覆盖正常路径、缺少受限指令、提交前状态改变及客户端不支持当前版本。前几类验证测试步骤边界,最后一类确认产品不会删除字段或改走未经用户确认的回退路径。

测试步骤

用户直接提交的顶层Token指令仍可执行,某些协议必要的CPI也可能因此失败。接入前应在devnet覆盖直接调用与CPI两条测试。

能力边界

它不验证上层程序业务逻辑,也不阻止其他程序修改自己的账户。安全评审仍需检查PDA签名、authority与剩余账户。

来源与复核入口

  1. Solana Documentation:正式接口、字段与规范语义,https://solana.com/docs/tokens/extensions/cpi-guard
  2. Token-2022 Program Source:实现路径、兼容性或安全边界,https://github.com/solana-program/token-2022

Token-2022 CPI Guard的资料访问口径为2026-07-17;遇到Draft状态、可升级部署或可变网络参数,应在后续复核日重新读取Solana Documentation。

审计边界

受限制指令清单会随Token-2022程序版本演进,集成应按部署程序和官方源码核对。 相邻知识可继续对照Solana交易模拟Token-2022扩展