官术网_书友最值得收藏!

1.1.1 區塊鏈技術發展綜述

區塊鏈作為比特幣(Bitcoin)的技術支撐,最早出現在2008年中本聰(Satoshi Nakamoto)發表的“比特幣:一種點對點式的電子現金系統”(Bitcoin:A Peer-to-Peer Electronic Cash System)中。文中詳細描述了通過集成P2P網絡協議、非對稱加密、共識機制、塊鏈結構、未花費的交易輸出(Unspent Transaction Output,UTXO)賬戶模型等多種技術,建立了一套全新的、去中心化的、不需要信任基礎的點對點交易體系,實現了多方可信、對等的價值傳遞。以2009年1月3日誕生的第一個區塊——“創世區塊”為起點,至今比特幣交易的可實現性已經得到證明。2013年12月,Vitalik Buterin創建了以太坊(Ethereum)區塊鏈平臺,該平臺除了可基于內置的以太幣(Ether)實現數字貨幣交易,還提供了圖靈完備的編程語言,以編寫智能合約(Smart Contract),從而首次將智能合約應用到區塊鏈中。以太坊的愿景是創建一個永不停止、無審查、自動維護的去中心化的世界計算機。2015年12月,Linux基金會發起了超級賬本Hyperledger開源區塊鏈項目,旨在發展跨行業的商業區塊鏈平臺。企業級區塊鏈超級賬本項目(Hyperledger Fabric)是專門為企業級區塊鏈應用設計的,與比特幣和以太坊不同,它引入了成員管理服務,旨在滿足更加復雜的商業邏輯,這標志著區塊鏈技術的發展開始進入廣泛創新應用階段。根據比特幣大會發布的《布雷頓森林體系2015白皮書》(Bretton Woods 2015 White Paper),區塊鏈的發展可以劃分為以下3個階段。

(1)區塊鏈1.0:數字貨幣階段。該階段以比特幣為代表,采用以可編程數字加密貨幣體系為主要特征的區塊鏈模式,主要體現在比特幣應用方面。區塊鏈采用純數學方法而不是依靠中心機構建立信任關系,使互不信任或弱信任的參與者之間能夠維系不可篡改的賬本記錄。

(2)區塊鏈2.0:智能合約階段。采用以以太坊生態為主要特征的區塊鏈可編程金融系統模式,區塊鏈技術被運用在金融或經濟市場,延伸到股票、債券、期貨、貸款、按揭、產權、智能資產等合約方面。

(3)區塊鏈3.0:超越金融領域的多行業應用階段,進入可編程社會系統時代。區塊鏈將主要應用在物聯網、智能制造、供應鏈管理、司法、醫療、數字藝術、跨境貿易、跨境支付、跨境物流與跨境電子政務等領域,成為未來社會一種最底層的基礎設施,涵蓋社會生活的方方面面,真正實現跨鏈通信、多鏈融合的可信價值互聯網。

從最早應用區塊鏈技術的比特幣,到最先在區塊鏈引入智能合約的以太坊,再到應用最廣的企業級區塊鏈超級賬本項目(Hyperledger Fabric),它們雖然在具體實現上各有不同,但在整體體系架構上存在著諸多共性。區塊鏈平臺整體可劃分為6個層次,即網絡層、共識層、密碼層、數據層、智能合約層和應用層,如圖1-1所示。

圖1-1 區塊鏈體系架構

· 網絡層:區塊鏈網絡層的核心由基于TCP/IP的分布式P2P網絡傳輸協議(如Gossip協議或泛洪搜索協議)構建,用于在節點間傳輸交易數據和區塊數據,比特幣和以太坊的P2P網絡傳輸協議基于TCP實現,Hyperledger Fabric的P2P網絡傳輸協議則基于HTTP/2實現。

· 共識層:共識層是確保區塊鏈網絡多方共管一致性的核心組件,決定了區塊鏈系統的安全性、可擴展性和去中心化程度等特性。共識層主要的算法包括工作量證明(Proof of Work,PoW)共識算法和權益證明(ProofofStake,PoS)共識算法、實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)算法等。

