Coinnoti
☰
简体中文zh-hans
返回博客

为什么你的钱包显示一笔你从未发送的转账:零金额交易与地址投毒

出现一笔陌生的转出交易,并不自动意味着你的钱包遭到了入侵。了解零金额记录、相似地址和真实资产转移究竟能证明什么。

这条记录能证明你的钱包发生了什么?

如果交易历史突然显示你向陌生地址发送了 0 USDT,仅凭这条记录并不能认定有人获取了你的私钥。第三方无需你的签名,也无需获得支出非零金额的权限,就能创建某些将你的地址列为发送方的零代币转账记录。即使你从未发起交易,这条记录也可能真实存在于区块链上。

更有用的问题是:这是哪一种资产?实际转移了多少?谁提交了交易?任何实际支出是如何获得授权的?

  • 零金额代币事件不能证明你签署或支出了任何东西。对于真实代币,准确的零金额意味着该笔转账没有转移代币。
  • 显示熟悉代币名称的转账不能确定资产身份。无关的合约也可以使用相同名称和符号。
  • 一笔极小额的转入付款可能是真实的,同时在你的历史记录中植入误导性的发送地址。
  • 已确认、无法解释的真实资产转出需要调查。不要因为另一个字段显示零就忽略它。

本指南涵盖以太坊、BNB 智能链(BSC)及使用以太坊式代币合约的类似网络。示例均为有意简化的虚构记录,并非特定钱包的截图或调查结果。

首先确认哪个字段显示零

人们用零金额交易指代几种不同的情况。以下显示中,只有一种表示代币数量为零:

  • 代币数量:0 USDC。对于真正的 USDC 合约,精确的零金额意味着该笔转账没有转移 USDC。
  • 交易价值:0 ETH。主交易没有附带 ETH,但代币仍可能转移,合约操作仍可能执行。
  • 估算价值:$0.00。界面显示的是法币估值,不能据此确定代币数量。

在 BSC 上,原生币字段通常使用 BNB 而不是 ETH。原生币金额为零的合约交互仍可能转移代币、更改支出权限或触发其他操作。原生币价值与交易输入数据是分开的。

很小的正数金额可能被四舍五入显示为 $0.00。缺乏可靠定价的资产也可能显示没有参考价值的法币金额。应展开代币数量查看完整精度;即使显示数量为 0.00,也可能隐藏更小的正数金额。投资组合估值的变化并不能可靠反映账户实际流入或流出的资产单位。

零是允许的代币数量,因此仅凭零并不能认定遭到攻击。相似地址和复制的付款信息是值得调查的线索。

为什么两个 From 字段可能不同

钱包历史记录可能混合不同层次的信息:

  1. 交易:提交到网络的已签名指令。对于常规以太坊交易,主要的 From 字段标识签名账户。
  2. 代币事件:合约执行过程中发出的记录。Transfer 事件有自己的 From、To 和金额。
  3. 历史记录行:钱包或区块浏览器对信息的呈现。如果事件把你的地址列为发送方,它可能将该事件标记为 OUT。

这两个 From 字段不可互换。你的地址出现在事件中,并不等于你的钱包进行了签名。恶意合约可以在事件数据里填写你的地址,但这不代表该日志来自真正的代币合约。因此,发出事件的合约是关键证据。

同样,交易哈希用于标识交易,并不能证明你同意了它。一笔已上链且标记为 Success 的交易,只表明外层执行没有回滚,并不意味着代币、收款人或交易目的值得信任。

五个附带解释的交易历史示例

示例 1:你从未签名的零代币转出

历史记录:OUT · 0 USDC · 从你的地址转至陌生的相似地址。

  • 交易 From:由无关账户提交交易。
  • 代币事件 From:事件列出你的地址。
  • 发出事件的代币合约:该网络上的真实 USDC 合约。
  • 准确的代币数量:零。

这能证明什么:真正的代币合约记录了一笔以你的地址为发送方的零代币转账。该笔转账没有转移 USDC。它不能证明你的钱包签署了交易、调用者有权支出正数金额,或你的私钥遭窃。

发生原理:常见代币标准 ERC-20 要求零金额转账也发出 Transfer 事件。在常见实现中,委托转账函数 transferFrom 会检查请求金额是否超过调用者的授权额度。零不会超过零额度。因此,只要满足合约的其他规则,即使没有事先批准,调用也可能成功。

这并非对所有代币的普遍保证。具体合约可能设有额外限制。

下一步检查:查看交易中的其他内容。零金额记录只能说明该记录本身;其他操作可能产生不同影响。如果只有孤立的地址投毒记录,没有可疑支出或权限变化,合适的应对是避免使用被植入的地址,而不是认定必须更换钱包。

