普通SPL Token转账常按“发送多少、收到多少”理解,启用Token-2022 Transfer Fee后会多出第三个数:withheld fee。发送账户扣除总额,接收账户可用余额增加净额,费用作为暂扣字段留在接收Token账户,之后才能被汇集和提取。
费用流转的三个链上事实
- Transfer Fee扩展按basis points计算费用,并受maximum fee上限约束;接收账户获得扣费后的净额。
- 费用先以withheld amount记录在接收Token账户,之后可汇集到Mint并由withdraw authority提取。
- transfer fee config authority可更新未来费率配置,withdraw withheld authority负责提取,两种权限应分别核验。
| 项目 | 计算或位置 | 谁能改变 |
|---|---|---|
| basis points | 转账额的万分比 | transfer fee config authority |
| maximum fee | 单笔费用上限 | transfer fee config authority |
| withheld amount | 接收Token账户或Mint | 协议指令迁移 |
| 提取权限 | 提取已暂扣费用 | withdraw withheld authority |
先算比例,再应用上限
费用按转账原始整数数量乘basis points并按规范舍入,再与maximum fee比较取较小值。代币decimals只负责展示,不改变链上整数公式。钱包若先把小数转成浮点数再计算,容易出现精度或方向错误,应使用大整数并展示总额、费用和净额。
费用为什么在接收账户
扩展把费用暂存在每个接收Token账户的withheld amount中,这部分不能由普通持有人花费。管理方可把多个账户的暂扣费用汇集到Mint,再由withdraw authority提取。数据索引器只看可用余额变化会漏掉费用库存,必须解析Token-2022扩展字段。
钱包展示转账费的步骤
- 确认Mint由Token-2022程序管理并启用扩展
- 读取当前与下一期费率及maximum fee
- 用整数计算总额、费用和净额
- 分别核对config与withdraw authority
- 转账后检查可用余额和withheld字段
地址与账户读取可结合Solana ALT解析,延迟或多签发送参考Durable Nonce;任何代币仍应先按合约地址核验确认Mint来源。
两种authority要分别审计
config authority能更新费率配置,withdraw authority能取走已收费用。它们可能是不同地址、多签或已被永久取消。用户在转账前应读取当前epoch适用配置和计划中的新配置;不能把项目网页的百分比当成链上实时值。
转账费不是网络费
转账费不是Solana基础网络费,也不支付给验证者;它是Mint自身规则。接收方看到净额不代表发送方钱包偷扣,关键是交易预览是否准确展示扩展配置。反之,界面没有展示费用也不意味着链上不会扣。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。