· 密碼層:密碼層包含確保區塊鏈安全的關鍵密碼協議,這些協議在區塊鏈流程的完整性、信息的安全傳播和區塊鏈共識機制方面發揮著至關重要的作用。該層主要由公鑰密碼體系組成,如數字簽名、哈希函數等。

· 數據層:區塊鏈數據層主要包括數據結構、數據模型和數據存儲3個方面。在數據結構的設計方面,基于時間戳的數字公證服務證明區塊的創建時間。區塊鏈中每個區塊包含區塊頭和區塊體兩部分。區塊頭存放Merkle根、前塊哈希、時間戳等數據;區塊體存放批量交易數據。在數據模型的設計方面,主要包括基于交易的數據模型和基于賬戶的數據模型。在數據存儲的設計方面,通常按日志文件格式存儲,由于系統需要大量基于哈希的鍵值檢索(如基于交易哈希檢索交易數據、基于區塊哈希檢索區塊數據),所以索引數據和狀態數據通常存儲在Key-Value數據庫中。

· 智能合約層:智能合約是一種使用算法和程序編制的合同條款,它們可部署在區塊鏈上,并按照規則自動執行數字化協議。與此類似,比特幣腳本是嵌入比特幣交易中的一組指令,由于指令類型單一、實現功能有限,其只能被視為智能合約的雛形。以太坊提供了圖靈完備的腳本語言Solidity2、Serpent3,以及沙盒環境以太坊虛擬機(Ethereum Virtual Machine,EVM),以供用戶編寫和運行智能合約。Hyperledger Fabric的智能合約被稱為Chaincode,其使用Docker容器作為沙盒環境,并且Docker容器中包含一組經過簽名的基礎磁盤映像,以及Go語言與Java語言運行時的SDK,以運行Go語言與Java語言編寫的Chaincode。

· 應用層:比特幣平臺主要應用于比特幣交易;而以太坊不僅支持以太幣的數字貨幣交易,還支持去中心化應用程序(Decentralized Application,DApp)。DApp是由JavaScript構建的Web前端應用,通過JSON-RPC與運行在以太坊節點上的智能合約進行通信。Hyperledger Fabric主要面向企業級區塊鏈應用,沒有提供數字貨幣交易,其應用可基于Go、Java、Python、Node.js等多種語言的SDK構建,并通過gPRC或REST與運行在Hyperledger Fabric節點上的智能合約進行通信。

區塊鏈網絡技術并不是一種全新的技術,而是一個集成了密碼學、分布式系統、博弈論等多種技術的新型組合技術。區塊鏈是一種去中心化的技術,它能夠在沒有第三方權威機構的參與下,建立交易雙方之間的可靠信任,實現可信的價值傳輸。因此,區塊鏈被稱為價值互聯網或第二代互聯網。

1.互聯網到P2P網絡(1960—2001年)

20世紀60年代后半葉,以美國國防部(United States Department of Defense,DoD)為中心開始了通信技術的軍事應用研究,希望即使在通信過程中遭遇敵方攻擊和破壞,也可以通過迂回線路實現通信。為此,分組交換技術應運而生。1969年,為驗證分組交換的實用性,研究人員構建了一個由4個節點組成的高級研究計劃局(Advanced Research Projects Agency,ARPA)網絡,即ARPANET。隨著通信技術的發展,普通用戶也加入ARPANET中,3年內從4個節點發展為34個節點,這充分證明了基于分組交換的通信技術的可行性。ARPANET不僅利用機構組成的網絡進行分組交換實驗,還進行了為互連計算機提供可靠傳輸的綜合性通信協議的實驗。20世紀70年代前半葉,ARPANET的一個研究機構提出了TCP/IP,直到1982年,該協議的具體規范才被確定,1983年,該協議成為ARPANET的唯一指定協議。

