理解區塊鏈技術

現在區塊鏈技術十分火爆, 玩客幣推出后, 迅雷股價從10月初的8美元左右一度飆升至27美元!! 資本市場對區塊鏈概念和比特幣模式非常看好.

比特幣就是區塊鏈技術的一個成功應用.

"區塊鏈"概念介紹

區塊鏈技術也被稱之為分布式賬本, 是一種互聯網數據庫技術, 特點是去中心化, 公開透明, 讓每個人均可參與數據庫記錄.

上面這一句來自百度百科. 我第一次看過之后對區塊鏈還是一頭霧水. 還看了知乎上關于區塊鏈的回答. 知乎上的回答多是將區塊鏈和比特幣混合起來講, 看了還是很糊涂. 下面我先拋開比特幣, 單獨說說區塊鏈. 最后在結合比特幣說說比特幣是如何應用區塊鏈技術的.

區塊鏈是一種數據庫技術

首先區塊鏈是一種分布式數據庫!! 這種數據庫將數據存儲在任意多臺機器上, 并且能夠保證所有機器上存儲的數據是一致的. 由于互聯網上有無數多臺機器, 所以區塊鏈形成的數據庫永遠都存在備份. 那么問題來了, 如何保證無數多臺機器之間的數據一致性? 數據量太大怎么辦? 冗余太多怎么辦?

  1. 數據冗余問題

    區塊鏈技術不是為了減少數據冗余, 不是為了提高查詢速度. 它的特點是去中心化, 公開透明.
  2. 數據量太大的問題

    區塊量系統將數據存儲在無數多臺機器上, 每臺機器上存儲的數據是一致的, 這樣數據會越來越多, 但是根據信息技術的摩爾定律:每18個月左右, 同樣價錢能夠買到的存儲能力提升一倍, 這樣來看區塊鏈系統中的數據是永遠夠存的. 不需要考慮數據太多沒法存儲的問題.
  3. 不同機器之間數據一致性的問題

    這個問題要分兩部分解決, 1機器(或者叫結點)的數量是有限的情況下, 2機器(結點)數量是無限的情況下.

3.1 結點數量有限的環境下的共識算法: 拜占庭共識算法pbft(之后再詳細介紹)
3.2 結點數量無限的環境下: 比特幣的工作量證明機制.(在工作量證明機制下選擇累計工作量最大的區塊鏈)

簡單總結下:

  1. 區塊鏈是一種數據庫
  2. 區塊鏈的數據存儲在很多很多的機器上(任意一臺機器出問題不會對整個系統產生影響)
  3. 不同機器之間需要想辦法保證數據一致

理解"區塊鏈"一詞

上面介紹的這種分布式數據庫為什么要叫"區塊鏈"??

區塊鏈需要分成兩部分"區塊"和"鏈"

結合數據結構中的鏈表的概念理解區塊鏈

#define struct ListNode{
    int var;
    ListNode *next;
}Node;

上面是一個鏈表的定義, 鏈表每個結點分兩部分, 1數據存儲部分. 2下一個結點的指針
通過不斷訪問next即可遍歷鏈表. 鏈表就是很多個Node 通過next指針連接起來.

區塊鏈就是很多個區塊通過hash值連接起來
區塊.png

一個區塊大致上可以理解為這樣的結構

#define struct Block{
    char *myHash;//本區塊的hash值
    int  var;//表示數據, 可以理解為任意數據
    char *previousHash;//上一個區塊的hash值
}Block;

可以這樣想象一下, 拿到一些數據, 通過這些數據計算出myHash2, 數據加上自己的hash值成為一個區塊(newBlock), 查詢當前區塊鏈中最后一個區塊的myHash1, 將newBlock的previousHash賦值為myHash1, 這樣不同的區塊(block)之間以hash值相連接成為一個鏈條--區塊鏈.

從最后一個區塊開始不斷訪問previousHash即可遍歷整個區塊鏈.

小結:

  1. 區塊鏈是一種邏輯結構
  2. 鏈表是不同結點使用內存地址來連接, 區塊鏈是不同區塊之間使用hash值來連接.

從"賬本"的角度理解區塊鏈

