核验清单

  • 在同一区块分别模拟钱包互转、经交易对买入、经交易对卖出,比较三者到账比例。
  • 把宣传税率换算成预期到账,与模拟差额对照;超过手续费与舍入范围的部分记为未解释扣费。
  • 用拟交易规模而不是极小测试额重跑卖路径;核对单笔上限、冷却时间和地址白名单。
  • 记录代币、交易对、区块哈希与调用失败原因,避免用另一次前端报价拼凑结论。

1. 税率是声称,到账比例才是研究对象

ERC-20 标准只规定 transfer / transferFrom 要移动余额并触发事件,并不禁止实现在转账中扣费、拒绝特定接收方,或按“是否与交易对交互”切换规则。因此,官网写“买卖税各 5%”只是项目方的一句声称。研究者要测量的是三个不同上下文里的到账比例:钱包到钱包、稳定币换入该代币(买路径)、该代币换回稳定币(卖路径)。

这三条路径经常被写成同一个百分比,是因为前端把池子储备算出的报价,直接当成用户钱包会收到的数量。报价合约通常只读储备和手续费档位,并不执行代币自己的转账钩子。于是会出现一种很常见、却很少被拆开写清的结构:买入时到账接近宣传税率,钱包互转几乎不扣,卖出时大幅少到或直接回滚。我的判断是:可交易性应取三条路径中最差的一条,而不是取宣传页上最好看的那一条。

2. 教学案例:5% 宣传税,卖路径只剩 40%

假设某代币对外宣传买入税 5%、卖出税 5%。忽略 AMM 价格影响和池子手续费,只看代币合约在转账时扣下的份额。投入按 1,000 个最小展示单位计。

教学案例:同一区块、同一发送地址,三条路径的到账
路径投入收到到账比例相对宣传卖出税的差额
钱包互转1,00099099.0%宣传未覆盖的 1% 转账税
买路径(代币出池)1,00095095.0%与 5% 买入税一致
卖路径(代币进池)1,00040040.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 尚未测到之前,用买入摩擦去推持有成本或所谓净收益,是把会计不确定性包装成精确数字。

本文是分析框架和教学算例,未对任何具体代币做安全背书,不构成投资建议。