區塊鏈背後的4大核心技術全面解析

買賣虛擬貨幣

區塊鏈的核心技術組成

無論是公鏈還是聯盟鏈,至少需要四個模組組成:P2P 網路協議、分散式一致性演算法(共識機制)、加密簽名演算法、賬戶與儲存模型。

1. P2P 網路協議

P2P 網路協議是所有區塊鏈的最底層模組,負責交易資料的網路傳輸和廣播、節點發現和維護。

通常我們所用的都是比特幣 P2P 網路協議模組,它遵循一定的互動原則。比如:初次連線到其他節點會被要求按照握手協議來確認狀態,在握手之後開始請求 Peer 節點的地址資料以及區塊資料。

這套 P2P 互動協議也具有自己的指令集合,指令體現在在訊息頭(Message Header) 的 命令(command)域中,這些命令為上層提供了節點發現、節點獲取、區塊頭獲取、區塊獲取等功能,這些功能都是非常底層、非常基礎的功能。如果你想要深入瞭解,可以參考比特幣開發者指南中的 Peer Discovery 的章節。

2. 分散式一致性演算法

在經典分散式計算領域,我們有 Raft 和 Paxos 演算法家族代表的非拜占庭容錯演算法,以及具有拜占庭容錯特性的 PBFT 共識演算法。

如果從技術演化的角度來看,我們可以得出一個圖,其中,區塊鏈技術把原來的分散式演算法進行了經濟學上的拓展。

(圖來自網路)

在圖中我們可以看到,計算機應用在最開始多為單點應用,高可用方便採用的是冷災備,後來發展到異地多活,這些異地多活可能採用的是負載均衡和路由技術,隨著分散式系統技術的發展,我們過渡到了 Paxos 和 Raft 為主的分散式系統。

而在區塊鏈領域,多采用 PoW 工作量證明演算法、PoS 權益證明演算法,以及 DPoS 代理權益證明演算法,以上三種是業界主流的共識演算法,這些演算法與經典分散式一致性演算法不同的是,它們融入了經濟學博弈的概念,下面我分別簡單介紹這三種共識演算法。

PoW: 通常是指在給定的約束下,求解一個特定難度的數學問題,誰解的速度快,誰就能獲得記賬權(出塊)權利。這個求解過程往往會轉換成計算問題,所以在比拼速度的情況下,也就變成了誰的計算方法更優,以及誰的裝置效能更好。

PoS: 這是一種股權證明機制,它的基本概念是你產生區塊的難度應該與你在網路裡所佔的股權(所有權佔比)成比例,它實現的核心思路是:使用你所鎖定代幣的幣齡(CoinAge)以及一個小的工作量證明,去計算一個目標值,當滿足目標值時,你將可能獲取記賬權。

DPoS: 簡單來理解就是將 PoS 共識演算法中的記賬者轉換為指定節點陣列成的小圈子,而不是所有人都可以參與記賬。這個圈子可能是 21 個節點,也有可能是 101 個節點,這一點取決於設計,只有這個圈子中的節點才能獲得記賬權。這將會極大地提高系統的吞吐量,因為更少的節點也就意味著網路和節點的可控。

3. 加密簽名演算法

在區塊鏈領域,應用得最多的是雜湊演算法。雜湊演算法具有抗碰撞性、原像不可逆、難題友好性等特徵。

其中,難題友好性正是眾多 PoW 幣種賴以存在的基礎,在比特幣中,SHA256 演算法被用作工作量證明的計算方法,也就是我們所說的挖礦演算法。

而在萊特幣身上,我們也會看到 Scrypt 演算法,該演算法與 SHA256 不同的是,需要大記憶體支援。而在其他一些幣種身上,我們也能看到基於 SHA3 演算法的挖礦演算法。以太坊使用了 Dagger-Hashimoto 演算法的改良版本,並命名為 Ethash,這是一個 IO 難解性的演算法。

當然,除了挖礦演算法,我們還會使用到 RIPEMD160 演算法,主要用於生成地址,眾多的比特幣衍生程式碼中,絕大部分都採用了比特幣的地址設計。

除了地址,我們還會使用到最核心的,也是區塊鏈 Token 系統的基石:公私鑰密碼演算法。

在比特幣大類的程式碼中,基本上使用的都是 ECDSA。ECDSA 是 ECC 與 DSA 的結合,整個簽名過程與 DSA 類似,所不一樣的是簽名中採取的演算法為 ECC(橢圓曲線函式)。

從技術上看,我們先從生成私鑰開始,其次從私鑰生成公鑰,最後從公鑰生成地址,以上每一步都是不可逆過程,也就是說無法從地址推匯出公鑰,從公鑰推導到私鑰。

圖來自《精通比特幣》一書

4. 賬戶與交易模型

從一開始的定義我們知道,僅從技術角度可以認為區塊鏈是一種分散式資料庫,那麼,多數區塊鏈到底使用了什麼型別的資料庫呢?

我在設計元界區塊鏈時,參考了多種資料庫,有 NoSQL 的 BerkelyDB、LevelDB,也有一些幣種採用基於 SQL 的 SQLite。這些作為底層的儲存設施,多以輕量級嵌入式資料庫為主,由於並不涉及區塊鏈的賬本特性,這些儲存技術與其他場合下的使用並沒有什麼不同。

區塊鏈的賬本特性,通常分為 UTXO 結構以及基於 Accout-Balance 結構的賬本結構,我們也稱為賬本模型。UTXO 是“unspent transaction input/output”的縮寫,翻譯過來就是指“未花費的交易輸入輸出”。

這個區塊鏈中 Token 轉移的一種記賬模式,每次轉移均以輸入輸出的形式出現;而在 Balance 結構中,是沒有這個模式的。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;