示例 2:显示大额代币数量的伪造交易

历史记录:OUT · 2,500 USDC · 从你的地址转至陌生地址。

  • 显示的代币符号:USDC。
  • 发出事件的合约:无关合约,并非真正的 USDC。
  • 事件报告金额:2,500。
  • 这笔交易中的真实 USDC 转移:无。

这能证明什么:另一个合约发出了一条以 USDC 标签呈现的记录,不能证明 2,500 枚真正的 USDC 离开了你的账户。

钱包里的伪造交易可以是真实存在、却被误导性解读的区块链数据。攻击者可以复制代币的名称和符号,并发出类似你以前付款记录的事件,包括模仿付款金额。非标准合约还可能发出与自身余额变化不对应的转账记录。

下一步检查:确定网络以及发出事件的准确合约地址。将该地址与通过独立可信渠道获得的发行方在该网络上的合约信息核对。熟悉的代码、标志或源码验证标签均不足以确认发行方身份。

示例 3:来自相似地址的真实小额付款

历史记录:IN · 0.000001 USDC · 从陌生地址转入你的地址。

假设真正的代币合约确认了这笔转账,而你的代币余额也增加了这一微小数量。在这种情况下,真实代币确实到账。接收代币不需要你批准发送方,也不会赋予其支出权限。

陷阱在于地址。请看以下虚构示例,为便于看清每个字符而加入空格。真实地址不含空格;加粗的中间部分不同:

已核实的收款地址:0x7a2f 1111 2222 3333 4444 5555 6666 7777 8888 9c4d

植入的地址:0x7a2f aaaa bbbb cccc dddd eeee ffff 0000 1111 9c4d

如果界面只显示地址的开头和结尾,两者都可能显示成 0x7a2f...9c4d。

这能证明什么:有人从该地址给你发送了一笔小额代币。不能证明发送方是你惯用的收款人或你控制的账户。可见字符相同不能证明所有权。

下一步检查:通过另外核实过的联系人或收款人的可信账户页面重新获取目标地址,逐字符比较完整地址。地址投毒试图让你把历史记录中植入的地址用于以后付款。损失可能发生在之后:你授权了一笔完全有效的转账,却将钱发往错误目的地。

示例 4:ETH 为零,但有 2,500 枚真实代币转出

交易标题:Value · 0 ETH。

  • 调用附带的原生币金额:0 ETH。
  • 真实代币转账:从你的地址转出 2,500 USDC。
  • 该交易引起的 USDC 余额变化:减少 2,500 USDC。
  • 执行状态:Success。

这能证明什么:在该示例中,真实 USDC 确实转出。零指的是调用附带的 ETH,而不是 USDC 转账金额,也不意味着没有燃料费。

仍然未知的事项:付款为何发生,以及你是否有意进行。它可能对应兑换、存款、预定操作、发往错误地址的付款或未经授权的支出。应先核对你采取的操作和预期目的地,再判断性质。

示例 5:真实代币转出,但交易由另一个账户提交

历史记录:OUT · 500 枚真实 USDC · 陌生目的地。

假设一笔成功的交易让你的真实 USDC 余额减少了 500,但其主要 From 字段却显示为其他人。

这能证明什么:代币确实转移。交易发送方不同,并不会让这种转移变成假的。

此前获得批准的支出方可以利用代币授权额度提取代币,而无需每次都让你签署新交易。有些代币还支持 permit 签名,可通过签名消息授权额度并由其他人提交。智能账户和委托钱包也提供了其他人代为提交已授权操作的更多方式。

下一步检查:检查支出方、相关授权额度或签名权限,以及钱包操作。如果扣款仍然无法解释,应将其视为安全事件。证据可能指向有害的授权、欺骗性签名或账户控制权遭到入侵;单凭这一行记录无法区分。

对于普通的直接签名交易,主交易 From 字段显示你的地址,是该账户具有有效签名的证据。但仍无法证明你理解该操作、希望付款给该收款人,或亲自发起了交易。代币事件的 From 字段所能提供的证据弱得多。

2.7 亿次地址投毒尝试的数据究竟测量了什么

一项针对以太坊和 BSC 活动、涵盖 2022 年 7 月 1 日至 2024 年 6 月 30 日的两年分析,发现约 270 million 条投毒转账记录,针对 17 million 个地址。

这些记录分为三类:

  • 147.7 million 笔零金额转账。
  • 118.4 million 笔假冒代币转账。
  • 4.0 million 笔极小额转账。

