1. A賬戶曾在一筆編號為m的交易中收到25個比特幣;
2. A支出20個比特幣給B;支出5個比特幣給回自己(如下圖所示,“輸入”即指明資金來源的那筆交易,“輸出”表示本筆交易中資金將去往何方)。這樣就實現(xiàn)了每一筆之前獲得的資金都在下一筆交易中盡數(shù)消耗,不用記錄結(jié)余。
上圖中交易n具體的確認過程是,在比特幣區(qū)塊鏈上運行著某一個客戶端節(jié)點的Alice向其他節(jié)點廣播這筆交易信息并簽名,所有在線聽到這個交易信息的節(jié)點都有權(quán)對交易有效性進行驗證和記錄——驗證Alice的簽名、搜索確認交易m真實存在并且在這之前交易m沒有被其他交易引用過;平均每個10分鐘內(nèi)通過了有效性確認的交易信息,會被記賬節(jié)點打包記錄進一個數(shù)據(jù)塊(也就是區(qū)塊),區(qū)塊成功鏈入?yún)^(qū)塊鏈中則代表著這個區(qū)塊上記錄的所有交易真正發(fā)生。
比特幣區(qū)塊鏈通過給每個區(qū)塊加蓋時間戳,準確記錄區(qū)塊生成先后時間——也就是所記錄交易發(fā)生的先后時間,以此來避免重復支付。若打包交易信息的過程中先后接收到兩個矛盾的交易廣播(比如Alice在一筆交易廣播中,稱將交易m中收入的25個幣中的20個轉(zhuǎn)給Bob,另5個轉(zhuǎn)給自己;在另一個廣播中將同樣來自交易m中的25個幣轉(zhuǎn)給了Mary),在記賬的節(jié)點通常會默認選擇記錄先聽到的那一筆。
但麻煩的是,網(wǎng)絡通訊會有延遲性,處于不同位置的節(jié)點聽到兩個廣播信息的順序可能并不一樣。
舉例來講,A要花20個比特幣從B處買一個電子設備,便需要發(fā)出“A從之前第m筆交易中獲得25個比特幣,現(xiàn)將20個比特幣支付給B,5個比特幣支付給A”的廣播指令,但可能A居心不良,稍后很快又發(fā)出了另一個廣播,說這25個比特幣要全部轉(zhuǎn)移到M賬戶(可能是A自己的另一個賬戶)。有可能部分節(jié)點先聽到了正確的向B支付的廣播,于是記錄下這一筆,后來再聽到的另外一筆廣播則因無法通過重復支付驗證而被忽略,而部分節(jié)點則先聽到并且記錄了另一筆虛假信息。
那么有可能出現(xiàn)的一種情況是,首先記錄了正確信息(A轉(zhuǎn)給B 20個幣)的區(qū)塊并入?yún)^(qū)塊鏈,B得知后以為交易生效便將電子設備交付給了A。
但是下一個區(qū)塊記錄者正好是一個先聽到了虛假信息的節(jié)點,因而認為自己先聽到的轉(zhuǎn)給M賬戶25個幣的交易才是正確的,前一個區(qū)塊中記錄的轉(zhuǎn)給B 20個幣的交易不成立,于是選擇不延續(xù)上一個區(qū)塊,而是把自己的新區(qū)塊鏈接到上上一個區(qū)塊后面,而之后的區(qū)塊記錄者也恰好認同新區(qū)塊并選擇在新區(qū)塊鏈后延續(xù)。那么,再之后的區(qū)塊記錄者則會看到兩條分叉的區(qū)塊鏈,一條是記錄著那筆真實交易的較短的區(qū)塊鏈,一條是記錄著虛假信息的較長區(qū)塊鏈,在對交易信息的判斷沒有特別堅持的情況下,新的記錄者往往會選擇在更長的區(qū)塊鏈上延續(xù)——更長的區(qū)塊鏈往往代表了更完整的交易記錄,于是,記錄正確交易的那個區(qū)塊則被拋棄,成為失效的孤塊,那么B則不得不承擔人財兩空的損失。