猿學—十一張圖解析區塊鏈原理

區塊鏈概念很火,尤其是2018年伊始在各互聯網指數上熱度都極大上揚。區塊鏈到底是怎麼回事?區塊鏈原理到底是什麼?本文就是為揭開區塊鏈原理而來,讓我們仔細研究下區塊鏈,探究區塊鏈的奧秘。

如果說互聯網使得信息可以自由傳播,那麼,區塊鏈則可以做到價值在互聯網上傳播,說區塊鏈是革命可能有點誇大,但至少是在信息技術基礎上,區塊鏈使得價值在可信賴的去中心化價值體系中傳播。

先嚐試用一句話來描述什麼是區塊鏈:區塊鏈建立了一個各節點地位對等的網絡,在節點之間無需事先信任的情況下,通過加密算法和共識機制,以及塊鏈結構的數據存儲,實現數字資產在節點之間的轉移(節點是指加入該網絡的計算設備)。本質上可以說是一個基於分佈式的價值傳輸體系。

猿學—十一張圖解析區塊鏈原理

圖1 中心化網絡

什麼是節點地位對等的網絡?區塊鏈的眾多文章中都提到了,就是點對點的去中心化。反之,就是中心化網絡,圖1就是中心化的網絡,內容或交易數據都需要通過中心化處理,用戶都在中心繫統擁有賬戶,數據是在中心繫統的兩個賬戶間轉移。常規的網絡系統大多都是中心化的,賬戶和數據存儲在中心服務器上,然後通過客戶端App查看數據。

去中心化的利弊不多做分析,因為放到實際的行業應用中即可以發現其用途,比如某個行業內我們不希望某個公司控制所有數據和資產,一家獨大而增大行業風險;比如我們總擔心花錢購買的一些商家的折扣卡,在商家倒閉或跑路之後,導致錢財損失。有了區塊鏈技術,上述問題可以解決,前者問題可以通過類似比特幣的區塊鏈解決,後者問題可以通過類似以太坊的智能合約區塊鏈解決。​因此我們時常希望構建一個節點地位對等的去中心化網絡。

猿學—十一張圖解析區塊鏈原理

圖2 節點對等的P2P網絡

區塊鏈的去中心化特徵明白了,但是對等的用戶節點之間如何通信呢?P2P(peer to peer) 技術可以解決這個問題,P2P技術在早年的下載軟件中被廣泛應用,例如BT下載,節點既下載也上傳數據,達到網絡中所有節點間數據的逐漸同步。通過P2P,用戶之間就可以直接交換信息了,在比特幣的網絡中,就可以同步交易數據。圖2是點對點的去中心化系統,節點間直接交換數據。

節點地位對等的P2P網絡建立了,但仔細想想,這樣的網絡用於價值傳輸,似乎還存在較多問題。

猿學—十一張圖解析區塊鏈原理

圖3 全量賬本

如圖3,每個節點都全量記錄交易數據,通過P2P網絡來同步,全量記錄是需要的,否則只能依賴別人的記錄。但是,部分節點可能會某些時間不在線,或者某些交易數據記錄有誤,長期積累後,就很難同步,問題也隨之而來,以哪個節點為準?這就類似拜占庭將軍問題。我們希望該P2P網絡具備容錯能力,確保信息傳遞的一致性,零信任基礎的節點達成共識。區塊鏈的塊鏈存儲結構解決了上述問題。

猿學—十一張圖解析區塊鏈原理

圖4 短時賬本

首先,按固定時間段劃分,所有節點記錄這段時間內的賬本。以比特幣網絡為例,交易信息會通過P2P網絡廣播到所有在線節點,在線節點會記錄十分鐘左右的交易記錄,如圖4。當然即使是十分鐘的賬本,也可能出現圖3中的節點不在線的問題,不急,我們接著看。

猿學—十一張圖解析區塊鏈原理

圖5 競爭記賬

在線節點每十分鐘打包交易信息,並需要爭取記賬權,爭取到記賬權的節點就是這次的leader,其他所有節點要以它的賬為準。如何爭取記賬權?在比特幣裡就是工作量證明(PoW算法)。工作量證明如何實施?如圖5所示,節點都對自己的賬本做哈希(Hash)計算,當然如果賬本內容不變,每次計算出來的哈希值(一個16進制字符串)是不會變的,所以需要在賬本里面插入一個隨機數,每次修改隨機數再計算哈希值,直到計算出的哈希值小於預設的閾值。圖5中的f(x)假設為哈希計算,參數是賬本和隨機變量,要反覆嘗試出f(x)