隨著1980年UNIX系統的普及和互聯網的擴張,ARPANET開始使用BSDUNIX操作系統。20世紀80年代,不僅局域網快速發展,UNIX工作站也迅速普及,TCP/IP網絡得以廣泛應用。在這種趨勢下,基于TCP/IP的世界性網絡——Internet應運而生。

1989—1991年,歐洲核子研究中心(European Organization for Nuclear Research,CERN)的蒂姆·伯納斯·李開發了超文本鏈接文件服務,創辦了萬維網(Word Wide Web,WWW)。1993年,第一個Web瀏覽器Mosaic誕生,自此商用互聯網服務迅速發展,萬維網的誕生為全球信息的交流和傳播帶來了革命性的變化,降低了互聯網的連接成本,推動了互聯網的快速普及。但是,隨著互聯網逐漸普及并深入人們的日常生活,人們需要更直接、更廣泛的信息交流,以實現更多的資源和服務共享。普通用戶希望能夠全面參與到互聯網的信息交流中,而計算機和網絡性能的提升也使其具備了現實可能性。

在此背景下,1999年,Napster軟件應用P2P網絡協議允許對等用戶不受任何干擾地進行上傳和下載,短時間內吸引了5 000萬名用戶參與到MP3動態目錄共享服務中。2001年,加州程序員Cohen開發的BitTorrent(BT)作為一款專門針對大容量文件的多點共享和分發協議,在數字音樂、娛樂和電影等流媒體,點對點通信,文件共享及系統處理多個領域得到廣泛的應用。

區塊鏈網絡的核心技術要素是P2P網絡技術,從上述P2P網絡技術的發展來看,區塊鏈網絡是基于TCP/IP的P2P網絡,實際上是TCP/IP模型中的最高層,即應用層,類似于HTTP和SMTP。因此,區塊鏈網絡本質上是在以HTTP為代表的應用層上,基于分布式點對點的拓撲結構進行信息交互的。這也是以太坊提出的Web 3.0的基礎。

(1)比特幣的P2P網絡基于TCP構建,采用集中式和分布式結構的混合式路由模式,主網默認通信端口為8 333,并建立連接認證“握手”通信過程,用來確定協議版本、軟件版本、節點IP、區塊高度等。

(2)以太坊的P2P網絡采用Kademlia算法實現DHT路由方案,其基于結構化P2P網絡方式。以太坊的P2P網絡是一個完全加密的網絡,節點之間交互采用對稱加密握手方式。該網絡提供UDP和TCP兩種連接方式,主網默認TCP通信端口為30 303,推薦的UDP發現端口為30 301。

2.區塊鏈中的密碼學

密碼學技術是區塊鏈構建信任的基石,也是區塊鏈技術的核心技術之一。它通過哈希函數、數字簽名、可信時間戳、非對稱加密和默克爾(Merkle)樹等技術的組合應用來確保在無信任環境下數據的不可篡改性、完整性、不可抵賴性和可認證性。

20世紀70年代,隨著計算機科學的蓬勃發展,密碼學成為一門新興的學科。1976年,Diffie和Hellman提出了公鑰密碼的思想,標志著現代密碼學的誕生,這一事件在國際密碼學發展史上具有里程碑意義。自此,國際上已提出許多種公鑰密碼體制,如基于大整數因子分解的困難性問題的RSA密碼體制、基于離散對數問題的公鑰密碼體制(ElGamal密碼體制)及橢圓曲線密碼體制(Elliptic Curve Cryptography,ECC)等。

在區塊鏈上,用戶可以選擇自己的私鑰,并生成相應的公鑰,該公鑰對應記錄在區塊的地址上,公鑰經過變換成為用戶的交易地址。通常情況下,不同的記錄對應不同的公鑰/私鑰對。用戶使用公鑰對消息進行加密,只有對應的私鑰才能解密。同時,私鑰可用于對自己的交易信息進行數字簽名,其他用戶可利用對應公鑰驗證消息的簽名。

