摘要:例如:txid=ade2be579a0c58d38a6a812ce85ed96980313c3aca59d762a1779233bd64ede4红框内是被挖掘地址,它是一个热钱包地址,它出现在输出一侧,且输入侧地址数为1(多个输入都是同一个地址,因为是同一个地址的不同UTXO),输出侧地址数为2,且转入红框地址的金额大于100个BTC。...
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-1.jpg)
2018年12 月, 区块链透明度研究机构(BTI)发布的报告指出, CoinMarketCap 上交易量排名前 25 的交易所的总成交量为 25 亿美元,而实际成交量仅有 3.24 亿美元,比 CoinMarketCap 上公布的数据少 87% ,而美国头部交易所 Coinbase 甚至没有进入 CoinMarketCap 的前 25 名,交易所刷量的行业“潜规则”也引起了公众对于交易所数据的质疑。
如何解决信息不对称,了解交易所真实资产状况?
通过交易所的一个(或多个)地址找到交易所的所有地址的过程叫做交易所的地址挖掘,本篇文章将会从交易所的地址分类和地址挖掘的技术原理入手,详细阐释交易所地址挖掘的具体过程。
交易所地址分类
为了介绍交易所地址挖掘原理,首先要清楚交易所地址的分类。通常来说,交易所的地址可以分为普通充币地址、热钱包和冷钱包三类,它们的流通方式大致如图所示。
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-2.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交易,普通的交易都包含一个或多个输入以及一个或多个输出。
为了方便理解,我们用一个实际的交易为例进行讲解:
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-3.jpg)
这是一笔普通的交易,左侧有一个输入地址
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
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-4.jpg)
红框内的地址是被挖掘地址,黄框内的其他地址因为和被挖掘地址在同一个交易中一起作为了输入方,所以认为它们的所有者是同一个主体。
(2)前向挖掘
定义:被挖掘地址必须出现在输入一侧,且输入侧地址数不为二,输出侧地址数一定为二。其中,有一个输出地址的bitcoin值拥有4位以上小数时,那么符合条件的这个地址,和输入方一样属于同一个主体。
例如:txid=
20c0430466a876e84d75a8319cfe9dcf9a36b2f8773c7bbfb14489919bbb29c0
红框内的地址是被挖掘地址,它出现在输入一侧,而且输入侧地址数不为2。输出侧地址数为2,且有一个输出地址的bitcoin值拥有4位以上小数,符合前向挖掘的条件,那么黄框内的地址和红框内的地址属于同一个主体。
前向挖掘很好理解,其实这是一笔普通的转账找零交易,拥有4位以上小数的输出地址其实是找零地址(由于只有一个输入,且交易费必须要输入方承担,交易费通常金额较小,所以扣除交易费后的找零金额通常有4位以上小数)。找零地址和输入地址属于同一个主体,由此可以挖掘出特征地址。
(3)后向挖掘
定义:被挖掘地址必须出现在输出一侧,且输入侧地址数为一,输出侧地址数一定为二。其中,输出侧的被挖掘地址是热钱包地址(之后将给出热钱包的挖掘方法),且在该笔交易中发送给热钱包地址的金额一定要大于100个BTC,那么符合条件的交易中的三个地址属于同一个主体,并且输入侧的地址可能是冷钱包地址。
例如:txid=
ade2be579a0c58d38a6a812ce85ed96980313c3aca59d762a1779233bd64ede4
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-5.jpg)
红框内是被挖掘地址,它是一个热钱包地址,它出现在输出一侧,且输入侧地址数为1(多个输入都是同一个地址,因为是同一个地址的不同UTXO),输出侧地址数为2,且转入红框地址的金额大于100个BTC。通过后向挖掘,可以知道黄框内的两个地址和红框内的地址属于同一个主体,且输入侧的地址可能是冷钱包地址。
如何理解后向挖掘呢?其实这种交易是冷钱包向热钱包转账的过程。在某些情况下,例如当用户想要提币而热钱包的余额不够时,交易所会将冷钱包中的bitcoin转入热钱包,这种交易的数量不多,但通常金额都比较大(例如大于100BTC),利用这种特征可以挖掘出交易所的冷钱包。
挖掘过程
有了前面的基础,我们接下来可以正式开始介绍Bitcoin交易所的地址挖掘过程了。大致可以分为三个流程:
挖掘交易所的所有普通充币地址和热钱包
筛选出热钱包
挖掘出冷钱包
(1)挖掘交易所的所有普通充币地址和热钱包
交易所的充币地址是很容易获得的,我们将这个地址作为地址挖掘的突破口。利用纵向挖掘获得一个样本库,再以这个样本库为蓝本,继续进行纵向挖掘,样本库会进一步扩充。不断重复这个过程直到样本库不再扩大。此时,基本可以认为这个交易所的所有普通充币地址和热钱包都包含在这个样本库中(冷钱包不确定是否在这个库里,不过不重要,冷钱包,会有新的挖掘方案)。
(2)筛选出热钱包
在样本库中包含了交易所的所有普通充币地址和热钱包(可能还有冷钱包),通过热钱包交易次数极大的特点,采用的是在样本库中找到区域最大值的方法,可以从样本库中筛选出热钱包。
我们对火币交易所挖掘到的地址以及地址对应的交易量数据进行如下处理:以每个地址编号为横轴,以地址的交易数为纵轴,画出地址与交易量的分布图,如下图所示:
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-6.jpg)
从图中可以很明显地看到,有橘黄色标注的地址为热钱包,因为它们的交易数量远远大于其他地址(其他地址的交易数量很少,有些在图中甚至无法看到)。
(3)挖掘出冷钱包
冷钱包的挖掘起点是热钱包。首先,使用后向挖掘,也就是在一个交易中,作为唯一的输入,向热钱包里发送过超过100个BTC,这样的输入地址有可能是冷钱包地址。之后,根据冷钱包的另一个特点:该地址交易次数较小(一般小于1000),合计总收入较大(一般大于10000BTC)再做一次过滤,就能找到冷钱包,或者曾经使用过的冷钱包(balance
通过以上步骤,我们就可以通过交易所的一个普通充币地址找到该交易所的所有地址,并从中挖掘出该交易所的热钱包和冷钱包。
地址挖掘实例
在了解了挖掘过程之后,我们可以通过一个简单的例子来加深对于交易所地址挖掘的理解,这个例子通过火币的一个普通充币地址找到了火币的一个热钱包和一个冷钱包,具体过程如下:
(1)通过普通充币地址找到一个热钱包
首先,我们获得了一个火币的普通充币地址
:12V9PLbaaewZmwFogen1bighovFZvMW138,之后,我们找到交易
087e0449d86858ba15d4549235240e900c198bd030e2eb26a6418525135dbe4b
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-7.jpg)
由纵向挖掘的原理可知,这个交易左侧的地址可以认为都是火币交易所的地址,在这些地址中,我们注意到黄框内的地址交易数远远高于其他地址,如图所示
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-8.jpg)
由此我们可以判断该地址
1LAnF8h3qMGx3TSwNUHVneBZUEpwE4gu3D是火币交易所的一个热钱包。
(2)通过热钱包找到一个冷钱包
在热钱包
1LAnF8h3qMGx3TSwNUHVneBZUEpwE4gu3D的基础上继续挖掘,找到交易
ade2be579a0c58d38a6a812ce85ed96980313c3aca59d762a1779233bd64ede4
![交易所数据不透明?一篇文章带你探索挖掘交易所地址的全过程](/images/20240118/6768764863943541256-9.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.