" />
比特幣粉塵交易攻擊,就是在比特幣網(wǎng)絡(luò)中有很多交易金額極少,手續(xù)費(fèi)極低甚至是免費(fèi)的交易,造成了比特幣網(wǎng)絡(luò)的擁堵。這也是比特幣網(wǎng)絡(luò)的威脅之一??赡艽蠹視?huì)奇怪,比特幣轉(zhuǎn)賬都是要收取手續(xù)費(fèi)的呀,怎么會(huì)有免費(fèi)的?其實(shí)在比特幣交易手續(xù)費(fèi)的設(shè)置規(guī)則里是存在免手續(xù)費(fèi)的情況,粉塵攻擊一直以來(lái)都是區(qū)塊鏈網(wǎng)絡(luò)的威脅之一,大量的粉塵交易攻擊,不僅會(huì)阻塞比特幣網(wǎng)絡(luò),同時(shí)也會(huì)對(duì)各大礦池的正常運(yùn)營(yíng)產(chǎn)生威脅。
為什么會(huì)影響礦池?因?yàn)殄X包或者交易所等基礎(chǔ)設(shè)施,如果一不小心構(gòu)造出一個(gè)粉塵交易,是無(wú)法廣播到網(wǎng)絡(luò)被礦工打包的,這樣會(huì)嚴(yán)重影響到用戶體驗(yàn)。另外一方面,粉塵交易也和區(qū)塊鏈網(wǎng)絡(luò)安全息息相關(guān),如果如果網(wǎng)絡(luò)中充斥著一些微不足道的交易,而礦工們毫無(wú)差別地打包交易,那么這些價(jià)值小,但是總體體積很大的交易,就會(huì)阻礙到其它正常交易的打包確認(rèn)。粉塵交易也可以看成是區(qū)塊鏈網(wǎng)絡(luò)上DDOS攻擊的一種,攻擊者通過(guò)發(fā)送許多這樣小金額的交易,來(lái)堵塞整個(gè)網(wǎng)絡(luò)。
試想一下,在春節(jié)做火車或者飛機(jī)的時(shí)候,我們都需要過(guò)安檢,安檢口是免費(fèi)的,安檢口的數(shù)量是固定的,人流卻有很多,很多人往往因?yàn)閾矶露⒄`了行程。在這個(gè)時(shí)候如果有一群無(wú)所事事的人來(lái)來(lái)回回在安檢口排隊(duì),這就極大的影響正常秩序。粉塵攻擊就是指“無(wú)聊在安檢口排隊(duì)的人"。
再舉個(gè)簡(jiǎn)單的例子:
情況一:A地址轉(zhuǎn)給B地址1個(gè)btc;
情況二:A地址轉(zhuǎn)給B/C/D地址各0.0001btc;
如果按照傳統(tǒng)機(jī)構(gòu)按交易金額百分比的形式收取,情況一的手續(xù)費(fèi)肯定是要高于情況二的手續(xù)費(fèi)。但是在比特幣網(wǎng)絡(luò)中,情況二轉(zhuǎn)出的地址多,而每一筆交易,無(wú)論金額大小,交易的字節(jié)數(shù)都是差不多的,所以情況二交易數(shù)據(jù)的字節(jié)數(shù)要比情況一的多,所以情況二的手續(xù)費(fèi)要遠(yuǎn)高于情況一。而情況二,恰恰是造成粉塵攻擊的原因。
比特幣的每筆交易手續(xù)費(fèi)默認(rèn)最少是0.0001比特幣的,如果你轉(zhuǎn)賬的金額太小或者是剛剛挖出來(lái)不久的新幣(幣齡很小),那么必須要付手續(xù)費(fèi)。如果你轉(zhuǎn)出的金額少于0.01比特幣,也必需付0.0001比特幣手續(xù)費(fèi)。如果你需要大量的小額比特幣轉(zhuǎn)賬,又想免費(fèi)轉(zhuǎn)出,這時(shí)候你可以加一個(gè)數(shù)額大的、幣齡高的比特幣金額,就會(huì)將平均優(yōu)先級(jí)提高,從而可以免費(fèi)轉(zhuǎn)出比特幣。
所以,粉塵攻擊一方面是比特幣的設(shè)計(jì)規(guī)則有漏洞,導(dǎo)致有人可以利用,允許極少金額的交易。另一方面,有人頻繁惡意地進(jìn)行小額交易,才會(huì)造成比特幣網(wǎng)絡(luò)的擁堵。因?yàn)?,比特幣的交易區(qū)間只有1M的大小,所以,那么多手續(xù)費(fèi)極低甚至免費(fèi)的小額交易,擁擠在比特幣網(wǎng)絡(luò),必然會(huì)導(dǎo)致比特幣網(wǎng)絡(luò)的擁堵,而粉塵攻擊最大的危害就是導(dǎo)致比特幣網(wǎng)絡(luò)擁堵。
北京時(shí)間2018年11月16日凌晨02:16,BCH公鏈正式分叉產(chǎn)生了ABC和SV兩條公鏈,并從556767塊開始各自獨(dú)立運(yùn)行。
截止目前,ABC鏈的塊高度為:556865,SV為:556823,ABC暫時(shí)領(lǐng)先42塊。
但據(jù)區(qū)塊網(wǎng)絡(luò)監(jiān)測(cè)發(fā)現(xiàn),BCH分叉之后的兩條鏈ABC和SV上均存在一些容量為幾千筆交易的異常區(qū)塊,其中包含大量在相同地址間互轉(zhuǎn)的垃圾小額(大約0.0002BCH或更小)的交易。
例如:ABC鏈上的556846和556843塊,存在一地址qqgusvva8hnjpycgm0pfl6ywlmrcjvad5qlgqtaay5,發(fā)起了大量轉(zhuǎn)給自己的小額交易;SV鏈上的556821等塊,也有大量不同地址發(fā)起轉(zhuǎn)給自己的小額交易。
萊比特礦池CEO江卓爾今天在微博表示,由于遭受大量的粉塵交易攻擊,各BCH礦池的mempool(內(nèi)存池)都在急劇增大,已經(jīng)高達(dá)3000個(gè)交易了。
這些粉塵攻擊將會(huì)造成BCH網(wǎng)絡(luò)阻塞,進(jìn)而拉高交易費(fèi)用。
既然知道了粉塵交易的定義,那么我們就可以按照定義,避免構(gòu)造出粉塵交易了。首先,可以在構(gòu)造交易的過(guò)程中,根據(jù)交易的類型,計(jì)算出交易的最低金額,同時(shí)對(duì)每個(gè)輸出進(jìn)行判斷,如果低于該金額,則不能繼續(xù)構(gòu)造該筆交易。特別的,如果這個(gè)輸出剛好發(fā)生在找零上,且金額對(duì)于你來(lái)說(shuō)不太大,則可以通過(guò)舍棄該部分的粉塵輸出,以充作交易手續(xù)費(fèi)來(lái)避免構(gòu)造出粉塵交易。