哈希函數是一種數學函數,它可以將任意長度的消息轉換成固定長度的值,也被稱為散列函數、雜湊函數或消息摘要。哈希函數于1953年問世,并在1970年蓬勃發展,在區塊鏈技術中,哈希函數被廣泛應用于地址生成、數字簽名、Merkle樹等。目前,較為知名的哈希函數包括MD系列、SHA-1(SecureHash Algorithm)系列、SHA-2系列、RIPEMD系列、Whirlpool系列和國密算法SM3等。

Merkle樹是一種哈希二叉樹,由Ralph Merkle于1979年發明。在Merkle樹中,葉節點存儲的是數據文件,而非葉節點存儲的是其子節點的哈希值(Hash值,通過SHA-1、SHA-256等哈希算法計算而來),這些非葉節點的哈希值被稱為路徑哈希值,可以用來確定某個葉節點到根節點的路徑,葉節點的哈希值是真實數據的哈希值。由于采用了樹形結構,其查詢的時間復雜度為O(logn),其中,n是節點數量。在區塊鏈中,用戶可以通過區塊頭得到Merkle根和其他節點提供的中間哈希值來驗證某個交易是否存在于區塊中。此外,Merkle樹還支持簡單支付驗證(Simplified Payment Verification,SPV)協議。

3.分布式一致性共識

從20世紀90年代開始,隨著互聯網的普及,分布式系統中的一致性問題變得越來越重要。然而,在互聯網蓬勃發展前,一些有遠見的科學家們早在20世紀70年代就開始在多路處理器級別上研究一致性模型。Leslie Lamport(圖靈獎獲得者)是早期進行分布式系統一致性研究的科學家,他在1978年的論文中提出了一個分辨分布式系統中事件因果關系的算法,后來人們把該算法稱為Lamport Timestamp或Lamport Clock。這個算法為后來的分布式系統一致性研究奠定了技術基礎。

解決一致性共識問題需要滿足進程在有限時間內結束(Termination),以及進程達到一致性(Agreement)和一致有效性(Validity)的要求。為解決上述問題,圖靈獎獲得者Jim Gray在Leslie Lamport的論文發表的同一年(1978年)提出了“兩階段提交”(Two Phase Commit)的概念。這個概念成為后來的分布式系統中共識算法的基礎。1999年,Miguel Castro和Barbara Liskov提出了實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)算法,這個算法可以在異步網絡中不保證進程終止的情況下解決拜占庭將軍問題。

1990年,Leslie Lamport提出了適用于分布式系統的Paxos算法。這個算法是基于消息傳遞且具有高度容錯特性的分布式一致性算法,能夠解決在異步網絡環境下,如何就某個值(決議)達成一致,這個算法成為分布式系統中的經典共識算法。

共識機制作為區塊鏈系統的核心組成部分,已經從分布式系統進入區塊鏈的共識階段。在以比特幣為代表的非授權網絡中,節點加入和退出的動態性與不可預測性決定了共識協議的設計,決定了參與節點以何種方式對某些特定的數據達成一致,共識協議同時決定了區塊鏈系統的性能及安全性。Paxos算法主要是針對網絡中可能出現的崩潰節點而設計的,而PBFT算法可以容忍某些拜占庭式的錯誤節點。

與分布式一致性共識相關的關鍵事件如下。

· 1982年,Leslie Lamport等人提出拜占庭將軍問題,旨在解決在不可靠信道上消息傳遞的一致性問題。

· 1993年,Cynthia Dwork和Moni Naor提出了工作量證明機制,這是一種應對服務與資源濫用或阻斷服務攻擊的經濟對策。

· 1997年,英國密碼學家亞當·貝克(Adam Back)獨立提出用于哈希現金的工作量證明機制,并于2002年正式發表。

· 1999年,馬庫斯·雅各布松(Markus Jakobsson)正式提出了“工作量證明”概念。這為后來中本聰設計比特幣的共識機制奠定了基礎。

