从交易所的地址分类和地址挖掘的技术原理入手,详细阐释交易所地址挖掘的具体过程。

原文标题:《交易所数据不透明?别怕,Chain.info 带你探寻交易所地址挖掘全过程》
作者:Chain.info,区块链交易数据服务平台

2018 年 12 月, 区块链透明度研究机构(BTI)发布的报告指出, CoinMarketCap 上交易量排名前 25 的交易所的总成交量为 25 亿美元,而实际成交量仅有 3.24 亿美元,比 CoinMarketCap 上公布的数据少 87% ,而美国头部交易所 Coinbase 甚至没有进入 CoinMarketCap 的前 25 名,交易所刷量的行业「潜规则」也引起了公众对于交易所数据的质疑。

如何解决信息不对称,了解交易所真实资产状况?

通过交易所的一个(或多个)地址找到交易所的所有地址的过程叫做交易所的地址挖掘,本篇文章将会从交易所的地址分类和地址挖掘的技术原理入手,详细阐释交易所地址挖掘的具体过程。

交易所地址分类

为了介绍交易所地址挖掘原理,首先要清楚交易所地址的分类。通常来说,交易所的地址可以分为普通充币地址、热钱包和冷钱包三类,它们的流通方式大致如图所示。

image (43).jpg

(1) 普通充币地址

这类地址占比大概是交易所的地址总数的 99.9% 以上,是每个用户的充币地址,用户可以通过这些地址将交易所外的 Bitcoin 充入这个交易所。之后,这些地址里的钱会去向两个方向:向外输出(有人提币),或者是汇入热钱包。

(2) 热钱包

热钱包是属于交易所的联网钱包,主要作用是负责普通充币地址和冷钱包之间的资金流通以及用户提币。也就是说,普通充币地址与冷钱包不能进行直接的资金流通,用户提币交易是从热钱包转出的。

与普通充币钱包相比,热钱包占比极小,大致数量也就是 10 到 30 之间,但是它的交易数(地址的交易数指这个地址作为输入地址或输出地址的所有交易的次数,下同)极大,与普通充币地址和冷钱包的交易数相差很大的数量级。可以通过这个特征将热钱包和其他地址很好地区分开。

(3) 冷钱包

冷钱包是交易所的离线钱包,它的安全性要高于热钱包,所以,交易所会将大部分的资产存储在冷钱包中。冷钱包只与热钱包进行资金流通,而且单次交易总额比较大(例如超过 100BTC);另外,冷钱包的另一个特点是该地址交易总次数较小(例如小于 1000 次),该地址的合计总收入较大(例如大于 10000BTC)。

交易结构介绍

Bitcoin 的交易使用 UTXO (Unspent Transaction Output)模型。UTXO 即未花费交易输出,每一个 UTXO 属于一个地址,一个地址可以包含多个 UTXO,每一个 UTXO 是不可拆分的。在交易时,发起交易的用户使用属于自己的 UTXO 作为交易输入,构造新的 UTXO 作为交易输出。交易发起者使用私钥解锁并花费自己的 UTXO,使用其他地址的公钥将新构造的 UTXO 与这个地址锁定。每个 UTXO 在被作为交易输入使用过之后就被移出 UTXO 集合。除了比较特殊的 coinbase 交易,普通的交易都包含一个或多个输入以及一个或多个输出。

为了方便理解,我们用一个实际的交易为例进行讲解:

为了摸清交易所的真实资产状况,数据公司都用了哪些狠招?

这是一笔普通的交易,左侧有一个输入地址 1B3AHCVxKkRern499D5DXQdZ6R3qH6asY6 (以下简称 1B),右侧有两个输出地址 19TAUBkne9x3CrPVYDUtwCNuEDsZrY1ddu (以下简称 19)和 35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP (以下简称 35)。

我们假设地址 1B 的私钥属于某一个用户 U1,地址 35 的私钥属于另一个用户 U2。当 U1 想要向另一个用户 U2 转账 0.005BTC 时,U1 使用地址 1B 的一个金额为 1BTC 的 UTXO 作为交易输入,利用地址 35 的公钥将一个金额为 0.005BTC 的 UTXO 锁定到地址 35。这样,用户 U2 就多了一个金额为 0.005BTC 的 UTXO,也就是说用户 U2 的余额多了 0.005BTC,而作为交易输入的 UTXO 已经被花费,不再属于 UTXO 集合,也就是说用户 U1 的余额少了 1BTC。

