上一篇介绍了根据地址类型的最基本的识别方式。这一篇将介绍 Account 模型下的自动化追踪与标记方法。
既然提到了 Account 模型,为此有必要介绍一下区块链交易过程中最常见的两种模型,即,Account 和 UTXO 模型:
Account 是账户余额模型。
Account 作为账户余额模型,与我们日常理解的账户记录方式非常相似,例如:张三付5块钱给李四。
在 Account 模型中表示为:张三Balance - 5 ; 李四Balance + 5 ;
UTXO 是未花费模型。
UTXO是Unspent Transaction Output的缩写,即“未被花费的交易”。一笔UTXO交易,可以有多个转出和多个转入,且转入转出没有对应关系。
例如,张三有6个5块钱,分别给了李四22块、王五5块,自己剩3块钱。
用UTXO记账需要表示为:
输入 -> 张三:6个5块钱;
输出 -> 李四:1个22块钱,王五:1个5块钱,张三:1个3块钱;
这就导致了一个结果,当我们在区块链浏览器中看两种交易模型的交易记录时,其形势有较大差异。例如,ETH 作为 Account 模型的典型代表,它的每笔交易在浏览器里看是这样的:
从区块链浏览器的交易记录中不难看出,每一笔交易都是一对一的方式记录下来的。
而作为UTXO模型的典型代表,BTC的交易记录方式就不太友好了:
交易过程比较明显的看出,地址bc1作为输入,支付给了3GD 一笔BTC,剩下的钱作为零钱找零一样又回到了自己的 bc1 地址中。当然,找零的钱也可以不回到 bc1 而是回到自己所掌控私钥的另一个地址,这也是当前各类钱包App的主流做法,也是保护隐私的一种推荐做法。这样的方式在极大程度上增加了链上资金的追踪难度,不是简单的几条规则就可以识别到的。所以限于篇幅问题,我们先以相对简单的 Account 模型的追踪、标记为入手点。
因为 Account 模型的交易方式与我们所理解的传统交易方式非常相似,基本就是一条链式的资金流转过程:A给B,B给C,C给D ……
我们以黑客盗币追踪为案例来做讲解。当我们假设A地址为黑客地址,即,当出现盗币时,丢失的资金第一笔转入的地址为A,那么,理论上:
A转账给B,B也应为黑客地址
B转账给C,C也为黑客地址
C转账给D,D也为黑客地址
如此反复 ……
(如下图,A至N都为黑地址)
如此简单,按照Account模型的原理来看,这样一路标记下来,就可以在完成交易追踪的同时还标记了一堆新增的黑客地址标签。
但是实际上,并非完全如此。
仅以地址B为例,其实,在很多情况下B并不一定是被黑客所持有的地址,比如,B是一个另受害者,因为贪图便宜而低价交易了黑客盗窃来的资产。或者,B是某个平台的地址,虽被黑客个人使用但并非完全个人持有。在这些情况下如果贸然将B也标记为黑客地址,就会出现错误,而这些错误在一些场景中被使用则可能会造成更大的损失。
所以,对B也需要进行二次判断,以确认是否可将B标记为黑客地址:
B是否有其他标签,尤其是否有“中心化”类别的标签
B是否为首次出现的地址,若不是,历史交易特征是否符合个人地址行为
B地址是否有明显的非个人地址特征,如,B是一个合约地址
即便完成了以上的判断,依然需要对B进行持续监控,以确认其在后续一段时间内是否呈现出非个人地址的交易特征,例如:
B是否进行了零钱整理,将转入资产等量汇聚到了另一个地址上
B地址上资产种类和数量是否多,交易是否频繁
当地址 B 被这一系列的补充规则二次排除之后,才基本具备标记为“黑客地址”的可能性。通过这一系列规则,跟着盗币地址的资金链路一路追下去,可以实现自动化的追踪和地址标记。
上面我们提到了中心化 、零钱整理、个人地址这些名词,可能这些标签定义对于初次接触的读者来说还有些陌生,这也导致上面所描述的整个判断逻辑无法完全应用落地,所以,我们在下一篇会带来关于中心化平台的说明、定义和最常见的两种识别手段。读懂了中心化平台的识别,不但可以解决此处的几个名词问题,还可以更好的完成今天这篇 Account 追踪模型的分析规则。
【本篇完】