核验清单
- 在同一区块分别模拟钱包互转、经交易对买入、经交易对卖出,比较三者到账比例。
- 把宣传税率换算成预期到账,与模拟差额对照;超过手续费与舍入范围的部分记为未解释扣费。
- 用拟交易规模而不是极小测试额重跑卖路径;核对单笔上限、冷却时间和地址白名单。
- 记录代币、交易对、区块哈希与调用失败原因,避免用另一次前端报价拼凑结论。
1. 税率是声称,到账比例才是研究对象
ERC-20 标准只规定 transfer / transferFrom 要移动余额并触发事件,并不禁止实现在转账中扣费、拒绝特定接收方,或按“是否与交易对交互”切换规则。因此,官网写“买卖税各 5%”只是项目方的一句声称。研究者要测量的是三个不同上下文里的到账比例:钱包到钱包、稳定币换入该代币(买路径)、该代币换回稳定币(卖路径)。
这三条路径经常被写成同一个百分比,是因为前端把池子储备算出的报价,直接当成用户钱包会收到的数量。报价合约通常只读储备和手续费档位,并不执行代币自己的转账钩子。于是会出现一种很常见、却很少被拆开写清的结构:买入时到账接近宣传税率,钱包互转几乎不扣,卖出时大幅少到或直接回滚。我的判断是:可交易性应取三条路径中最差的一条,而不是取宣传页上最好看的那一条。
2. 教学案例:5% 宣传税,卖路径只剩 40%
假设某代币对外宣传买入税 5%、卖出税 5%。忽略 AMM 价格影响和池子手续费,只看代币合约在转账时扣下的份额。投入按 1,000 个最小展示单位计。
| 路径 | 投入 | 收到 | 到账比例 | 相对宣传卖出税的差额 |
|---|---|---|---|---|
| 钱包互转 | 1,000 | 990 | 99.0% | 宣传未覆盖的 1% 转账税 |
| 买路径(代币出池) | 1,000 | 950 | 95.0% | 与 5% 买入税一致 |
| 卖路径(代币进池) | 1,000 | 400 | 40.0% | 比宣传 5% 多扣 55 个百分点 |
若有人用买路径的 95% 去外推“持有成本”,会把卖路径上消失的 550 单位当成尚未实现的利润。正确写法是分别报告:买入摩擦 5%,钱包转账摩擦 1%,卖出摩擦 60%。三者不能平均,更不能只引用买入那一列。
差额本身不能自动等于恶意。实现可能把“卖出税”动态上调、把交易对地址列入高税率名单,或把手续费打给营销合约。研究任务是把数字钉住,而不是先给动机命名。反过来,钱包互转成功也证明不了能卖出:不少实现允许普通地址互转,却在接收方为交易对时提高税率或直接 revert。
3. 用锁定区块的模拟,而不是另一次前端报价
核验应在同一区块高度完成。先读取代币 decimals、balanceOf 以及交易对储备;再分别构造:一次普通 transfer,一次买入方向的兑换,一次卖出方向的兑换。兑换应走该代币实际使用的路由或交易对,而不是只调用 transfer 假装“已经卖出”。eth_call 不会广播交易,适合用来读取返回值或失败原因;它也不会锁住下一笔真实交易的结果,状态随时可能变。
Uniswap V2 的兑换接口说明把“按储备计算的输出”和“代币合约实际转出的数量”分成两件事。若模拟买入返回 950,而同一区块的卖出模拟回滚,应把卖路径可执行规模记为零,而不是沿用 950。失败原因同样要记:超额、冷却、交易未开启、接收方受限,对应完全不同的后续问题。本文只讨论如何读取这些公开结果,不提供绕过限制或构造有害代币的步骤。
4. 极小额测试会系统性低估卖出摩擦
设未扣税数量为 q。若实现按固定比例扣税,小额和大额的比例相同,测 1 个单位或 10,000 个单位看起来差不多。一旦存在单笔上限、分档税率、地址名单或“首次卖出附加税”,比例就会随规模和发送方跳变。保守的研究筛选可以是:卖路径到账比例不得低于宣传卖出税率所隐含到账的 90%,且拟交易规模本身必须跑通。例如宣传卖出税 5%,隐含到账 95%;若模拟卖出只有 40%,40/95≈0.42,远低于 0.90 这条筛选线,应把“广告税率”标为未核验通过。
0.90 不是行业安全标准,只是把“宣传与实测是否同量级”写成可复核的不等式。它不覆盖 AMM 滑点、池子手续费,也不覆盖下一区块的参数修改。管理员若能改税率、改交易对地址或开关交易,当前区块的一次通过也不能外推到未来。
5. 一份别人能复现的记录
最低字段包括:链 ID、区块号与哈希、代币与交易对地址、两边 decimals、宣传买入/卖出税率、三条路径的投入与到账、卖出模拟是否回滚及原因、发送方是否在名单内、单笔上限。代理合约还要记下当时的实现地址,避免升级被读成“税率突然变化”。
对账顺序建议固定为:宣传隐含到账 → 钱包互转到账 → 买路径到账 → 卖路径到账。任何无法用手续费档位和整数舍入解释的缺口,先列入未归因扣费。未归因不是罪名,只是禁止把缺口写进“已核验的 5% 税”。
6. 结论:可交易性由最差的那条路径决定
买入顺畅只说明资金能进;钱包互转顺畅只说明余额能搬家。持有人能不能按接近宣传的成本退出,要看卖路径。一个更可靠的研究结论不是“这个代币税很低”,而是“该区块上买路径到账 x%、卖路径到账 y% 或不可执行、钱包互转 z%,与宣传税率的差额分别是多少”。在 y 尚未测到之前,用买入摩擦去推持有成本或所谓净收益,是把会计不确定性包装成精确数字。
本文是分析框架和教学算例,未对任何具体代币做安全背书,不构成投资建议。