猿學—十一張圖解析區塊鏈原理

圖6 打包短時賬本

圖6,最先算出的節點就開始打包這十分鐘的賬本了,包裡面含有賬本、隨機數等,當然這時候別的節點還在努力的計算,因為它們並不知道有個節點已經算出來了。

猿學—十一張圖解析區塊鏈原理

圖7 同步區塊

圖7,打好後的包稱之為塊(block),該節點馬上把塊同步給其他節點,其他節點在收到塊之後就立即停止了手頭的工作量證明計算,並校驗該塊的正確性。比如,工作量證明是否有效,每一筆交易是否正確等。

猿學—十一張圖解析區塊鏈原理

圖8 區塊加入鏈

圖8,校驗通過後,該十分鐘的交易信息大家以此為準,把塊加入到鏈上,即所有歷史的塊,按時間順序串聯起來。校驗不通過怎麼辦?當然是捨棄,繼續計算,自然會有別的節點打包出正確的塊。​另外,如果有交易記錄因為某些原因沒有被打包進當前區塊怎麼辦?沒問題,只要該交易內容已經廣播給其他節點,在下個時間段也會被打包進區塊。

工作量證明似乎有點浪費資源,為什麼不是固定節點打包塊呢?因為這樣做可以防止惡意攻擊以及節點故障,提升了整個網絡的容錯性和安全性。

猿學—十一張圖解析區塊鏈原理

圖9 非對稱加密

塊鏈結構搞清楚了,但是還存在問題,十分鐘的賬裡面的每一筆交易,是如何保證正確的呢?這裡就要提到非對稱加密算法了,圖9所示,所謂非對稱加密,就是加密和解密需要不同的兩串密鑰,圖中以鑰匙示例,實際在計算機裡就是兩個不同的密碼字符串。如果用其中一個密鑰加密,則必須用成對的另一個密鑰來解密。於是一個稱之為私鑰,用戶自己留著,一個稱之為公鑰,可以公開給網絡上別的節點。有什麼用呢?除了圖9中的加密,還可以做簽名。

猿學—十一張圖解析區塊鏈原理

圖10 廣播交易內容和簽名

簽名如圖10,比如A節點先計算出一筆交易內容的哈希值字符串,然後用私鑰將這個哈希值加密為簽名(圖中密封信所示,實際在計算機中也是一個字符串)。A節點將交易內容連同簽名一起發給別的節點,別的節點收到後,用A的公鑰解密簽名就得到了加密前的哈希值,比較交易內容的哈希值,如果兩者一致,說明該交易內容確實是A節點發出的,並且沒有被別人篡改過。

猿學—十一張圖解析區塊鏈原理

圖11 環環相扣 無法篡改

還有一個問題,如何保證歷史的區塊不被修改?首先,因為鏈式存儲的特性,以哈希值為索引,每個區塊都包含前一個區塊的哈希值,環環相扣。如圖11所示,如果改變97號區塊的內容,那麼其哈希值也變了,98號區塊中填寫的97號哈希值也要相應更改,98號改變了,則連鎖反應,必須更改之後的所有區塊。這樣修改是很難做到的,因為新的區塊也一直在產生,而節點間的同步是以最長鏈為標準。那有人可能會疑問,我修改其中的一個區塊,並一下構造一個很長的鏈不就行了?對不起,很難做到,因為有PoW工作量證明機制的存在,每產生一個區塊,必須是將該時間段內的全網交易+隨機數碰撞出小於閾值的哈希值之後,才能產生被別的節點認可的區塊,這種機制下無法隨意生成一個長鏈,據理論計算,只有擁有全部節點算力51%以上者才有可能具備這個能力。

以上就是小編對於區塊鏈基本原理的初次探討,區塊鏈經過了多年的發展,從比特幣到智能合約,其技術內容也越來越深奧,值得研究的內容很多很多。請靜待後續更新,更多內容請關注我們。


分享到:


相關文章: