天天看點

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%以上的算力,否則這是不可能實作的。這也是比特币區塊鍊交易形成的“等待六次确認”原則。

繼續閱讀