链上纠纷里常能见到这样一张图。左边一个地址,右边一个交易所图标,中间几十根箭头,底下一行字写着“资金最终流向某某”。画图的人很笃定,看图的人也容易被说服,毕竟每根箭头都能点开,背后确实有一笔公开交易。
麻烦出在箭头和箭头之间。单看每一根都是真的,连起来讲的故事却可能是错的。钱进了一个每天收付几千笔的地址,下一笔转出去的是不是同一笔钱,链上没有写。地址旁边那个“某某交易所”的标签,也不是链本身给的。
这篇想讲清楚的判断很简单。一笔链上记录能牢牢证明的,是某个代币合约里,一个地址的余额少了多少,另一个地址多了多少,发生在哪个区块。从这里每往外多走一步,认定地址属于谁也好,认定两笔是同一笔钱也好,推测平台内部发生了什么也好,都需要额外的证据,或者一条能说出口的假设。走得越远,假设越多,结论就该说得越轻。
起点还是系列里反复用到的那笔 7.49 USDT。先看它本身能钉住什么,再看给自己对账时哪里容易算错,最后沿着地址往外走,看路在哪几个地方断开。
一笔记录能钉住的东西,其实很具体
打开这笔公开交易,它所在的区块高度是 87,667,274,北京时间为 2026 年 11 月 3 日 11 点 09 分 09 秒,转账数量为 7.49 USDT。
发起地址是 TQxx9U2uwaNy6p2RN3JpZWTar85bQzp1hj,接收地址是 TApigua4PHAx8dnSiuFgPapWsgR2NvVSf5。代币合约是 TRON 上的 USDT 合约 TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t。名字和图标谁都可以仿,合约地址才能把具体代币区分开。看见三个字母 USDT 就往下推理,第一步就可能跟错了对象。
第三篇拆过,这笔交易的外层是在调用 USDT 合约,外层的接收方是合约本身。真正说明谁付给谁的,是回执里那条 Transfer 事件。事件日志 是合约执行时留下的记录,这一条写着发送方、接收方和原始数量 7,490,000。USDT 用六位小数,7,490,000 除以 1,000,000,就是 7.49。
把这些拼起来,可以写出一句很硬的话。在 TRON 主网第 87,667,274 号区块,USDT 合约执行成功,发起地址的余额少了 7.49,接收地址的余额多了 7.49。
这句话里没有人名,没有用途,也没有这笔钱后来去了哪。我们不知道两个地址属于哪家公司还是哪个人,也分不清这是一顿饭钱还是朋友还款。后面所有的追踪,都是在这句话的基础上往外加东西,加的每一样都得说清楚是从哪来的。
所以记录的时候,网络和交易编号要一起记。只记“昨天转的七块多”不够,截图上的时间可能是另一个时区,同样的金额一天也可能出现很多次。交易编号像一张随时能重新调出来的原始收据,截图只是这张收据的一张照片。
先给自己对账,一笔交易可能拆成好几行
大多数人往链上翻记录,起因并不是追查别人,而是想核对自己的几笔收付款。简单转账一笔交易对应一行,好办。到了兑换就不一样了。
第七篇讲过兑换。用 USDT 换另一种代币时,你把 USDT 付给资金池,资金池再把另一种代币付给你,同一个交易编号下至少有两条转移记录,方向相反。如果路线经过两个资金池,行数还会更多。
这里有两种常见的算错方式。一种是看见交易编号重复,以为是导出重复,删得只剩一行,真实发生的另一笔转移就没了。另一种是把同一交易下的所有行不分代币、不分方向加在一起,付出去的 USDT 和收回来的另一种代币混成了一个毫无意义的数。
稳妥的做法是用交易编号加日志位置标记每一行。日志位置就是这条事件在交易回执里排第几,同一笔交易里每条事件的位置都不同。有了它,既不会把一笔交易重复算几次,也不会误删真实的转移。然后按代币合约筛选,再看接收方是不是自己的地址,转入和转出分开列。
执行状态也要一起看。发出请求、进入区块、合约执行成功和达到确认要求,是四件不同的事。执行失败的调用会留下记录,甚至可能扣了手续费,但代币没有转过去,不能算进收付款。
原始数量最好保留整数和精度,展示时再换算。把 7,490,000 直接抄进表格又忘了除,账上就多出七百多万,钱没多,故事倒是立刻精彩了。四舍五入也要小心,两笔金额抹掉小数后相同,并不说明它们真的相同。
时区是另一个坑。这笔交易北京时间 11 点 09 分 09 秒,换成 UTC 要减 8 小时,是 3 点 09 分 09 秒。一个页面显示北京时间,另一个显示 UTC,两笔记录的先后就可能看着反了过来。先统一时区,不要急着发明一套时光旅行理论。原始时间和换算后的时间可以都留着,跨链对照时尤其用得上。
最后是时间点。浏览器里显示的是今天的余额,问的却常常是某个历史时刻。一个地址去年收到 100,今天余额是零,中间可能发生了很多正常支出。只截去年入账和今天清零两张图,跳过中间所有记录,判断不了钱去了哪里。核对一段时间,要先定好起点和终点,然后用起点余额加上区间内的转入,减去区间内的转出,看能不能对上终点余额。涉及 TRX 时,手续费和质押也会影响不同的余额分类,单算收和付有时对不上。
这样整理出的表,回答的是这个地址收付了多少。它回答不了钱包主人赚了多少,自己给自己的另一个地址转账,也会照样出现在里面。
往外走第一步,A 转给 B 不等于 A 就是 B
现在离开自己的账,看别人的地址。假设 A 给 B 转了 100 USDT。这次转移确实发生了,但 A 和 B 可能是同一个人的两个钱包,也可能分别属于顾客和商家。两种解释画出来是同一根箭头。
接着 B 又给 C 转了 100 USDT,时间也很近。这个联系值得记下来,却不能自动写成“A 通过 B 给 C 转钱”。B 原来可能就有余额,也可能同时替很多人收付款。时间和金额接近能当线索,补不上缺失的证据。
更根本的问题在于,USDT 没有编号。合约里记的只是每个地址名下的一个数字,A 的 100 进了 B 的账,就和 B 原来的钱合成了一个数。B 转出去的时候,合约只把这个数减掉 100,并不说明减掉的是哪一部分。
算一下就知道麻烦在哪。假设 B 原本有 50 USDT,收到 A 的 100 之后变成 150,然后转给 C 100。C 收到的这 100 里,有多少是 A 的钱。
按先进先出算,先出去的是 B 原来那 50,再加上 A 的 50,答案是 50。按比例算,A 的钱占 B 余额的 100 ÷ 150,C 收到的里面就有 100 × 100 ÷ 150 ≈ 66.67。按后进先出算,最后进来的先出去,答案是整整 100。同样三条记录,三种答案,差别全部来自分析的人选了哪个假设,链上没有替任何一种背书。
可以拿银行卡余额来类比。工资和朋友还的钱进了同一张卡,第二天刷卡买东西,没人能说清刷掉的是工资还是那笔还款。这个类比在“钱合并成一个数”这点上成立。不同的是,银行流水只有你和银行看得到,链上每一笔进出谁都能查。所以链上追踪比银行卡多了大量线索,但在“哪一块钱来自谁”这个问题上,它同样只能靠假设。