这样的交易还不完整,交易的输入金额为 1BTC,交易的输出金额目前只有 0.005BTC,那么剩余的 0.995BTC 去哪儿了呢?如果不需要交易费,那么 0.995BTC 将作为找零金额找回属于 U1 的地址中。但实际上,交易发起者 U1 还需要支付一定的交易费,所以就像图中一样,一个金额为 0.9949853BTC 的 UTXO 被锁定到地址 19 中,地址 19 是一个找零地址,由此我们可以知道地址 19 也属于用户 U1。

这样就是一个完整的转账找零交易,图中左侧地址为输入地址,地址后的金额为这笔交易中花费的属于该输入地址的某个 UTXO 的金额;图中右侧地址为输出地址,地址后的金额为新生成的锁定在该输出地址中的 UTXO 的金额。

如果用户 U1 给 U2 转账的金额较大,U1 的单个 UTXO 不足以支付这笔转账金额时,U1 可以用其某个地址的多个 UTXO 或者多个地址的多个 UTXO 作为交易的输入来完成交易,这就会出现下文中提到的输入侧有多个输入,并且这些输入都属于同一个主体或者同一个地址的情况。

地址挖掘技术原理

为了理解交易所地址挖掘原理,还要了解 Bitcoin 地址挖掘的技术原理。Bitcoin 地址挖掘包括纵向挖掘、前向挖掘和后向挖掘。纵向挖掘是被挖掘地址作为交易的输入地址,挖掘同为输入的其他地址;前向挖掘是被挖掘地址作为交易的输入地址时,挖掘输出侧的特征地址;后向挖掘是被挖掘地址作为交易的输出地址,挖掘输入侧的特征地址。

(1)纵向挖掘

定义:以被挖掘地址为中心,挖掘作为同一个交易的输入的其他地址。根据第 2 小节中的 Bitcoin 交易特性可知,一笔交易中出现在输入侧的多个地址通常属于属于同一个主体。因此,若在某个交易中,被挖掘地址出现在了输入一侧,和它一起出现在输入侧的其它地址,可以被认为是属于同一个主体。纵向挖掘的详细数学原理可见参考文献 [1]。

例如:txid=25836a89ee24ce0b3ca7c62a525139fa59aebce0ffd222474b484bb73802c76f

640 (1).jpg

红框内的地址是被挖掘地址,黄框内的其他地址因为和被挖掘地址在同一个交易中一起作为了输入方,所以认为它们的所有者是同一个主体。

(2)前向挖掘

定义:被挖掘地址必须出现在输入一侧,且输入侧地址数不为二,输出侧地址数一定为二。其中,有一个输出地址的 bitcoin 值拥有 4 位以上小数时,那么符合条件的这个地址,和输入方一样属于同一个主体。

例如:txid=20c0430466a876e84d75a8319cfe9dcf9a36b2f8773c7bbfb14489919bbb29c0

640 (2).jpg

红框内的地址是被挖掘地址,它出现在输入一侧,而且输入侧地址数不为 2。输出侧地址数为 2,且有一个输出地址的 bitcoin 值拥有 4 位以上小数,符合前向挖掘的条件,那么黄框内的地址和红框内的地址属于同一个主体。

前向挖掘很好理解,其实这是一笔普通的转账找零交易,拥有 4 位以上小数的输出地址其实是找零地址(由于只有一个输入,且交易费必须要输入方承担,交易费通常金额较小,所以扣除交易费后的找零金额通常有 4 位以上小数)。找零地址和输入地址属于同一个主体,由此可以挖掘出特征地址。

(3)后向挖掘

定义:被挖掘地址必须出现在输出一侧,且输入侧地址数为一,输出侧地址数一定为二。其中,输出侧的被挖掘地址是热钱包地址(之后将给出热钱包的挖掘方法),且在该笔交易中发送给热钱包地址的金额一定要大于 100 个 BTC,那么符合条件的交易中的三个地址属于同一个主体,并且输入侧的地址可能是冷钱包地址。

例如:txid= ade2be579a0c58d38a6a812ce85ed96980313c3aca59d762a1779233bd64ede4

640 (4).jpg

红框内是被挖掘地址,它是一个热钱包地址,它出现在输出一侧,且输入侧地址数为 1 (多个输入都是同一个地址,因为是同一个地址的不同 UTXO),输出侧地址数为 2,且转入红框地址的金额大于 100 个 BTC。通过后向挖掘,可以知道黄框内的两个地址和红框内的地址属于同一个主体,且输入侧的地址可能是冷钱包地址。

