在學習區塊鏈的過程中,大家一定對會聽到「雙花」這個詞,意思就是雙重支付,或者更直白點就是一筆資金被花費了兩次。這篇文章我們來簡單的分析一下為什麼會有雙花,位元幣是如何避免雙花的。
在傳統的交易中,因為有銀行這樣的中心化機構,所以是不會存在雙花問題的:每一筆支付都將從你的銀行賬戶中扣除相應的資金,所有的明細在銀行都有記錄。但是在位元幣中,因為沒有賬戶的概念,而是引入了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,用該區塊延長自己的區塊鏈,於是整個區塊鏈網路中呈現出了不一致的問題:
像這種不一致問題,一般只需要乙個確認就能得到解決:假設隨後又收到新區塊,而新區塊是以blk1作為父區塊,那麼之前用blk1延長自己區塊鏈的節點,只需要將新區塊鏈結到自己的區塊鏈上,而之前以blk2延長自己區塊鏈的節點,則需要切換到新的最長鏈上,如下圖:
因此在出現分叉的情況下,通常也只需要等乙個區塊的確認時間網路節點中的區塊鏈就可以重新一致,在這個例子中,經過乙個區塊的確認期以後,b最終確認自己收到a的1btc,而因為包含有轉賬給c的交易t2的區塊blk2位於備用鏈上,因此無法通過支付驗證。a的雙花嘗試也以失敗告終。
(3) 為什麼說位元幣需要6個確認才安全
上面提到一般情況下,只要經過1個區塊的確認時間基本上就能確保「相對的安全」。而在位元幣中,對於很小額的支付,為了提高交易速度,一般也就是等1個區塊的確認即可。但是注意這裡說的是「相對安全」,對於數額特別大交易,1個區塊的確認遠遠不夠。我們考慮上面提到的分叉情況:假設經過1個區塊的確認後,b知道了a給他的1btc確實已經位於鏈上,於是發貨給a。此時a及其同夥掌握著很大的一部分算力,a通知其同夥開始使勁挖礦延長備用鏈(攻擊鏈),當a最終成功的使攻擊鏈的長度(累計工作量)超過當前主鏈時,會再一次導致網路中的節點切換主鏈的情況,如下面的示意圖:
於是包含了a轉給c的交易t2的區塊blk2位於了主鏈之上,此時a通知c錢已到賬,c做支付驗證也沒問題,於是c給a發貨,a的雙花攻擊成功。
因此對於額度稍大的交易,必須要等待6個區塊的確認才能保證安全,因為攻擊者要想構造攻擊鏈追上已經經過6個區塊確認的主鏈需要花費的算力成本是非常大的,很有可能得不償失。
最後總結一下:
(1) 大部分情況下位元幣的utxo機制和區塊鏈的共識機制都能有效應對雙花攻擊;
(2) 對於小額支付,等待乙個確認通常就可以認為安全了,但是對於大額支付,需要等6個確認才能大概率的認為安全,否則如果攻擊者掌握很強算力,有可能構造累計工作量超過當前主鏈的攻擊鏈導致雙花成功。
位元幣核心技術之雙花問題
位元幣核心技術之雙花問題 1.顧名思義,雙花就是一筆錢被花了兩次甚至多次 實體貨幣不存在雙花問題,比如一張百元人民幣,不可能同時出現在兩個地方。中心化系統中,比如銀行系統,若a向b支付100元,則銀行系統會先檢查a的賬戶餘額是否足夠支付100元,否,則報錯提示,是,則從a的賬戶中減去100元,同時向...
位元幣系統是如何解決「雙花」問題的
近年來 區塊鏈 引起了廣泛的關注 與爭議,它既 是位元幣和其他加密貨幣幕後的核心技術,又是尚未發展成熟的網際網路科技後起之秀。在 區塊鏈分布式資料庫中,去中心化的信任機制是其核心,任何兩方都可以 在區塊鏈應用專案中 進行直接交易,而無需經過 第三方公信 機構。在最初的位元幣 中,中本聰闡述了如何建立...
位元幣挖礦與攻擊方式分析
中本聰在位元幣 中曾提到 one cpu one vote 可見中本聰一開始預想的是所有人用cpu也就是最普通的個人pc就可以挖礦。位元幣執行初期全節點確實是用cpu來挖礦的,全球的總算力也比較低。隨著挖礦難度的增加,現在用cpu已經很難挖到礦了。隨著位元幣的價值提公升,人們開始用 更高的gpu挖礦...