· 2000年,加利福尼亞大學的埃里克·布魯爾(EricBrewer)教授在“ACMSymposium on Principles of Distributed Computing”研討會的特邀報告中提出了一個猜想,指出分布式系統無法同時實現一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance),最多只能同時實現其中兩個。

· 2002年,塞斯·吉爾伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)在異步網絡模型中證明了埃里克·布魯爾的猜想,從而形成了CAP定理或布魯爾定理。

· 2011年7月,一位名叫“Quantum Mechanic”的數字貨幣愛好者在比特幣論壇中首次提出了權益證明(PoS)共識算法。

· 2012年8月,Sunny King首次在點點幣(Peercoin,PPC)中實現了PoS,系統中具有最高賭注而不是最高計算能力的節點被授予簿記權,并且該賭注由特定數量的貨幣的所有權表示,被稱為幣齡或幣日(Coin Days)。

· 2013年8月,比特股(BitShares)項目提出了一種新的共識算法,即委托權益證明(Delegated Proof of Stake,DPoS)共識算法。

· 2013年,斯坦福大學的迭戈·翁加羅(Diego Ongaro)和約翰·奧斯特豪特(John Ousterhout)提出了Raft共識算法。

4.智能合約——區塊鏈2.0時代

隨著區塊鏈技術與生態的發展,基于區塊鏈的DApp呈現井噴的趨勢,支撐DApp的底層技術是“區塊鏈+智能合約”。智能合約與區塊鏈的結合被普遍認為是區塊鏈世界中一次里程碑式的升級。第一個結合了區塊鏈與智能合約技術的平臺——以太坊的誕生,被認為開啟了區塊鏈2.0時代。

“代碼即法律”(Code is Law)這一概念并不是隨著智能合約的出現而首次產生的。它最早出現于20世紀90年代互聯網飛速發展時期。1994年,計算機科學家和密碼學家NickSzabo首次提出“智能合約”概念,早于區塊鏈概念的誕生。Nick Szabo提出智能合約是“以數字形式指定的一系列承諾,包括各方履行這些承諾的協議”,但由于缺乏能夠讓它發揮作用的區塊鏈,智能合約的想法一直未能實現。

當比特幣區塊鏈誕生后,比特幣智能合約主要以腳本方式支持復雜交易,如擔保交易、連帶合同、第三方仲裁、多方簽名等。然而比特幣開發者對腳本做了諸多限制,例如,腳本采用了堆棧的方式執行;腳本中沒有循環語句,不具備圖靈完備的特性。目前,通過升級腳本功能,如通過使用Simplicity語言,在構建比特幣智能合約方面,可以在保證安全性的同時實現比特幣腳本的靈活性。

與比特幣不同,以太坊中的智能合約是一段運行在區塊鏈上的代碼,該代碼定義了合約的內容,合約的賬戶中保存了當前合約的運行狀態。智能合約的設計語言Solidity是一種圖靈完備語言,這意味著智能合約中可以包括循環。然而,智能合約中包括循環帶來的問題是如何防止死循環。因此,在以太坊中執行智能合約需要支付一定的Gas。在EVM中執行智能合約時,EVM對執行指令進行了定價,每執行一條指令都需要消耗相應的Gas,不同的指令由于其執行的復雜程度不同,所以消耗的Gas會有所不同。

主站蜘蛛池模板: 博乐市| 西峡县| 达州市| 横山县| 大城县| 托里县| 云和县| 台江县| 镇沅| 乌兰浩特市| 玉屏| 铁岭县| 琼海市| 和平县| 长武县| 积石山| 高阳县| 吉安县| 江西省| 平湖市| 榕江县| 大姚县| 大方县| 珠海市| 兴山县| 侯马市| 二手房| 藁城市| 株洲市| 佛山市| 鄂温| 阆中市| 兴城市| 武宣县| 桦甸市| 泸定县| 上高县| 宣威市| 克什克腾旗| 民勤县| 永安市|