區塊鏈是一個分布式賬本, 區塊鏈中的數據只能添加, 不能修改和刪除. 例如a獲得10元
a支出10元. 這樣通過遍歷a的所有記賬記錄可以得到a的賬戶余額.

多個結點如何共同完成記賬操作?

參與區塊鏈的各個結點需要選出一個記賬結點, 此時被選出的主結點負責記賬, 并且把記賬數據發送給區塊鏈中的其他結點. 當主結點出了問題, 剩下的結點可以自動選舉出新的主結點負責記賬.

小結:

  1. 區塊鏈中的數據只能添加, 不能修改和刪除
  2. 多個結點參與記賬, 能夠自動選出主結點. 其他結點依據主節點進行數據同步.
  3. 主節點可以自動更換.

從技術角度理解區塊鏈

區塊鏈技術是以下技術的組合

  1. 點對點網絡(p2p技術)
  2. 加密技術(如RSA)
  3. 共識算法(如pbft, 工作量證明機制)
  4. 數據存儲技術(數據庫)

點對點網絡

即p2p技術, 簡單地說就是一個結點既是客戶端也是服務端, 結點(機器)可以訪問其他結點, 也可以應答其他結點的請求.

類似p2p下載, p2p下載器可以訪問到當前p2p網絡中的其他結點, 從其他結點下載數據, 同時p2p下載器也將你擁有的資源提供給別人下載.

p2p技術提供了結點發現功能, 即p2p網絡中的結點可以自動發現新結點.

p2p網絡內可以廣播消息

加密技術

RSA公鑰加密, 私鑰解密.
hash算法 hash256, md5等等
保證數據傳輸安全, 防止數據被篡改.

數據存儲技術

mysql, sqlite, leveldb
一個單獨區塊中的數據可以是任意類型. 例如賬本, 就是一條條的記賬數據, 可以理解成數據庫中一個表的n條記錄.

共識算法

共識算法保證多個結點之間的數據一致性. (一個新區塊的添加, 需要多個結點之間討論達成共識)

結點有限的環境下的一種共識算法pbft

pbft拜占庭容錯算法, 具體的算法可以單獨寫一篇上萬字的文章了...
此處只寫一些pbft算法的特點.

pbft流程.png

上圖是pbft算法的執行流程,
由圖可知, 當結點數量增大時, 共識算法的效率會降低. 所以pbft算法只能應用在結點數量有限的區塊鏈系統中.

小結:

  1. 結點之間利用p2p網絡同步信息.
  2. 新區塊在被添加到區塊鏈中之前需要經過共識算法討論.
  3. 共識算法保證了多個結點之間數據一致.
  4. pbft算法的效率隨著結點數量的增加而降低.

區塊鏈系統的一次執行流程(結點數量有限的環境下)

  1. 選舉中心結點(記賬結點)
  2. 記賬結點接受記賬數據, 例如100條數據形成一個區塊
  3. 記賬結點將新區塊廣播到p2p網絡中
  4. p2p網絡中的所有結點開始共識算法
  5. 所有結點達成共識
  6. p2p網絡中的各個結點根據共識情況將新區塊加入到自己的區塊鏈中

總結

區塊鏈技術就是多臺機器共同保存一份數據. 共識算法保證了多臺機器之間的數據一致性, 分布式存儲和加密技術保證了數據不會被篡改, 一些結點失效不會影響整個系統的運行. 點對點網絡保證了任何機器可以隨時加入和退出區塊鏈系統.

實現了全網共同維護一份可增加不可被修改的數據.

比特幣是如何應用區塊鏈技術的

比特幣有礦工的概念, 礦工就是區塊鏈系統中的結點.
比特幣設計了獨特的共識算法, 主要是選舉記賬結點這一部分. 比特幣的記賬結點每10分鐘更換一次, 通過hash碰撞來選舉記賬結點. 流程大致是這樣的.

  1. 記賬結點提出數學問題, (就是一個哈希值)
  2. 各個礦工開始哈希運算, 第一個通過hash運算得到上一個結點提出的hash值的結點成為新的記賬結點, 成為新記賬結點的同時生成新的區塊, 并且此礦工得到比特幣獎勵.
  3. 記賬結點將包含自己比特幣獎勵信息的區塊廣播到全網, 全網礦工記錄此新區塊.
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容