上次我們介紹了POW共識算法的部分運作原理,它通過哈希加密算法來解決“憑什么幫你記賬”的問題。
不過,一個成熟穩(wěn)定的共識算法,僅僅解決“憑什么幫你記賬”的問題是不夠的。它還需要解決一些其他問題,比如雙花問題。
雙花問題指的是數(shù)字現(xiàn)金在交易中被重復(fù)使用的現(xiàn)象。數(shù)字現(xiàn)金的走向只能是線性的,即同一筆錢一次只能轉(zhuǎn)給一個人,不能同時轉(zhuǎn)給兩個或以上的人。如果發(fā)生了偏差,就會出現(xiàn)雙花問題。
舉個例子,小明一早花了10元在肯德基買了早餐,然后發(fā)現(xiàn)不夠吃,想去麥當(dāng)勞再買一個10元的漢堡。如果是用現(xiàn)金支付,兩家店都不會接受同一張10元鈔票。但如果是數(shù)字貨幣呢?因為數(shù)字貨幣的復(fù)制成本很低,所以同一筆數(shù)字資產(chǎn)因不當(dāng)操作被重復(fù)利用的問題就會出現(xiàn)。
有中介的情況下雙花問題不容易發(fā)生,但比特幣沒有中介和第三方的支持。它通過未花費的交易輸出(UTXO)和時間戳來解決雙花問題。
UTXO可以看作用戶擁有的比特幣余額,因為一個用戶的比特幣會分散到多個交易和區(qū)塊中,這個余額無法偽造。
解決雙花問題的方法是先確認(rèn)每筆交易對應(yīng)比特幣之前的情況,檢查它是否存在于付款人的UTXO中。如果同一筆UTXO被付出去,系統(tǒng)節(jié)點按照時間戳只會確認(rèn)先接收到的那一筆。當(dāng)兩筆時間上很近的交易被不同節(jié)點確認(rèn),區(qū)塊鏈將出現(xiàn)分叉,確認(rèn)后續(xù)的交易需要在最長鏈上完成。
總之,POW共識算法通過有效的機(jī)制保障了主鏈的安全性,并成功解決了雙花問題。