区块链---双花问题
雙花問題
雙花實(shí)際上指的是雙重花費(fèi),即一份貨幣使用了兩次。
傳統(tǒng)現(xiàn)實(shí)中,因?yàn)榈脱舆t網(wǎng)絡(luò)以及中心化管理的原因,是不會出現(xiàn)雙花現(xiàn)象,無論是線下交易的現(xiàn)金支付,或者網(wǎng)上支付的第三方監(jiān)管交易確認(rèn),都可以避免雙花問題。
那在區(qū)塊鏈上面,如何會出現(xiàn)這個(gè)問題,又該如何避免?我們通過一個(gè)示例來逐步解答:
場景:
首先,以下示例主要是為了幫助大家理解,我們將區(qū)塊鏈上的數(shù)字資產(chǎn)統(tǒng)稱為:比特幣(注意:使用比特幣來充當(dāng)數(shù)字貨幣資產(chǎn)是不嚴(yán)謹(jǐn)?shù)?#xff0c;在這里只是為了幫助大家更好的理解)。
假設(shè)小明區(qū)塊鏈上的賬戶總資產(chǎn)為10個(gè)比特幣。小明向全網(wǎng)廣播:“我小明向小紅支付10個(gè)比特幣”。
每一個(gè)區(qū)塊鏈的區(qū)塊生成都需要相應(yīng)的時(shí)間,具體原因之前的文章探討過了,這里不做累贅。
此時(shí)該交易,通過廣播到網(wǎng)絡(luò),但由于負(fù)責(zé)整理區(qū)塊的礦工們在整理區(qū)塊時(shí)存在時(shí)間差,該交易尚未被記錄到區(qū)塊中,并被全網(wǎng)認(rèn)可,此時(shí),小明立馬又發(fā)布一條新的廣播:“我小明向小黃支付10個(gè)比特幣”
你可能會認(rèn)為這就是所謂的雙花問題,只要你廣播的間隔足夠小,就能混淆視聽。將一份資產(chǎn)重復(fù)消費(fèi)。很快,小明的其中一筆交易被拒絕了。原因如下:
區(qū)塊鏈網(wǎng)絡(luò)中,每筆交易都需要先確認(rèn)對應(yīng)資產(chǎn)之前的狀態(tài),如果它之前已經(jīng)被標(biāo)記為花掉,那么新的交易會被拒絕。所以,當(dāng)上述小明的兩條廣播其中一條被記錄到區(qū)塊鏈上的時(shí)候,另一條交易將會被系統(tǒng)自動拒絕,無效的交易。
小明深知區(qū)塊鏈的原理,于是不停的重復(fù)上述的步驟(我們假設(shè)小明有數(shù)不清的賬戶,每個(gè)賬戶都只有10個(gè)比特幣),不知道經(jīng)過了幾萬次的重復(fù),終于,出現(xiàn)了這樣一種情況:
小明的兩筆交易同時(shí)出現(xiàn)在了不同的區(qū)塊中,此時(shí),由于小明這種惡劣行為,導(dǎo)致該區(qū)塊鏈出現(xiàn)了所謂的“分叉”情況:
正好有兩個(gè)礦工幾乎同時(shí)取得記賬權(quán),并把各自整理的區(qū)塊(block)發(fā)布到網(wǎng)絡(luò)中(這個(gè)概率很低),剛好,由于網(wǎng)絡(luò)延遲問題,兩筆交易被分別整理到了一個(gè)區(qū)塊上。
此時(shí),A區(qū)塊中記錄著“小明向小紅支付10個(gè)比特幣”,而B區(qū)塊中記錄著“小明向小黃支付10個(gè)比特幣”,那么此時(shí),小明是不是就實(shí)現(xiàn)了雙花?
當(dāng)然,細(xì)心的小伙伴可能會發(fā)現(xiàn),一條區(qū)塊鏈長成這樣肯定是有問題的,事實(shí)上,區(qū)塊鏈規(guī)定,當(dāng)出現(xiàn)分叉的時(shí)候,最長的分支會被認(rèn)可,短的分支會被放棄,賬本還是會回歸為一個(gè)。
我們假設(shè),終究A分叉的區(qū)塊數(shù)超過了B分叉…如下:
終究都只有一條分支有效。小明在一番絞盡腦汁之后,開始了如下操作:
既然A分叉被認(rèn)可了,小明立馬跑到小紅那里,順理成章的用花費(fèi)的10個(gè)比特幣換了10臺iphone 回來,一切都是那么的理所當(dāng)然。接著,小明打開自己的電腦,進(jìn)行挖礦,即:參與區(qū)塊的整理和發(fā)布。
假設(shè)小明擁有強(qiáng)大的算力,在A分叉再次衍生出下一個(gè)區(qū)塊時(shí),小明已經(jīng)整理好了三個(gè)區(qū)塊,并且,發(fā)布在了B分叉上(如下圖),而此時(shí),A支鏈不再被認(rèn)可:
上一篇文章中有提到過,工作量證明機(jī)制,即計(jì)算出一道很難的數(shù)學(xué)題之后,才能進(jìn)行區(qū)塊整理發(fā)布,理論上,當(dāng)算力足夠大的時(shí)候,是可以實(shí)現(xiàn)上述小明的做法。
終于,小明實(shí)現(xiàn)了雙花,他已經(jīng)從小紅那里拿了10臺iphone,接著,依舊可以光明正大的跑到小黃那拿10臺iphone,一切都是這么美好,小明似乎達(dá)到了人生巔峰~~(全篇完)
如何實(shí)現(xiàn)雙花
等等,我們似乎忽略了一個(gè)問題,小明如何能從當(dāng)A鏈衍生出一個(gè)區(qū)塊的時(shí)候,自己整理出三個(gè)新的區(qū)塊發(fā)布到B支鏈上的呢?
有兩種可能:
我們暫且假設(shè)整個(gè)網(wǎng)絡(luò)中的每臺計(jì)算機(jī)算力是一樣的,整個(gè)網(wǎng)絡(luò)中一共有1億臺計(jì)算機(jī)參與算力運(yùn)算。
第一種,窮人靠變異:
假設(shè)小明正常人,擁有一臺普通的計(jì)算機(jī),此時(shí)如需要在短時(shí)間內(nèi)連續(xù)通過三次工作量證明機(jī)制,該機(jī)制實(shí)際上是計(jì)算某種Hash值,只有當(dāng)該Hash值得前10位全部為0的時(shí)候,則該Hash是有效的,此刻你就可以發(fā)布一個(gè)新的區(qū)塊,理論上,你運(yùn)氣足夠好的話,可以連續(xù)3次就或者3個(gè)有效的Hash值。整理好三個(gè)區(qū)塊,他的概率為:1/100000…000(27個(gè)0)的概率,這個(gè)概率你中大樂透特等獎(jiǎng)可以中超過1億億次。
第二種,富人靠Money:
假設(shè)小明非常非常的有錢,控制了超過5000萬臺的計(jì)算機(jī)算力,此時(shí),小明就可以高枕無憂的坐在家里等著B支鏈的長度超過A支鏈了,因?yàn)檫@是遲早的事。
這就是所謂的“51%攻擊”問題,其實(shí),只要在B上面發(fā)布區(qū)塊的礦工數(shù)量大于50%,早晚有一天,這個(gè)B支鏈長度會超過A支鏈,從而被認(rèn)可,但問題在于,你需要控制超過50%的算力,這樣才能按照你的意愿操控B支鏈。
那么以上就是實(shí)現(xiàn)雙花的兩種具體方案
如何避免雙花
那行吧,既然你和我一樣的善良,那我們來看看如何避免雙花問題。
第一種
如果一條區(qū)塊鏈的節(jié)點(diǎn)數(shù)量不是很多,那么雙花的可行性也將變得可能,同理,如果一個(gè)區(qū)塊鏈的節(jié)點(diǎn)有好幾億個(gè),那么雙花可行性也將無乎其微。
如果一條區(qū)塊鏈一共就100個(gè)節(jié)點(diǎn),那么控制51個(gè)節(jié)點(diǎn)是現(xiàn)實(shí)可行的。
第二種
另一方面,假設(shè)我們是小紅,我們可以等一個(gè)block(區(qū)塊)被記下來之后,再等5個(gè)block(區(qū)塊),也就是等6個(gè)block(區(qū)塊)被確認(rèn)后再把交易對應(yīng)的商品交付。這樣,B鏈要想趕超6個(gè)block(區(qū)塊)的難度也將是指數(shù)式系數(shù)增長的。
以上是個(gè)人對區(qū)塊鏈雙花問題的梳理。
如果你感覺這篇文章給您帶來收獲,請幫忙點(diǎn)贊一下吧,如果給你帶來困惑,請?jiān)u論留言,我將及時(shí)回復(fù)探討解答。
總結(jié)
以上是生活随笔為你收集整理的区块链---双花问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清风算法对seo不是打击而是好事
- 下一篇: 出走的门徒之二—摩拜 王晓峰:给岁月以文