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