比特币粉尘交易攻击,就是在比特币网络中有很多交易金额极少,手续费极低甚至是免费的交易,造成了比特币网络的拥堵。这也是比特币网络的威胁之一。可能大家会奇怪,比特币转账都是要收取手续费的呀,怎么会有免费的?其实在比特币交易手续费的设置规则里是存在免手续费的情况,粉尘攻击一直以来都是区块链网络的威胁之一,大量的粉尘交易攻击,不仅会阻塞比特币网络,同时也会对各大矿池的正常运营产生威胁。
为什么会影响矿池?因为钱包或者交易所等基础设施,如果一不小心构造出一个粉尘交易,是无法广播到网络被矿工打包的,这样会严重影响到用户体验。另外一方面,粉尘交易也和区块链网络安全息息相关,如果如果网络中充斥着一些微不足道的交易,而矿工们毫无差别地打包交易,那么这些价值小,但是总体体积很大的交易,就会阻碍到其它正常交易的打包确认。粉尘交易也可以看成是区块链网络上DDOS攻击的一种,攻击者通过发送许多这样小金额的交易,来堵塞整个网络。
试想一下,在春节做火车或者飞机的时候,我们都需要过安检,安检口是免费的,安检口的数量是固定的,人流却有很多,很多人往往因为拥堵而耽误了行程。在这个时候如果有一群无所事事的人来来回回在安检口排队,这就极大的影响正常秩序。粉尘攻击就是指“无聊在安检口排队的人"。
再举个简单的例子:
情况一:A地址转给B地址1个btc;
情况二:A地址转给B/C/D地址各0.0001btc;
如果按照传统机构按交易金额百分比的形式收取,情况一的手续费肯定是要高于情况二的手续费。但是在比特币网络中,情况二转出的地址多,而每一笔交易,无论金额大小,交易的字节数都是差不多的,所以情况二交易数据的字节数要比情况一的多,所以情况二的手续费要远高于情况一。而情况二,恰恰是造成粉尘攻击的原因。
比特币的每笔交易手续费默认最少是0.0001比特币的,如果你转账的金额太小或者是刚刚挖出来不久的新币(币龄很小),那么必须要付手续费。如果你转出的金额少于0.01比特币,也必需付0.0001比特币手续费。如果你需要大量的小额比特币转账,又想免费转出,这时候你可以加一个数额大的、币龄高的比特币金额,就会将平均优先级提高,从而可以免费转出比特币。
所以,粉尘攻击一方面是比特币的设计规则有漏洞,导致有人可以利用,允许极少金额的交易。另一方面,有人频繁恶意地进行小额交易,才会造成比特币网络的拥堵。因为,比特币的交易区间只有1M的大小,所以,那么多手续费极低甚至免费的小额交易,拥挤在比特币网络,必然会导致比特币网络的拥堵,而粉尘攻击最大的危害就是导致比特币网络拥堵。
北京时间2018年11月16日凌晨02:16,BCH公链正式分叉产生了ABC和SV两条公链,并从556767块开始各自独立运行。
截止目前,ABC链的块高度为:556865,SV为:556823,ABC暂时领先42块。
但据区块网络监测发现,BCH分叉之后的两条链ABC和SV上均存在一些容量为几千笔交易的异常区块,其中包含大量在相同地址间互转的垃圾小额(大约0.0002BCH或更小)的交易。
例如:ABC链上的556846和556843块,存在一地址qqgusvva8hnjpycgm0pfl6ywlmrcjvad5qlgqtaay5,发起了大量转给自己的小额交易;SV链上的556821等块,也有大量不同地址发起转给自己的小额交易。
莱比特矿池CEO江卓尔今天在微博表示,由于遭受大量的粉尘交易攻击,各BCH矿池的mempool(内存池)都在急剧增大,已经高达3000个交易了。
这些粉尘攻击将会造成BCH网络阻塞,进而拉高交易费用。
既然知道了粉尘交易的定义,那么我们就可以按照定义,避免构造出粉尘交易了。首先,可以在构造交易的过程中,根据交易的类型,计算出交易的最低金额,同时对每个输出进行判断,如果低于该金额,则不能继续构造该笔交易。特别的,如果这个输出刚好发生在找零上,且金额对于你来说不太大,则可以通过舍弃该部分的粉尘输出,以充作交易手续费来避免构造出粉尘交易。