什么是雙花
前面我們講到區(qū)塊鏈就是一種去中心的可靠的協(xié)議,一種點(diǎn)對點(diǎn)的價值傳輸,相比于數(shù)據(jù)傳輸協(xié)議解決了很核心的重復(fù)支付的問題,重復(fù)支付也就是我們經(jīng)常聽到的雙花,關(guān)于雙花我認(rèn)為從兩種維度來理解,舉個例子:小明拿編號為123456789的一百塊錢去商店買杜蕾斯,同時拿著這一百塊錢買了口香糖,假設(shè)杜蕾斯跟口香糖的價錢都是100塊錢,小明都買成功了,這是一種雙花;第二種情況:小明拿著編號為123456789的一百塊錢買了杜蕾斯,同時他復(fù)印了一份同樣的編號的假的一百塊錢買了口香糖,也買成功了,這算是一種雙花。廣義上來看這兩種情況都屬于重復(fù)支付,一種從交易的維度,一種從貨幣本身的維度。
現(xiàn)在是怎么解決
正如前面所說現(xiàn)在所有的價值傳輸都是依賴于第三方機(jī)構(gòu)來實現(xiàn),我們以銀行為例,其他第三方機(jī)構(gòu)也基本一樣。防止雙花從交易和貨幣本身來控制,首先從交易上,例如我們都是以刷卡交易,卡上的資產(chǎn)都是在銀行作為第三方參與者手中,明確將消費(fèi)的100塊錢從小明的卡中轉(zhuǎn)移到了商戶的卡中;假設(shè)小明很聰明知道銀行處理可能需要一點(diǎn)時間,幾乎同時從卡上兩處地方消費(fèi)了100塊錢,銀行也幾乎同時收到了兩筆消費(fèi),銀行可沒那么傻了,銀行會按順序一筆一筆處理,第一筆處理完之后,小明已經(jīng)沒錢了,第二筆自然就失敗。第二點(diǎn)從貨幣本身小明依然去刷卡買杜蕾斯,買完后小明自作聰明想制作一張同樣的卡,然而卡中磁道,芯片的信息根本難以復(fù)制。利用信息安全加密等技術(shù)杜絕了非法貨幣的產(chǎn)生。區(qū)塊鏈解決雙花的思路基本上也是差不多的,從貨幣價值的不可篡改復(fù)制,到交易的難以重復(fù)確認(rèn),然而用到的技術(shù)手段卻完全不一樣。
區(qū)塊鏈怎么解決
還是從兩個維度來看,貨幣本身和交易的維度來解決雙花的問題。貨幣本身,我們知道在區(qū)塊鏈上賬戶就是一個二維碼的哈希地址,從比特幣白皮書上來看區(qū)塊鏈上的數(shù)字貨幣本身是不加密,加密的是賬戶,每個賬戶都具有成對的公私鑰,每個賬戶進(jìn)行貨幣轉(zhuǎn)移時都需要用自己的私鑰對交易進(jìn)行數(shù)字簽名,全網(wǎng)通過公鑰對交易進(jìn)行所有權(quán)驗證,區(qū)塊鏈從密碼學(xué)的角度解決了貨幣本身所有權(quán)的問題;從交易上,區(qū)塊鏈引入工作量證明,也叫共識機(jī)制常見的有pow,pos,也是區(qū)塊鏈去中心化的核心思想,用獎勵的方式讓全網(wǎng)一起參與計算,共同計算的過程就叫做挖礦。假設(shè)小明又同時花了100塊錢買杜蕾斯跟口香糖,兩筆交易會同時向全網(wǎng)廣播,所有的區(qū)塊鏈節(jié)點(diǎn)會收到廣播的請求,同時每個節(jié)點(diǎn)上會存在全網(wǎng)所有的區(qū)塊信息也就是全網(wǎng)的賬戶信息,來驗證小明該交易的合法性。兩筆交易一前一后到達(dá)那肯定沒啥好說的,全網(wǎng)任意一個節(jié)點(diǎn)都能驗證出第二筆為重復(fù)支付;若兩筆交易同時達(dá)到兩個節(jié)點(diǎn)中,兩個節(jié)點(diǎn)同時驗證為成功的同時廣播到全網(wǎng),若整個全網(wǎng)一部分階段收到的是買杜蕾斯,一部分節(jié)點(diǎn)收到的是口香糖都對本地數(shù)據(jù)進(jìn)行了更新,那全網(wǎng)就出現(xiàn)了分叉,好在區(qū)塊鏈對交易的確認(rèn)有兩點(diǎn):1. 存在與最長分支中的block,2. 至少有5個驗證過的block再其后面得到驗證。所以出現(xiàn)分叉之后,全網(wǎng)的礦工會繼續(xù)按照自己的區(qū)塊更新,再之后的幾次區(qū)塊中自然會更新出最長的一條區(qū)塊來,全網(wǎng)的所有礦工都以最長的區(qū)塊信息為準(zhǔn)。如果小明想要保持兩筆交易都被確認(rèn),那他需要對全網(wǎng)所有的節(jié)點(diǎn)進(jìn)行對抗,保持在兩個分叉鏈上同時更新,顯然是沒法做到的。