金明杰
(紹興銀行,紹興 312000)
區塊鏈(blockchain)技術目前最為火熱的計算機技術之一,區塊鏈技術是相關成熟技術的一個結合,包括密碼學算法、P2P網絡技術、分布式架構、共識機制等方面。區塊鏈應用則橫跨了多類學科:計算機軟件、計算機網絡、密碼算法、信息安全、經濟學、博弈學等。大致介紹下區塊鏈一些基礎相關內容和一些目前區塊鏈行業內一些專用術語。
區塊鏈技術組成包括密碼學算法、共識機制、P2P網絡、分布式系統、腳本、智能合約等,這幾個模塊之間的關系如圖1所示:

圖1 區塊鏈技術組成
區塊鏈技術起源于比特幣,在比特幣出現后,人們發現比特幣的底層技術架構,是結合之前技術后一種全新的架構,在這種架構下,通過密碼學算法保證身份、簽名、交易安全。數據通過共識機制寫入,實現了數據不可篡改,透明可追溯。并且結合P2P網絡架構,實現了一種去中介化的,每個節點保存一份數據,每個節點參與維護數據,且不依賴中心服務器的達成系統狀態一致。
密碼學發展的三個階段:古典密碼學、現代密碼學,1976年后,公鑰密碼學出現,這個也可以稱為非對稱加密,和之前的對稱加密最大的區別就是,加解密分別使用公鑰(publickey)和私鑰(privatekey),密鑰以一對的方式出現。W.Diきe和M.Hellman發表的New Direction in Cryptography,提出了非對稱密碼體制的概念。非對稱密碼體制一般依據兩類類數學問題:大整數分解問題和離散對數問題。
區塊鏈中涉及的私鑰、公鑰、錢包、助記詞、hash算法、橢圓加密算法、SHA算法家族等都是以密碼學算法為基礎。
Merkle tree(梅克爾樹)是數據結構中的一種樹結構,可以是二叉樹,也可以是多叉樹,它和數據結構中樹的特點幾乎一致,和普通樹不同的是:merkle tree上的葉節點存放hash計算后的hash值,非葉節點是其對應的子節點串聯的字符串的hash值。假設hash0是上一層節點,hash0-0和發送0-1是下一層節點,那么hash0=hash0-0+hash0-1。中本聰在比特幣系統中很巧妙地運用了merkle tree樹,包括錢包SPV簡單支付驗證都以merkle tree為基礎。以太坊也使用該模式來做區塊鏈系統中的驗證互聯。Merkle tree以hash算法為基礎,這里引入入一個hash root的概念,在區塊鏈中有merkle hash root值。這個數據值就是拼湊在一起的hash值,通過hash root,我們可以通過事先獲知hash root,然后結合hash list計算,逐步校驗每一塊的hash值并進行組合,組合值和hash root比較,一致就說明數據塊是沒有問題的,這種方式更好的運用在實際的網絡數據傳輸中。原理如圖2所示:

