在「淺說區塊鏈基礎」的部分中,我概括介紹了區塊鏈的入門知識以及區塊鏈的應用領域,在「深入區塊鏈技術」部分的第一篇中,我將帶你一起總覽下區塊鏈的技術概要,本篇提到的所有技術內容,我們都會在後續文章中進行詳細的講解。
區塊鏈的技術定義
簡單來說,區塊鏈是乙個提供了拜占庭容錯、並保證了最終一致性的分布式資料庫;從資料結構上看,它是基於時間序列的鏈式資料塊結構;從節點拓撲上看,它所有的節點互為冗餘備份;從操作上看,它提供了基於密碼學的公私鑰管理體系來管理賬戶。
或許以上概念過於抽象,我來舉個例子,你就好理解了。
你可以想象有100臺計算機分布在世界各地,這100臺機器之間的網路是廣域網,並且,這100臺機器的擁有者相不信任,那麼,我們採用什麼樣的演算法(共識機制)才能夠為它提供乙個可信任的環境,並且使得:
通常我們在分布式系統領域也見到過上述的要求,比如第2條就闡述了分布式系統基本要求:一致性要求;基於少數服從多數原則是為了容忍網路分割槽;區塊鏈就是解決上述問題的技術方案。
我們結合以往講過的內容,和將要講的內容,先提煉一下區塊鏈在技術上的7個特徵,你先記住,我們後續會慢慢道來:
區塊鏈的型別
我們在討論區塊鏈時,通常指的是公有區塊鏈。除此之外,還存在另外一種區塊鏈:聯盟鏈。
我們在前面的文章介紹過它。所謂聯盟鏈,就是這個區塊鏈具有准入許可,不像公鏈,任何人都可以隨時進入。准入許可也就意味著候選節點進入區塊鏈時需要得到已經在網路中的節點許可,所以聯盟鏈也叫做許可鏈。
早期文章裡可能還會涉及私有區塊鏈的定義,其實我認為私有區塊鏈更像是乙個捏造的概念,如果是完全私有的分布式資料庫,技術人員往往會有更好的選擇。
如今雲計算日趨成熟,大規模的分布式儲存已經不是難題,不必在區塊鏈這種低併發、低吞吐量的系統中折磨自己。
所以我們所說的區塊鏈通常指的是公鏈。除了公鏈和聯盟鏈的概念,還有一種區塊鏈概念,叫作側鏈。
側鏈是一種雙向掛鉤技術,將主鏈中的代幣鎖定到側鏈中使用。所以可以將主鏈看作主幹道,側鏈看作與主鏈相對獨立的一條分支道,作為主鏈功能的低耦合拓展。
區塊鏈的核心技術組成
無論是公鏈還是聯盟鏈,至少需要四個模組組成:p2p網路協議、分布式一致性演算法(共識機制)、加密簽名演算法、賬戶與儲存模型。
1. p2p網路協議
p2p網路協議是所有區塊鏈的最底層模組,負責交易資料的網路傳輸和廣播、節點發現和維護。
這套p2p互動協議也具有自己的指令集合,指令體現在在訊息頭(message header)的命令(command)域中,這些命令為上層提供了節點發現、節點獲取、區塊頭獲取、區塊獲取等功能。
這些功能都是非常底層、非常基礎的功能。如果你想要深入了解,可以參考位元幣開發者指南中的peer discovery的章節。
2. 分布式一致性演算法
在經典分布式計算領域,我們有raft和paxos演算法家族代表的非拜占庭容錯演算法,以及具有拜占庭容錯特性的pbft共識演算法。
如果從技術演化的角度來看,我們可以得出乙個圖,其中,區塊鏈技術把原來的分布式演算法進行了經濟學上的拓展。
(來自網路)
在圖中我們可以看到,計算機應用在最開始多為單點應用,高可用方便採用的是冷災備,後來發展到異地多活,這些異地多活可能採用的是負載均衡和路由技術,隨著分布式系統技術的發展,我們過渡到了paxos和raft為主的分布式系統。
而在區塊鏈領域,多採用pow工作量證明演算法、pos權益證明演算法,以及dpos**權益證明演算法,以上三種是業界主流的共識演算法,這些演算法與經典分布式一致性演算法不同的是融入了經濟學博弈的概念,下面我分別簡單介紹這三種共識演算法。
pow:通常是指在給定的約束下,求解乙個特定難度的數學問題,誰解的速度快,誰就能獲得記賬權(出塊)權利。這個求解過程往往會轉換成計算問題,所以在比拼速度的情況下,也就變成了誰的計算方法更優,以及誰的裝置效能更好。位元幣本身的演化很好地詮釋了這個問題,中本聰設計的思路本來是由cpu計算。隨著市場發展,人們發現gpu也可以參與其中,而且效率可以達到十倍百倍,現在,這項工作基本以asic專業挖礦晶元為主。
pos:這是一種股權證明機制,它的基本概念是產生區塊的難度應該與你在網路裡所佔的股權(所有權佔比)成比例,目前有三個版本pos1.0、pos2.0、pos3.0。它實現的核心思路是:使用你所鎖定代幣的幣齡(coinage)以及乙個小的工作量證明,去計算乙個目標值,當滿足目標值時,你將可能獲取記賬權。
dpos:簡單來理解就是將pos共識演算法中的記賬者轉換為指定節點數組成的小圈子,而不是所有人都可以參與記賬,這個圈子可能是21個節點,也有可能是101個節點。這一點取決於設計,只有這個圈子中的節點才能獲得記賬權。這將極大地提高系統的吞吐量,因為更少的節點也就意味著網路和節點的可控。
3.加密簽名演算法
由於我不是密碼學專業出身,所以這裡我將會以介紹為主。
在區塊鏈領域,雜湊演算法是應用得最多的演算法。雜湊演算法具有抗碰撞性、原像不可逆、難題友好性等特徵。
其中,難題友好性正是眾多pow幣種賴以存在的基礎,在位元幣中,sha256演算法被用作工作量證明的計算方法,也就是我們所說的挖礦演算法。
而在萊特幣身上,我們也會看到scrypt演算法,該演算法與sha256不同的是,需要大記憶體支援。
而在其他一些幣種身上,我們也能看到基於sha3演算法的挖礦演算法。以太坊使用了dagger-hashimoto演算法的改良版本,並命名為ethash,這是乙個io難解性的演算法。
當然,除了挖礦演算法,我們還會使用到ripemd160演算法,主要用於生成位址,眾多的位元幣衍生**中,絕大部分都採用了位元幣的位址設計。
在位元幣大類的**中,基本上使用的都是ecdsa。ecdsa是ecc與dsa的結合,整個簽名過程與dsa類似,所不一樣的是簽名中採取的演算法為ecc(橢圓曲線函式)。
從技術上看,我們先從生成私鑰開始,其次從私鑰生成公鑰,最後從公鑰生成位址,以上每一步都是不可逆過程,也就是說無法從位址推導出公鑰,從公鑰推導到私鑰。
(圖來自《精通位元幣》一書)
4. 賬戶與交易模型
從一開始的定義我們知道,僅從技術角度可以認為區塊鏈是一種分布式資料庫,那麼,多數區塊鏈到底使用了什麼型別的資料庫呢?
我在設計元界區塊鏈時,參考了多種資料庫,有nosql的berkelydb、leveldb,也有一些幣種採用基於sql的sqlite。
這些作為底層的儲存設施,多以輕量級嵌入式資料庫為主,由於並不涉及區塊鏈的賬本特性,這些儲存技術與其他場合下的使用並沒有什麼不同。
區塊鏈的賬本特性,通常分為utxo結構以及基於account-balance結構的賬本結構,我們也稱為賬本模型。utxo是「unspent transaction input/output」的縮寫,翻譯過來就是指「未花費的交易輸入輸出」。
這個區塊鏈中token轉移的一種記賬模式,每次轉移均以輸入輸出的形式出現。而在balance結構中,是沒有這個模式的。
總結
今天我介紹了區塊鏈的技術概念、分類以及核心技術組成,相信你對區塊鏈技術有了乙個初步的了解。
區塊鏈雖然是乙個新興的概念,但它依賴的技術一點也不新,如非對稱加密技術、p2p網路協議等。好比樂高積木,積木塊是有限的,但是不同組合卻能產生非常革新的事物。
區塊鏈技術基礎
網路層 區塊鏈網路的 p2p 協議主要用於節點間傳輸交易資料和區塊資料,位元幣和以太坊的 p2p 協議基於 tcp 協議實現,hyperledger fabric 的 p2p 協議則基於 協議實現。共識層 q1 訊息在不可靠通道上的傳播問題 a1 拜占庭容錯 byzantinefault toler...
區塊鏈技術基礎學習(一)
區塊鏈和位元幣 區塊鏈的特點 區塊鏈的型別 區塊鏈的底層架構 區塊鏈的關鍵技術點 區塊鏈存在問題 1 區塊鏈 block chain 2 位元幣 bitcoin 一種基於點對點支付的 由分布式網路系統生成的數字貨幣。流通 市場 去信任化 不可篡改 共識演算法形成的強大算力 單一節點非法篡改無法影響到...
區塊鏈技術深度剖析 第2章C 程式設計基礎
通過課堂教學結合實踐應用使學生了解區塊鏈的發展及其研究的主要內容,掌握區塊鏈的主要知識體系 基本理論 學會使用典型的密碼演算法,解決各行業應用的安全問題 通過課堂講解 討論和學生課下閱讀 思考以及上機除錯 了解區塊鏈在各行業中的應用需求,能夠把密碼思想融入到社會生活中,把密碼工具應用到區塊鏈系統中,...