區塊鏈雙花比喻
比特幣白皮書中,有過這樣的表述:誠實節點控制算力的總和,大於有合作關系的攻擊者算力的總和,該系統就是安全的。
換句說,當系統中有合作關系的惡意節點所控制的算力,超過誠實節點所控制的算力,系統就是有被攻擊的風險。這種由惡意節點控制超過50%算力所發起的攻擊,稱為51%算力攻擊(51% Attack)。
那是不是所有的加密貨幣系統都有可能遭遇51%算力攻擊的風險呢?其實並不是的,只有基於PoW(工作量證明)共識機制的加密貨幣,才存在51%算力攻擊,比如比特幣、比特現金和目前階段的以太坊等;而非PoW共識演算法的加密貨幣則不存在51%算力攻擊,如基於DPoS(委託權益證明)共識機制的EOS、TRON等。
在了解了51%算力攻擊之後,你肯定好奇,這種攻擊能做哪些壞事。
1、雙花(Double Spending)。雙花的意思是一份"錢"花了兩次甚至多次。
51%算力攻擊是如何做到雙花的呢?假設小黑有666BTC,他把這些幣支付的大白同時,也把這些幣發到自己的另一錢包地址上。換一句話說,小黑的一份錢,同時轉給兩個人。最終,發給大白那筆交易先被得到了確認,並打包在區塊高度為N的區塊內。
這時,控制了超過50%算力的小黑,發起51%算力攻擊。他通過重新組裝第N個區塊,將發給自己那筆交易打包進區塊里,並持續在這條鏈上延展區塊,由於算力的優勢,這條量將成為最長合法鏈。這樣小黑666BTC雙花成功,大白錢包里的666BTC"不翼而飛"了。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
B. 入門科普:什麼是雙花
想要了解區塊鏈,首先要熟悉區塊鏈相關的各種名詞。就比如我們今天講到的「雙花」,可能有人就要問,雙花是什麼花?哈哈哈,開玩笑,讓我們來學習一下什麼是「雙花」吧。
01
「雙花」是什麼?
雙重支付又名「雙花」,也就是雙重花費的意思。 舉個例子:如果我錢包裡面有100元,我可以去購買等值的物品。當我去商店後,發現台燈和桌子都是100元,那我只能買其中一樣東西。而我們所說的雙花問題,正好與之相反,同樣的100元,我可以購買兩樣東西。
在加密貨幣系統中,由於數據的可復制性,使得系統可能存在同一筆數字資產被重復使用的情況 ,這也稱之為雙花,又叫雙重消費攻擊。
02
雙花問題是如何發生的?
在區塊鏈系統中,雙花問題會在以下情況下出現:
1、由於共識機制導致區塊確認時間長,用一個數字貨幣去進行一次交易,可以在這筆交易還未被確認完成前,進行第二筆交易。
2、 控制算力來實現雙花 ,第一次交易被驗證通過並被記錄入區塊後,在該網路中有更高的算力驗證出新的更長鏈條,在該鏈條中這筆錢被第二次花費,由於第二次花費的區塊鏈條更長使第一次交易區塊所在鏈條為無效鏈條,這樣一來,第一次交易所在的區塊鏈被區塊鏈網路放棄,第一次花費的錢就又回到自己賬戶了,就導致了雙花問題。
03
比特幣如何避免雙花問題?
為了解決雙花問題,我們日常的數字資產使用依賴於第三方信任機構進行。這類機構對數據進行中心化管理,並通過實時修改賬戶余額的方法來防止雙重支付的出現。而作為去中心化的點對點價值傳輸系統, 比特幣通過UTXO、時間戳等技術的整合來解決雙花問題。
1、首先每筆交易都要先確認對應比特幣之前的情況,要檢查它是否存在於用戶的UTXO中。如果不在,那麼該交易會被系統拒絕。
2、如果用戶用同一筆UTXO付給兩個人,系統中的節點只確認先接收到的那一筆。
3、當兩筆時間上很接近的交易被不同節點確認,區塊鏈將發生分叉。剩餘節點選擇在他們認為的最長鏈上構建新的區塊。
4、當其中一筆交易被6個節點確認後,它將成為系統最長鏈,可以認為這筆交易獲得了最終的確認。
C. 在區塊鏈中,雙花問題是什麼問題呢
什麼是雙花問題呢?
雙花問題,簡單講就是一筆錢能被花兩次三次很多次。為什麼雙花問題會成為比特幣系統裡面一個這么重要的問題呢?
原因就在於:比特幣,是虛擬貨幣,它是虛擬的,通過代碼形式呈現出來的,是可以被復制下來的。一旦被攻破了代碼漏洞,那麼就可以循環使用同一筆比特幣,這樣一來,比特幣這種「錢」就會變得很雞肋。
我們想一下,要是一筆錢可以花很多次,你有500塊錢,你去買一件500塊錢的衣服,還能循環使用,再去買一雙500塊錢的鞋,這樣一來,錢還能叫錢嗎?
所以,中本聰在設定比特幣系統的時候,他所有的技術手段基本上都是圍繞著解決
「雙花問題」的,來保護比特幣作為一種貨幣,它自身的一個支付手段職能。
其實,這個雙花問題在我們現在的中心化世界裡面根本不是問題,因為有銀行,錢的交易結算都是通過銀行,很安全,有問題直接找銀行。
但是,在去中心化世界裡面呢,沒有銀行這樣一個中心機構,還必須保證一筆錢只能花一次,怎麼樣實現在去中心化的前提下,杜絕「雙花問題」呢,這是一個難題。
這里插一句,中本聰為什麼如此執著的追求「去中心化」呢,自找煩惱嗎?不是,他希望能夠通過去中心化,來解決一些社會問題,其中最主要的問題就是:因為權力機構過量發行貨幣造成的通貨膨脹。
所以,我們總結一下他的邏輯:中心化的貨幣增發導致通貨膨脹——所以我們要實現去中心化——去中心化要面臨很多問題,最大的問題是雙花問題——所以我們要解決雙花問題——怎麼解決雙花問題?
這里,中本聰就引入了UTXO和「時間戳」概念,依靠這兩種手段來解決雙花問題。
D. 雙花理論是什麼概念
在學習區塊鏈的過程中,大家一定對會聽到「雙花」這個詞,意思就是雙重支付,或者更直白點就是一筆資金被花費了兩次。這篇文章我們來簡單的分析一下為什麼會有雙花,比特幣是如何避免雙花的。
在傳統的交易中,因為有銀行這樣的中心化機構,所以是不會存在雙花問題的:每一筆支付都將從你的銀行賬戶中扣除相應的資金,所有的明細在銀行都有記錄。但是在比特幣中,因為沒有賬戶的概念,而是引入了UTXO即未花費交易輸出。因為沒有銀行這樣的中心化機構的保證,當發生一筆交易時就可能存在著雙花的危險:比方說A有一個比特幣,然後他同時構造兩筆交易T1和T2來花費這1個比特幣,其中一個給了B,從B那裡買件衣服,一個給了C,從C那裡買雙鞋。如果不引入某種機制來避免這種情況,那作為數字貨幣的比特幣將沒有任何存在的意義。接下來就來分析一下比特幣是如何做到防止這種「雙花」攻擊的。
(1) 正常情況
首先我們來看看正常情況,說白了就是絕大多數時候,區塊鏈的共識機制就能將雙花消滅在萌芽狀態。我們還是以上面提到的例子來做說明:
假設A構造了兩筆交易T1和T2,將自己價值1btc的UTXO分別轉給了B和C,妄圖同時從B和C那裡獲得好處。然後A幾乎在同一時間將構造好的這兩筆交易廣播至網路。
假設網路中的礦工節點先收到了交易T1,發現這筆交易的資金來源確實沒有被花費過,於是將T1加入到自己的內存交易池中等待打包進區塊。
大部分情況下,這個礦工節點會在不久後又收到交易T2,此時因為T2所指向的交易輸入與已經加入交易池的T1相同,於是礦工節點會拒絕處理該交易。網路中其他的礦工節點都類似,因此A試圖雙花的嘗試胎死腹中。
(2) 分叉情況
上面說的是正常的情況,但是也有非正常的情況要考慮:假設礦工節點M1和M2幾乎在同一時間挖出了區塊,並且很不幸M1挖到區塊時只收到了交易T1,而M2挖到的區塊時只收到了交易T2,這樣交易T1和T2被分別打包進兩個區塊。因為這兩個區塊是差不多同一時間被挖出,於是造成了區塊鏈的分叉:
網路中某些節點(可能是離M1近的)先收到了M1打包的區塊BLK1,於是用該區塊延長自己的區塊鏈,而另外一些節點(鄰近M2的)則先收到M2打包的區塊BLK2,用該區塊延長自己的區塊鏈,於是整個區塊鏈網路
E. Filecoin網路雙花事件始末,什麼是雙花
3月18號,正在廣大投資者沉浸在FIL幣要突破100U新高的狂歡中時,晚間多個媒體報到出Filecoin主網疑似出現雙花漏洞,多家頭部交易所關閉了FIL幣的充值功能,一度FIL幣價下調到74U。
隨後Filecoin官方立刻對此進行了調查,稱並沒有發現網路問題或者API漏洞,出現此問題的的根本原因是交易所Lotus API被不正確使用所導致,並且只有一個交易所受到這個問題的影響。Lotus團隊正在與所有的交易所合作,糾正他們對API的使用,確定使用規范。
各大媒體相繼轉發官方報道澄清事實,到此,此次Filecoin主網雙花問題基本告一段落。
大家或許有疑問,什麼是「雙花問題」?為什麼會造成這么大的影響,簡單的說按照字面意思,就是一筆錢花了兩次或者多次,就好比我花100元用支付寶購物,結果支付寶系統出BUG,而我的余額中並沒有扣款,接著我再用這100元去吃飯,這就是雙花問題!如果這樣也行的話,那區塊鏈將沒有任何信任可言了。
雙花問題是怎麼產生的
1、控制超過51%的算力:當第一次的交易通過驗證並記錄在區塊中後,在該網路中以更好的算力驗證出新的區塊鏈條,並且在新的鏈條中將這筆數字資產第二次花費,因新的區塊鏈條更長,這樣就導致第一次交易所在的區塊鏈條就被放棄,第一次花費的數字資產就會回到賬戶,這就造成了雙花。所以在Filecoin網路,官方也控制了單一節點的有效算力不能超過全網的20%,這也是為了避免出現控制全網算力的現象,並且現在Filecoin網路有效算力已經達到3.377EB,進行算力的攻擊成本太高;
2、時間差:由於共識機制,導致區塊確認時間長,用一定數量的數字貨幣進行交易,在這筆交易還沒有確認之前完成之前,再次進行二次交易;
歷史 上出現過哪些「雙花漏洞」
2018年一礦工控制至少BTG(比特黃金)51%算力,成功在交易所竊取38萬枚BTG,現價值高達1200萬美元;
2019年攻擊者租借超過51%算力,進行雙花攻擊,獲利最少5.4萬枚ETC,現價值約65萬美元;
F. 『雙花』攻擊
什麼是雙花?
「雙花」,即一筆錢被花了兩次或者兩次以上,也叫「雙重支付」。通俗的理解,「雙花攻擊」(double spend attack)又叫「雙重消費攻擊」,即同一筆資金,通過某種方式被花費了兩次,取得了超過該筆資金的服務。
在數字貨幣系統中,由於數據的可復制性,使得系統可能存在同一筆數字資產因不當操作被重復使用的情況。
雙花是如何發生的?
眾所周知,區塊鏈節點始終都將最長的鏈條視為正確的鏈條,並持續工作和延長它。如果有兩個節點同時廣播不同版本的新區塊,那麼將在率先收到的區塊基礎上進行工作,但也會保留另外一個鏈條,以防後者變成最長的鏈條。等到下一個工作量證明被發現,其中的一條鏈條被證實為是較長的一條,那麼在另一條分支鏈條上工作的節點將轉換陣營。
雙花簡單說就是花兩次。雙花是如何實現的呢?分為兩種情況:
(1)在確認前的雙花。零確認的交易本來就可能最後沒有寫入區塊鏈。除非小額,最好至少等確認即可規避此類雙花。
(2)在確認後的雙花。這就要控制超50%算力才能實施。即類似於一個小分叉,將給一個商店的交易放入孤立區塊中。這種確認後雙花,很難實施,只是理論上可行。
雙花攻擊案例
2018年曾經發生了比特幣黃金(BTG)的雙花攻擊。BTG當時是全球第27大加密貨幣,流通市值為50億人民幣。2018年5月16日以來,攻擊者對BTG網路成功實施了雙花攻擊,謀取了超過38.8萬的BTG的暴利。
攻擊者控制BTG網路上51%以上的算力,控制算力期間,把一定數量的BTG發給自己在交易所的錢包,這條分支我們命名為分支A。同時,又把這些BTG發給另一個自己控制的錢包,這條分支我們命名為分支B。分支A上的交易被確認後,攻擊者立馬賣掉BTG,拿到現金。隨後,攻擊者在分支B上進行挖礦,由於其控制了51%以上的算力,很快分支B的長度就超過了分支A的長度,分支B就會成為主鏈,分支A上的交易就會被回滾恢復到上一次的狀態。攻擊者之前換成現金的那些BTG又回到了自己手裡,這些BTG就是交易所的損失。這樣,攻擊者就憑借50%以上的算力控制,實現了同一筆加密貨幣的「雙花」。
G. 關於「雙花」你需要知道的
如果小明使用的不是現金,而是數字貨幣呢?
「雙花」問題
「雙花」,即 一筆錢被花了兩次或者兩次以上 ,也叫「雙重支付」。
在數字貨幣系統中,由於數據的可復制性,使得系統可能存在同一筆數字資產因不當操作被重復使用的情況。
1. 51%攻擊
51%攻擊,又被稱為Majority attack。這種攻擊是通過控制網路算力實現雙花。如果攻擊者控制了網路中50%以上的算力,那麼在他控制算力的這段時間,他可以將區塊逆轉,進行反向交易,實現雙花。
比如Bitcoin Gold發生的雙花問題就屬於51%攻擊。 攻擊者控制Bitcoin Gold網路上51%以上的算力,在控制算力的期間,他把一定數量的BTG發給自己在交易所的錢包,這條分支我們命名為分支A。同時,他又把這些BTG發給另一個自己控制的錢包,這條分支我們命名為分支B。
分支A上的交易被確認後,攻擊者立馬賣掉BTG,拿到現金。這時候,分支A成為主鏈。然後,攻擊者在分支B上進行挖礦,由於其控制了51%以上的算力,那麼攻擊者獲得記賬權的概率很大,於是很快,分支B的長度就超過了主鏈,也就是分支A的長度,那麼分支B就會成為主鏈,分支A上的交易就會被回滾(回滾指的是程序或數據處理錯誤,將程序或數據恢復到上一次正確狀態的行為)。
也就是說,分支A恢復到攻擊者發起第一筆交易之前的狀態,攻擊者之前換成現金的那些BTG又回到了自己手裡。當然,這些BTG就是交易所的損失了。最後,攻擊者把這些BTG,發到自己的另一個錢包。就這樣,攻擊者憑借51%以上的算力控制,實現同一筆token的「雙花」。
2. 芬尼攻擊(Finney attack)
「Finney」的名稱來源於Hal Finney,Hal Finney是第一個描述雙花攻擊之0確認(未確認)交易的人。芬尼攻擊主要通過控制區塊的廣播時間來實現雙花,攻擊對象針對的是接受0確認的商家。
假設攻擊者挖到了區塊,在區塊中,包含了一筆交易信息,即地址1向地址2轉了一定數量的token,不過這兩個地址都是攻擊者的。但是攻擊者並不廣播這個區塊,而是立即找到一個商家,用他的地址1,把這些token發給商家的地址3。
發給商家的交易廣播出去後,如果這個商家接受0確認,攻擊者就把他自己之前挖到的區塊廣播出去,這時候發給自己的交易就先於發給商家的交易。對於攻擊者來說,通過控制區塊的廣播時間,就實現了同一筆token的「雙花」。
一般來說,為了節省時間而接受0確認,特別是對於大額交易而言,是非常不安全的,而且對於大額交易而言,多幾次確認,將會降低交易被回滾的風險。
3.種族攻擊 (Race attack)
這種方式主要通過控制礦工費來實現雙花。
比如,攻擊者把一定數量的token發給一個商家,我們命名為分支A。如果商家接受0確認,那麼攻擊者就會再把這筆token發給自己的一個錢包,我們命名為分支B。
不過,攻擊者在發給自己的這筆交易中,加了較高的礦工費,從而大大提高被礦工打包的概率(也可以說間接提高了攻擊成功的概率)。如果攻擊者發給自己的這筆交易被提前打包,這時候這筆交易就先於發給商家的交易,也就是分支B的長度超過分支A的長度,分支A上的交易就會被回滾。對於攻擊者來說,通過控制礦工費,就實現了同一筆token的「雙花」。
4. Vector76攻擊
Vector76攻擊,是種族攻擊和芬尼攻擊的組合,又稱「一次確認攻擊」,也就是交易即便有了一次確認,交易仍然可以回滾。
如果電子錢包滿足以下幾點,Vector76攻擊就容易發生。這幾點即錢包接受一次確認就支付;錢包接受其它節點的直接連接;錢包使用靜態IP地址的節點。
具體攻擊方式如下( 感興趣的可以點此查看 ):
攻擊者控制了兩個全節點,全節點A只是直接連接到電子錢包這個節點,全節點B與一個或多個運行良好的節點相連。
然後攻擊者將同一筆token進行了兩筆交易,一個是發給攻擊者自己在這個錢包(接下來要被攻擊的)上的地址,我們命名為交易1,另一個是發給攻擊者自己的錢包地址,命名為交易2。但是攻擊者給交易1的礦工費,要遠大於交易2的礦工費。攻擊者並沒有把這兩筆交易廣播到網路中去。
然後攻擊者開始在交易1所在的分支上進行挖礦,這條分支我們命名為分支1。攻擊者挖到區塊後,並沒有廣播出去,而是同時做了兩件事:在節點A上發送交易1,在節點B上發送交易2。
由於節點A只連接到電子錢包的節點,所以當電子錢包節點想把交易1傳給其它對等節點時,連接了更多節點的節點B,已經把交易2廣播給了網路中的大部分節點。於是,從概率上來講,交易2就更有可能被網路認定為是有效的,交易1被認定為無效。
交易2被認為有效後,攻擊者立即把自己之前在分支1上挖到的區塊,廣播到網路中。這時候,這個接受一次確認就支付的錢包,會立馬將token支付給攻擊者的錢包賬戶。然後攻擊者立馬賣掉token,拿到現金。
由於分支2連接的更多節點,所以礦工在這個分支上挖出了另一個區塊,也就是分支2的鏈長大於分支1的鏈長。於是,分支1上的交易就會回滾,錢包之前支付給攻擊者的交易信息就會被清除,但是攻擊者早已經取款,實現了雙花。
5. 替代歷史攻擊(Alternative history attack)
如果商家在等待交易確認,alternative history attack就有機會發生,當然,這需要攻擊者有較高的算力,對於攻擊者來說,會有浪費大量電力的風險。
攻擊者把一定數量的token發給一個商家,我們命名為分支A。同時攻擊者又把這筆token發給自己的一個錢包,我們命名為分支B。在商家等待確認的時候,攻擊者在分支B上進行挖礦。
商家在等待了N次確認後,向攻擊者發送了商品。但是如果攻擊者憑借高哈希率,挖到了N個以上的區塊,那麼,分支B的長度就超過分支A,分支A的交易就會被回滾,攻擊者實現雙花。如果攻擊者挖到的區塊數量沒有超過N個,那麼攻擊失敗。
Alternative history attack能夠攻擊成功的可能性在於兩方面,一個是攻擊者的算力在網路中的比例大小,另一個是商家等待的確認次數。 比如,攻擊者控制了網路中10%的算力,如果商家等待了2個確認,那麼攻擊成功的概率低於10%;如果商家等待了4個確認,那麼攻擊成功的概率低於1%;如果商家等待了6個確認,那麼攻擊成功的概率低於0.1%。 由於該攻擊存在的機會成本,所以如果代幣交易金額與塊獎勵金額差不多,才有可能實現博弈。
目前,幾個區塊鏈項目的官方給出的解決方式,主要有如下幾種:
1. 提高確認次數。比如LCC建議將確認次數提高為 100 個。
2. 在共識機制方面改善。比如 LCC表示可能會引入PoS機制。
3. 升級新的演算法。比如Bitcoin Gold表示,正在開發新的 PoW 演算法以替代原有的 Equihash 演算法。
4. 與交易所等合作。比如Bitcoin Gold立即與合作交易所合作,阻斷黑客的套現渠道。
鏈接:https://www.jianshu.com/p/56617e91b12a
鏈接:https://www.jianshu.com/p/0eb023e1d5dd
H. 女巫攻擊與雙花攻擊
女巫攻擊 的名字源於1973年由小說《Sybil》改編的同名電影。電影中的女主人公Sybil Dorsett患有分離性身份認同障礙,本身兼有16種人格。
區塊鏈底層是 P2P網路 。網路中各個節點可以隨時加入或退出,為了維持網路的有效性,一般一份數據常常需要部署在若干個分布式節點上。如果一個惡意節點偽裝有多個身份就存在可獲得全部數據的幾率,下面我打個比方:
假設神龍造出了七顆龍珠,並且要將它們分別投放到地球的各個角落。於是神龍昭告天下,讓每個洲來一個人領取龍珠。此時,精通喬裝易容術的我分別假扮出七個不同地域的人來神龍這拿到了龍珠。本來神龍將龍珠放到世界不同的地方基配圓就是為了平衡各地方力量,但是由於我偽造了身份,成功地拿到了全部龍珠,控制了地球。
以上比喻就是女巫攻擊的本質體現。
雙花攻擊是大多區塊鏈加密數字貨幣都要面對的一種攻擊手段。顧名思義,雙花攻擊就是一筆有效的錢被先後花了兩次。
雙花攻擊的可行性完全是由於區塊鏈的共識機制導致。拿比特幣舉例,由於比特幣的POW共識機制屬於最終一致性共識,一筆交易從發布到全網所有節點都達成統一確認需要一定時間,而攻擊者就是利用這個時間間隙進行攻擊。舉個生活中的例子:
假如銀行A有兩個支行B和C。但是,這個銀行的賬目系統比較低效,支行B和C每過1個小時才會去主行A那裡同步賬本。我在主行A中存了100塊錢,過了一個小時後支行B和C同步了賬本,於是我在B和C中都可以查到我擁有100塊錢。之後,我通過支行B用我的賬戶買了100塊錢的好吃的,隨即又通過支行C用我的賬戶賣唯買了100塊錢好玩的。由於支行B和C之間做不到賬目的隨時同步,所以支行C在我去買好玩的時候依然認為我擁搏塌有100塊錢。
以上就是雙花攻擊,並且「雙花」永遠是一種 流通貨幣 所要解決的首要問題。
I. 「雙花」是什麼
POW演算法是唯一經過時間檢驗運行較為穩定的演算法,這從比特幣誕生到現在的較穩定的運行就可以看出。
上次說到POW的共識演算法的部分運作原理。把上次所講的內容簡單總結一下,那就是POW通過哈希加密演算法解決了「憑什麼幫你記賬」的問題。
其實,POW共識演算法的目的,是可以保證任意節點被入侵、篡改,其數據信息不會被其它節點所接受,換句話說,POW要通過運行機制保障主鏈的安全性。
因此,僅僅解決「憑什麼幫你記賬」的問題對一個成熟穩定的共識演算法來講還是遠遠不夠的,它還需要解決其它一些問題,比如雙花問題。
雙花問題(Double Spending)即雙重支付,是指一筆數字現金在交易中被重復使用的現象。我們都知道,數字現金的走向只能是線性的,也就是同一筆錢一次只能轉給一個人,不能同時轉給兩個或者以上的人。一旦數字現金的走向發生了偏差,離開了線性軌道的約束,成為發散狀態,那麼雙花問題就會出現。
舉個例子,小明一早出門只帶了10元錢,他來到肯德基吃早餐,點了10元的套餐,把錢付給了肯德基的收銀員,這10元錢得到收銀員的確認。小明吃完早餐出門,發現自己並沒有吃飽(小明飯量有點大),抬頭一看有個麥當勞,於是他走進麥當勞,想再點一個10元的漢堡。這時候,如果小明想用之前買肯德基套餐的那10元錢買麥當勞漢堡,可能嗎?當然不可能。因為那10元錢是獨一無二的(有編號),已經被花出去了。
但如果小明使用的不是現金,而是數字貨幣呢?這就另當別論。這是因為現金的復製成本太高(法律成本、製作成本等等),而數字貨幣則不然,它具有十分經濟的可復制性,使得系統可能存在同一筆數字資產因不當操作被重復利用的問題。
雙花問題在有中介的前提下是不容易發生的,因為每次消費都要經過第三方(中介方)的確認才會完成,比如支付寶。
而比特幣作為一個去中心化的點對點現金系統,是沒有中介和第三方的,它主要依靠未花費的交易輸出(UTXO)和時間戳兩大利器來解決雙花問題。
未花費的交易輸出(UTXO)可以被簡單地理解為一個用戶擁有的比特幣的余額。這個余額是無法偽造的,因為一個用戶擁有的比特幣實際上會被當作UTXO分散到數百個交易和數百個區塊中。
雙花問題是這樣解決的:
首先每筆交易都要先確認對應的比特幣之前的情況,要檢查它是否存在於付款人的UTXO中。
其次,同一筆UTXO付出去,系統節點按照時間戳只會確認先接收到的那一筆。
最後,當兩筆時間上很近的交易被不同節點確認,區塊鏈將發生分叉。當其中一筆交易被6個節點確認後,它將獲得最終的確認,成為最長鏈。
本文僅供學習參考之用,不構成任何投資建議。