这些转账记录存在于大约 18.2 million 笔交易中,因为攻击者可以把多条记录打包。遭到针对的地址并不等同于人数、被入侵的钱包数或实际损失资金的受害者人数。

分析发现 6,633 笔成功得手的付款,合计至少损失 $83.8 million。有些受害者付款不止一次。检测主要针对部分稳定币,因此损失估计只是该范围内的下限,并非涵盖所有代币或区块链的总额。

实际启示是,仅检查零金额会漏掉相当多的攻击。假冒记录可以模仿有意义的付款,而微额转入可以在真正转移代币的同时引入危险地址。

如何检查你遇到的具体记录

  1. 在正确的网络上打开交易。使用钱包的区块浏览器选项,或 Etherscan、BscScan 等可信浏览器,检查交易状态。读取公开交易详情不需要连接钱包、批准代币、签署消息或输入助记词。
  2. 确认实际资产。区分原生 ETH 或 BNB 与使用这些名称的代币。对于代币,将准确网络和发出事件的合约与可信的发行方资料核对。
  3. 以完整精度查看金额。区分代币数量、交易的原生币价值和法币估值。
  4. 区分交易发送方与事件发送方。若使用智能账户,还要检查钱包操作及权限。其他人支付燃料费并不能证明你的资产没有转移。
  5. 检查整笔交易。查看所有代币转移、原生币转账和有关权限变化。如果浏览器提供交易级余额变化,可用于核对结果。今天余额没有变化是较弱的证据:后续存款或抵消转账可能掩盖先前的转移。
  6. 独立核实目标地址。使用收款人可信的付款信息或此前核实过的通讯录条目。最近的历史记录是需要检查的证据,不是正确目的地的证明。

如果区块浏览器未能清楚显示结果,请向钱包提供商的官方支持团队提供网络和公开交易哈希,并描述你原本预计进行的操作(如果有)。这些信息有助于区分陌生但符合意图的操作与无法解释的支出,同时无需泄露控制钱包的秘密。

检查后应该怎么做

如果只发现孤立的投毒记录

如果钱包支持,隐藏或举报垃圾记录,并避免使用其中的地址。隐藏记录只改变界面,不会抹除区块链历史或撤销权限。

零金额转账可能在零授权额度下发生,因此仅凭这条记录,无需撤销每一项授权或转走全部资金。该记录可能根本没有对应的支出权限可供撤销。绝不要使用代币宣传的网站或陌生人的恢复链接来“清理”钱包。

如果发现可疑的支出权限

通过钱包可信的授权管理功能查看并撤销相关额度。断开网站与钱包的连接,不会撤销其现有的链上代币授权。撤销操作只解决相应权限,无法补救失窃的私钥。

如果真实资产在你不知情的情况下转移

保留交易哈希、网络、受影响资产及相关地址。通过官方支持渠道检查近期签名、授权和钱包操作。

如果有证据表明助记词或私钥已经泄露,应在可信设备上使用全新助记词创建新钱包,并谨慎规划剩余资产的转移。使用已泄露助记词派生出的另一个账户无法解决泄露风险。如果资金自动消失,不要持续充值燃料费:自动盗币程序可能将其取走。

如果你确实签署了付款,但复制了被投毒的目标地址,应记录这种区别。付款可能经过有效签名并成功执行,却发给错误收款人。单凭这种结果不能证明你的私钥被盗。

关于陌生交易的常见问题

攻击者让我支付了燃料费吗?

在普通的地址投毒情形中,攻击者提交交易并支付网络费用。仅仅把你的地址写入代币事件不会向你的账户收费。不过,代付交易和智能账户意味着不能仅凭谁支付费用就判断操作是否无害。应检查实际影响。

如果交易失败了怎么办?

已回滚的代币转账不会完成该次转移,但仍可能产生燃料费。如果钱包使用账户委托,应另外检查:在以太坊上,即使后续执行失败,委托关系仍可能保留。陌生的委托值得审查。

硬件钱包能防止地址投毒吗?

硬件钱包提供了一个在签名前核对目的地的额外途径。但如果你批准了攻击者控制的地址,它并不能让错误目的地变正确。应在可信签名显示屏上,将完整地址与独立核实的收款信息逐一对照。

能阻止陌生人添加此类记录吗?

通常无法阻止第三方向公开地址发送资产或生成涉及该地址的适用记录。钱包和区块浏览器的过滤器可以减少显示内容。保存已核实的收款人,并在付款前检查完整目的地;仅仅隐藏零金额记录,无法识别所有假冒代币或微额转账变体。