3走進區塊鏈-區塊鏈運行機制

區塊鏈 比特幣 算法 龐喜濤 2019-06-02
3走進區塊鏈-區塊鏈運行機制

區塊鏈網絡是一個分佈式網絡,網絡中存在眾多節點,每一個節點都參與數據維護。當有新的數據加入時,所有節點都會對數據進行驗證,節點間必須對處理結果達成一致才能將新加入的數據成功寫入各自維護的區塊鏈中,目的是讓網絡中每個節點都擁有一套完全一致的數據記錄。那麼區塊鏈是怎麼工作的呢。接下來,以比特幣的一筆交易為例來說明區塊鏈是怎麼工作的。

1身份驗證

由於在區塊鏈網絡中沒有中心機構對節點進行認證,所以首要解決的問題是對節點的身份驗證。在比特幣區塊鏈系統中,通過一對密鑰來完成驗證。在創建比特幣賬戶時,會生成公鑰和私鑰,私鑰用於數字簽名,確認交易所有權,公鑰則是私鑰通過算法生成的,並且是對外公開的,此過程不可逆,即無法通過公鑰推出私鑰。用公鑰對數據進行加密後,只有對應的私鑰才能解密,如果用私鑰加密,則只有對應的公鑰才能解密。在區塊鏈系統中就是用這樣一對唯一匹配的私鑰和公鑰來完成加密解密和身份驗證。公私鑰的驗證過程如圖1-1所示。

3走進區塊鏈-區塊鏈運行機制

圖1-1 公私鑰驗證過程

Alice向Bob發送消息“Hello Bob”,首先使用Bob提供的公鑰對信息進行加密形成密文,Bob使用自己的私鑰對密文進行解密,解密後的結果如果是“Hello Bob”,則證明這個消息是正確的。此外,還提供了簽名機制,Alice可以用自己的私鑰對消息進行簽名,Bob通過Alice提供的公鑰進行驗籤,從而證明這個消息的發送者是Alice。

2交易確認

當某個節點發起一筆交易時,交易不會立即添加到區塊鏈中。首先會對交易餘額進行校驗,可是在區塊結構中,並沒有記錄賬戶餘額,那麼怎麼才能知道交易方有足夠的餘額呢。在比特幣交易網絡中,貨幣的所有權是通過驗證歷史交易信息來核實的。

例如Alice要發送1個btc給Bob,Alice必須援引之前收到這1個或更多的比特幣的歷史交易信息,這些被援引的交易記錄稱作“進賬”,Bob會查看那些進賬,以確保Alice是真正的接收者,並確保進賬數額為1個btc或更多。一旦一筆交易被使用過一次,該筆交易會被認為是已消費,且不能被再次使用。

3交易記錄

如果Alice的賬戶通過驗證則該筆交易為合法交易,Bob會將交易信息保存在事務池(或內存池)中並廣播給其它節點,其它節點接收到交易信息後也進行同樣的校驗操作。當某一個節點獲得記賬權後(基於加密哈希進行的隨機猜測),它會將交易納入區塊,在區塊上加蓋時間戳並記錄到自己維護的區塊鏈中,然後將該區塊進全網廣播,其它節點接到廣播後,也將區塊記錄到各自維護的區塊鏈中,此時Alice給Bob的轉賬完成,交易信息被記錄到區塊鏈上,無法更改。需要注意的是,我們所說的全網廣播,實際上只要大部節點能收到就可以了。區塊鏈提供了系統的容錯能力,那些沒有收到的節點可以通過下載的方式獲取到缺失的區塊。

4雙重支付和分叉

Alice賬戶有1個未消費的btc,Alice將這個1個btc同時發送給了Bob和Tom,這被稱為“雙重支付”或“雙花”。如果兩筆交易被先後驗證,例如給Bob的交易通過驗證,那麼給Tom的交易就會驗證失敗,反之亦然,驗證失敗的交易會被丟棄。如果兩筆交易被同時驗證,都被認為是有效交易,那麼在接入區塊鏈時就會暫時出現分叉情況,如圖1-2所示。

3走進區塊鏈-區塊鏈運行機制

圖1-2 區塊鏈分叉

之後的區塊如果認同哪一個區塊就會在哪一個區塊後面延續,比特幣規定選擇最長的那條鏈進行擴展,所以當再有新的區塊加入時會沿著最長的鏈延續,較短的那條鏈上的區塊將被拋棄,對應的交易將失效,失效的交易將承擔相應的損失。

為了避免這種情況發生,需要等待之後至少6個區塊都承認此區塊後,再確認交易完成,主要是因為,如果經過6次確認之後再返回去修改之前已經被確認過的區塊,則必須推翻之前6個區塊的記錄,這其實是很難的。因為獲得確認數越多,就需要越多的算力去修改,因此也越難被修改,除非擁有全網51%以上的算力,否則這是不可能實現的。這也是比特幣區塊鏈交易形成的“等待六次確認”原則。

相關推薦

推薦中...