圖2
共識機制在分布式系統中是無解的,為什么說是無解,眾多的節點之間通信,必然存在網絡自身不可靠的原因、主機故障原因、惡意操控等原因,故是無法保證實現完全的共識,Fischer,Lynch和Patterson三位在1985年就提出了一個FLP不可能原理:在網絡可靠的前提下,任意節點失效,一個或者多個的最小化異步模型系統中,不可能存在一個解決一致性問題的確定性算法。這三位的論文后來獲得了Dijkstra獎。這一理論已被可靠的論證過。
FLP說明在異步分布式系統中完全一致性是不可能的,但這是一個科學理論,應用到現實工程中,犧牲一些代價把不可能變成可能,這就是科學和工程的最大區別,在計算機工程領域中2000年Eric Brewer在ACM研討會提出猜想,CAP猜想,CAP拆解后就是一致性(Consistency)所有節點上的數據時刻保持同步、可用性(Availablity)每個請求都能接受到一個響應不論響應成功或失敗、分區容忍性(Partition)系統內部有消息失效的情況下仍能提供持續服務。
實際運用在工程環境下,適當取舍這三者,一致性、可用性和分區容錯性三者無法在分布式系統中被同時滿足,并且最多只能滿足其中兩個。
那么在區塊鏈中常見的共識機制有pow、pos、dpos、pbft等,這里簡單介紹下最為常見的POW機制。
POW(Proof of Work)工作量證明機制。我們最直觀的理解就是,一份證明,這個證明確認你做了一定的工作量,類似于現代生活中一些檢測考試,通過檢測考試你就取得了一份證明,只不過這個證明是一個工作量的證明。
首先工作量證明需要客戶端做一個有難度的工作且得出一個結果,這個結果公布后,驗證的一方需要很快能進行驗證。這是不對等的。比如我們在一個字符串后加一個隨機數(nonce),對這個字符串進行SHA256計算,然后得到的結果用16進制來表示,我們要求這個計算后的16進制表示的初始幾位為:0000,那么才能算通過了驗證。這種規則就需要計算機去不斷的嘗試,當然你可以記得其中一些,但是這個概率畢竟是很小的。正常情況下需要不斷的輸出計算嘗試,直到出現正確的要求結果。
P2P(peer to peer):這個peer中文翻譯就是對等、對等者、伙伴、對端的意思。所以P2P網絡一般叫做對等網絡,其確切定義:網絡中每個參與節點共享節點所擁有的一部分計算能力、存儲能力、網絡連接能力,這些能力或者稱為共享資源通過網絡提供的服務和內容,可被對等節點直接訪問,訪問過程中不需要再經過中間實體,所以每個節點既是資源和服務的使用者、又是整個資源和服務的提供者。P2P網絡中各個節點都是出于一個對等的地位,沒有主、從的區分。整個網絡中不存在中心節點,每個節點都可對任意對等節點做出響應,提供資源,包括計算資源、存儲資源等。
P2P的理念,“我為人人、人人為我”讓所有加入互聯網的人,直接通過互聯網交互,不需要一個中間商,這樣溝通,共享,交互更加自由和方便,最終把互聯網的權利交換給用戶,而不是一些集中網絡中心。
智能合約是一種計算機協議,最早在1995年由計算機學者尼克·薩博(nick szabo)提出,當時的理念是:智能合約是一套以數字形式定義的承諾(promises),包括合約參與方在內都可以在上面執行承諾的協議。這一套理論的目標是為了能夠讓智能合約滿足普通合約的約束條件,最小化惡意或者意外發生的可能性,同時減小對信任中介的需求,這樣一來也就能降低造成合約欺詐的損失和仲裁執行的成本以及其他一系列交易成本。Nick szabo希望借助計算機和密碼學的約束,改進傳統合同的制定和履行,將所有合約條款和約定執行置于計算機協議的掌控之下,但是在區塊鏈技術未出現之前,這一套理論僅僅是理論,很少有真正在實踐中嘗試。區塊鏈技術其中一個目的是為了建立一個去信任化系統,信任在互聯網中是什么概念,信任就是點對點的鏈接,這個鏈接存在于數字空間中(計算機底層不就是01010101),這個空間是分布式的,沒有所謂的中心化,信任關系通過算法轉變成為代碼,代碼轉換為程序,程序驅動執行每一步。互相間的信任就是事先約定協議通過計算機和算法來實現控制。智能合約的信任在區塊鏈環境中剛好能完美實現。
比特幣是在2008年由署名Satoshi Nakamoto(中本聰或者中本哲也)發明的,他出版了一篇題為“Bitcoin:A Peer-to-Peer Electronic Cash System”的論文。
Nakamoto結合了諸如b-money和HashCash等先前的發明,創建了一個完全去中心化的電子現金系統,它不依賴中央機構進行貨幣發行或結算和驗證交易。使用分布式系統架構加工作量證明機制(POW)每平均10分鐘通過工作量證明機制來計算隨機數,競爭生成區塊,交易數據打包區塊中。實現分布式網絡達成關于交易狀態的共識。解決了雙花問題,和傳統解決雙花問題需要中心化系統機構來解決解決不同,實現一種分布式的賬本模式,bitcoin系統也被稱為全網分布式數據庫或者分布式統一賬本。網絡中每個節點都可選擇保存一份全網數據副本。
2009年區塊鏈比特幣網絡出現,創世區塊中的coinbase寫下:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”,中本聰和比特幣的奇跡開始于2009-01-03。
⊙ 比特幣區塊相關信息查詢:https://blockexplorer.com/
⊙ 比特幣單位數量:最小單位為“聰”,1聰=0.00000001比特幣,1Satoshi=0.00000001比特幣,bitcoin發行總量為2100萬個。
⊙ 數字貨幣:完全虛擬,沒有實體,一串字符串表示。
⊙ 比特幣:bitcoin也可理解為是一種協議,對P2P網絡和分布式計算存儲一種共識協議。
區塊鏈定義:網絡中一種分布式架構系統,通過密碼學、共識算法、P2P對等網絡交互,實現網絡中去信任化的方式全節點集體維護一致可靠分布式賬本技術架構。換種通俗的說法,區塊鏈就是網絡中各個參與者,都有一份相同可靠的數據副本,數據的寫入需要網絡中節點達成一種共識,和之前傳統化中心機構來記錄數據不同,它不依賴中心來記錄數據。從區塊鏈定義來理解,區塊鏈保證了網絡中數據的可靠,不依賴中心認證保證了信任的傳遞,這是目前對區塊鏈技術價值普遍的認為。根據這些特性設想了眾多應用場景:金融支付清算、數字身份、物聯網、供應鏈、藝術版權等。
有三個誤區需要明確:一是區塊鏈不是比特幣,區塊鏈是比特幣底層技術架構,比特幣是區塊鏈的一個應用。兩者不是同一個概念。二是區塊鏈降低成本,區塊鏈無中心機構認證,簡化交易環節,可節省第三方中介認證的成本,但這不代表區塊鏈技術是一種廉價的技術,在區塊中寫入保存數據需要成本,再者區塊鏈技術整個開發設計過程不是之前山寨幣那種模式,也是需要大量的成本的投入。三是區塊鏈技術目前還在發展階段,很多人都理解在技術發展前期,項目大多還是實驗性質,不盲目因為區塊鏈而去搭建區塊鏈。在實驗室中跑通了一段代碼,不代表實際應用中可以真正應用,明知有缺陷的上線是對系統本身的不負責任。
從區塊鏈技術發展來看,首先是被普遍認為加密數字貨幣應用的區塊鏈1.0,到現在結合智能合約的區塊鏈2.0,甚至現在提及的區塊鏈3.0(個人認為概念還是模糊的、沒有明確的定義和劃分)。區塊鏈隨著技術的發展不單單是加密數字貨幣,越來越多的現實生活應用場景結合智能合約可以很好的切合到現實中來,目前是一種理念和傳統架構的顛覆需要經過一個長期的過程,區塊鏈去中介的特性肯定對傳統中介機構會有一定的沖擊,現在隨著區塊鏈技術被越來越重視,各類傳統行業巨頭也都逐漸進入這個圈子來推廣和鉆研應用落地。相信隨著側鏈、跨鏈、閃電網絡、隔離見證等各類區塊鏈技術的發展和應用,區塊鏈能實現的應用會越來越廣,會出現一個革命性區塊鏈應用來帶動理念的轉變,直至大規模應用實現。
從區塊鏈應用場景來看,公有鏈、聯盟鏈、私有鏈。那么公有鏈現在眾多,聯盟鏈最為知名的超級賬本項目,國內也有專業做聯盟鏈服務平臺的眾多公司,普遍認為聯盟鏈在機構和企業巨頭的推動下會最先實現落地,而公有鏈則影響范圍更大。隨著技術的發展,結合應用場景,區塊鏈技術必然會有良好的發展。