如何理解后向挖掘呢?其实这种交易是冷钱包向热钱包转账的过程。在某些情况下,例如当用户想要提币而热钱包的余额不够时,交易所会将冷钱包中的 bitcoin 转入热钱包,这种交易的数量不多,但通常金额都比较大(例如大于 100BTC),利用这种特征可以挖掘出交易所的冷钱包。

挖掘过程

有了前面的基础,我们接下来可以正式开始介绍 Bitcoin 交易所的地址挖掘过程了。大致可以分为三个流程:

(1)挖掘交易所的所有普通充币地址和热钱包
(2)筛选出热钱包
(3)挖掘出冷钱包

(1)挖掘交易所的所有普通充币地址和热钱包

交易所的充币地址是很容易获得的,我们将这个地址作为地址挖掘的突破口。利用纵向挖掘获得一个样本库,再以这个样本库为蓝本,继续进行纵向挖掘,样本库会进一步扩充。不断重复这个过程直到样本库不再扩大。此时,基本可以认为这个交易所的所有普通充币地址和热钱包都包含在这个样本库中(冷钱包不确定是否在这个库里,不过不重要,冷钱包,会有新的挖掘方案)。

(2)筛选出热钱包

在样本库中包含了交易所的所有普通充币地址和热钱包(可能还有冷钱包),通过热钱包交易次数极大的特点,采用的是在样本库中找到区域最大值的方法,可以从样本库中筛选出热钱包。

我们对火币交易所挖掘到的地址以及地址对应的交易量数据进行如下处理:以每个地址编号为横轴,以地址的交易数为纵轴,画出地址与交易量的分布图,如下图所示:

640 (6).jpg

从图中可以很明显地看到,有橘黄色标注的地址为热钱包,因为它们的交易数量远远大于其他地址(其他地址的交易数量很少,有些在图中甚至无法看到)。

(3)挖掘出冷钱包

冷钱包的挖掘起点是热钱包。首先,使用后向挖掘,也就是在一个交易中,作为唯一的输入,向热钱包里发送过超过 100 个 BTC,这样的输入地址有可能是冷钱包地址。之后,根据冷钱包的另一个特点:该地址交易次数较小(一般小于 1000),合计总收入较大(一般大于 10000BTC)再做一次过滤,就能找到冷钱包,或者曾经使用过的冷钱包(balance < 10 个 BTC)。最后,再根据前向挖掘原理和上述限制条件,就能继续挖掘出更多的冷钱包。

通过以上步骤,我们就可以通过交易所的一个普通充币地址找到该交易所的所有地址,并从中挖掘出该交易所的热钱包和冷钱包。

地址挖掘实例

在了解了挖掘过程之后,我们可以通过一个简单的例子来加深对于交易所地址挖掘的理解,这个例子通过火币的一个普通充币地址找到了火币的一个热钱包和一个冷钱包,具体过程如下:

(1)通过普通充币地址找到一个热钱包

首先,我们获得了一个火币的普通充币地址 :12V9PLbaaewZmwFogen1bighovFZvMW138,之后,我们找到交易 087e0449d86858ba15d4549235240e900c198bd030e2eb26a6418525135dbe4b

640 (8).jpg

由纵向挖掘的原理可知,这个交易左侧的地址可以认为都是火币交易所的地址,在这些地址中,我们注意到黄框内的地址交易数远远高于其他地址,如图所示

640 (10).jpg

由此我们可以判断该地址 1LAnF8h3qMGx3TSwNUHVneBZUEpwE4gu3D 是火币交易所的一个热钱包。

(2)通过热钱包找到一个冷钱包

在热钱包 1LAnF8h3qMGx3TSwNUHVneBZUEpwE4gu3D 的基础上继续挖掘,找到交易 ade2be579a0c58d38a6a812ce85ed96980313c3aca59d762a1779233bd64ede4

640 (13).jpg

在这个交易中,地址 3Cbq7aT1tY8kMxWLbitaG7yT6bPbKChq64 作为唯一的输入,向热钱包里发送过超过 100 个 BTC,根据后向挖掘原理,可以知道这样的输入地址有可能是冷钱包地址,因此地址 3Cbq7aT1tY8kMxWLbitaG7yT6bPbKChq64 可能是火币交易所的一个冷钱包。

参考文献

[1] Ermilov D, Panov M, Yanovich Y. Automatic Bitcoin address clustering[C]//2017 16th IEEE International Conference on Machine Learning and Applications (ICMLA). IEEE, 2017: 461-466.

来源链接:mp.weixin.qq.com