有些分析图会把多个地址圈在一起,标成一个实体。这种归组可能有额外证据,比如同一家机构公开过这些地址,也可能只是分析者根据交易模式做的推测。读图时多问一步归组依据是什么。图上没有解释,就先把它当成假设,别让一个漂亮的圆圈代替证明。
记录能固定数量、时间和路径,让解释有东西可以核查。A、B、C 分别属于谁,转账是付款、归集还是调仓,都要额外证据。区块浏览器的查询按钮很多,唯独没有“显示此人内心活动”这一项。
走到交易所门口,路基本就断了
假设 B 在浏览器上被标注成某个平台的地址。这个标签可以记下来,同时记下它来自哪个浏览器或数据服务。标签是这些服务提供的辅助信息,不是链本身替地址做的身份公证。
就算标签没错,追踪到这里通常也走不下去了。原因在于平台的记账方式。常见做法是给每个用户分配一个充值地址,用户的钱到了之后,平台再把各个充值地址里的钱归集到少数几个大钱包。用户提现时,平台从自己的出款钱包统一付出去。
中间这段,用户之间的买卖、划转,大多只是平台数据库里的数字变化,不会逐笔上链。链上能看到的只有两头,一头是很多人的钱归集进去,一头是很多笔提现付出来。
于是会出现一种很像证据的巧合。有人往平台充了 100 USDT,过了一小时,平台出款钱包给某个地址付了 100 USDT。同一个出款钱包一天里可能有大量一模一样的 100 USDT 提现,它们属于谁、和那笔充值有没有关系,只有平台内部账本知道,链上看不出来。把进门前的一笔和出门后金额相同的一笔直接连起来,很容易把别人的钱接进自己的故事。
同样的道理,地址很活跃也不等于可疑。交易所热钱包、支付服务、兑换合约都可能频繁收付。一个地址一天几千笔,首先说明它很忙。至于忙什么,还要识别合约功能、交易类型,再找可靠的外部信息。
反过来,如果是自己的充值没到账,追踪的方向就简单多了。把网络、交易编号、接收地址、代币合约、数量和时间交给平台核对,比截一张红圈套红圈的资金图更容易推进。链上记录完整,只说明钱到了平台给你的地址,平台内部有没有给你入账,要平台自己查。
跨链之后,要接上另一边的收据
第五篇讲过桥。源链上的锁定或销毁只是跨链流程的一段,目标链上的释放或铸造是另一条链上的另一笔交易,交易编号完全不同。拿 TRON 的交易编号去另一条链搜索,搜不到是正常的,不能据此认定资金消失。
钱经过桥时,先保存桥的订单或消息编号,再去找目标网络和目标交易。不同桥的对应方式不一样,有的页面会直接给出两边的链接,有的要从事件里找消息标识。两边的对应关系要来自具体机制,不能只凭金额差不多。
跨链服务还可能先兑换再转移,目标侧到手的就是另一种资产,数量也被费用扣过。追踪时要把每一步写出来。USDT 换成 USDC,跨到另一条链,再兑换一次,已经不是一句“钱从 A 到了 B”能交代清楚的过程。
找不到目标交易时,先写下能确认的状态。“源链成功,目标链待处理”就是一个有用的描述,没必要急着补出一个完整故事。更不要因为陌生客服说“再转一笔才能解冻”,就继续往里打钱。
记录本身是真的,也可能是专门做给你看的
前面说的都是自己看错。还有一种情况,是别人故意让你看错。
浏览器和钱包里的历史记录,不全是你主动发起的。任何人都可以往一个公开地址转代币,这条记录会实实在在地出现在你的列表里。它是真的,但它出现在那里,就是为了误导你。
FBI 丹佛分局 2024 年 4 月的一则提醒里描述过这种代币冒充骗局。骗子仿冒 USDT 这类常见代币,再用和受害者往来过的地址很像的地址发过来,污染转账记录,指望用户下一次转账时不核对完整地址,把钱转进骗子的地址。用户以为自己在复用熟悉的收款人,其实复制的是对方准备的诱饵。
这种骗局便宜,是因为两样东西都不难造。第一样是相似地址。钱包为了省地方,经常只显示地址开头和结尾几位。TRON 地址用 Base58 编码,可用的字符有 58 种,攻击者让电脑反复生成新地址,直到结尾几位和你常用的收款地址一样。尾部每多对上一位,平均要试的次数大约乘以 58。对上 4 位,大约是 58 的 4 次方,也就是 11,316,496 次,一千一百多万次。这个量对电脑来说并不算多。开头那个 T 所有 TRON 地址都一样,不用试,开头要是再多对上几位,次数还得接着往上乘。
第二样是仿冒代币。第三篇提醒过,要看 Transfer 事件是哪个合约发出来的。原因就在这里,一个自己写的代币合约,可以在事件里填它想填的地址,也可以给自己起名叫 USDT。只看列表里的代币名字和地址头尾,这些记录和真的看起来差不多。

应对的办法不复杂。确认收款人时展开完整地址,回到之前已经确认过的渠道核对,不要从历史记录里顺手复制,也不要因为两头相似就把中间当装饰。陌生代币的名称里有时夹带网址或领取提示,那只是别人写进资产信息的文字。为了弄清一笔异常转入,没必要打开它宣传的网站,更没必要连接钱包去“领回余额”。
这些习惯也有管不到的地方。如果你核对用的那个渠道本身出了问题,比如对方的聊天账号被盗,发来的就是骗子的地址,你按完整地址逐位核对,核对的也是一个错的答案。链上转账成功后无法撤回,所以金额大的时候,换一个独立渠道再确认一次,比多看几眼同一个来源更有用。
自己的转账出了错,记录尤其要保存好。不要为了让历史看着整洁,把交易编号、聊天和平台回执一起删了。查公开记录不需要助记词,任何声称要靠你的助记词才能帮忙追回的人,都没必要继续聊下去。
回到那张图,把事实和猜测分两列写
追踪到最后,最有用的工具往往只是一张普通表格。每行记录网络、交易编号、时间及时区、代币合约、数量、发送方、接收方和执行状态,需要拆分事件时再加上日志位置。不必一开始就画出一张宇宙星图。
旁边再留两列,一列写“已经看到的记录”,一列写“还不确定的地方”。比如前一列写源链交易成功,后一列写目标链是否完成尚未找到。又比如前一列写 B 向 C 转了 100 USDT,后一列写这 100 里有多少来自 A,取决于采用哪种算法。过两天再打开,就不会把当时的猜测误认成已经查实的事实。

那笔 7.49 USDT 放进这张表,前一列能填满,数量、地址、合约、区块和执行结果都清清楚楚。后一列也是满的,双方是谁,这钱用来干什么,我们一概不知道。小额交易不必硬凑戏剧性,大额交易也不会自动附带内幕。
要把查询结果发给别人,优先提供能重现的公开交易链接,说清楚具体发现了什么。自己的平台订单、联系方式这类非公开信息,不必为了显得证据充分全部贴出来。链上可以公开核查,不等于生活里的每个细节都应该公开。
下次再有人发来开头那种资金流向图,可以先挑其中一根箭头,问它对应哪个网络、哪笔交易、哪个代币合约。能点回原始记录,这根箭头就站得住。再挑两根相邻的箭头,问把它们连在一起的依据是什么。如果回答只是时间差不多、金额差不多,那这里就是故事和记录的分界线,后面的部分,等证据够了再讲。
这个系列从收第一笔 USDT 开始,一路看过能量、交易回执、桥、授权、兑换和备份。翻回去看,每一篇反复在做的,都是把页面上的一句说法换回一条能点开的链上记录,再看清这条记录到底说了什么,没说什么。