區(qū)塊鏈的基本架構(gòu)有哪些?一文讀懂區(qū)塊鏈的基本架構(gòu)
筆者記得當(dāng)比特幣開始受注目時(shí),經(jīng)??吹接性u論和報(bào)導(dǎo)將比特幣和區(qū)塊鏈混為一談。這一兩年隨著越來越多的區(qū)塊鏈項(xiàng)目的實(shí)施,特別是各式各樣區(qū)塊鏈平臺的出現(xiàn),今天我們反而要掌握的一個(gè)課題是,怎樣的架構(gòu)才算是一個(gè)區(qū)塊鏈?換句話說,一個(gè)區(qū)塊鏈應(yīng)該有哪些元素?
初接觸區(qū)塊鏈的朋友一般的學(xué)習(xí)方法都是先選擇某一個(gè)區(qū)塊鏈平臺,深入研究那個(gè)平臺的特性。筆者也是先由「比特幣」開始,再擴(kuò)展至其他平臺例如「以太坊」(Ethereum) 和Hyperledger Fabric(尚未見到有適合的中文譯名,以下會(huì)保留這個(gè)名稱)。而本文卻是筆者在接觸過不同的區(qū)塊鏈平臺后作的分析和總結(jié),希望為各位帶來另一種學(xué)習(xí)方式:先從總體認(rèn)識區(qū)塊鏈架構(gòu),之后當(dāng)各位在研習(xí)某一個(gè)區(qū)塊鏈平臺時(shí),可以比對這篇文章的介紹,從而較為系統(tǒng)性的掌握區(qū)塊鏈不同的部份。
以下我會(huì)介紹區(qū)塊鏈的三個(gè)要素:網(wǎng)絡(luò)、賬本和智能合約。
區(qū)塊鏈?zhǔn)怯晒?jié)點(diǎn)構(gòu)成的網(wǎng)絡(luò)
所謂網(wǎng)絡(luò),就是由多于一部機(jī)器連接而成,即我們所稱的節(jié)點(diǎn)(node),各個(gè)節(jié)點(diǎn)通常運(yùn)行同一組軟件,這些軟件已備有相互溝通的功能,即我們經(jīng)常說的P2P (Peer -to-Peer) 通訊模式,而非今天主流的客戶— 服務(wù)器(Client-Server) 模型。今天大部份區(qū)塊鏈平臺均以互聯(lián)網(wǎng)互相連結(jié),按需要節(jié)點(diǎn)之間的通訊可作加密處理。
在不同的區(qū)塊鏈上,節(jié)點(diǎn)可能帶有不同的功能。例如Hyperledger Fabric 上的Peer 節(jié)點(diǎn)負(fù)責(zé)管有賬本和執(zhí)行智能合約(稍后有更詳細(xì)介紹),但Orderer 節(jié)點(diǎn)則只負(fù)責(zé)將交易(Transactions) 排序和構(gòu)建新的區(qū)塊(Block);「以太坊」的節(jié)點(diǎn)可以只是單單管有賬本和執(zhí)行智能合約,同時(shí)有些節(jié)點(diǎn)也可選擇加入挖礦(Mining) 角色來構(gòu)建新的區(qū)塊等等。
按不同的實(shí)施模式,節(jié)點(diǎn)的數(shù)量有所不同。在公開使用的區(qū)塊鏈平臺如「比特幣」和「以太坊」,任何人在任何地方任何時(shí)間都可加入或離開網(wǎng)絡(luò),不需要一個(gè)中央組織去批準(zhǔn)。這種區(qū)塊鏈網(wǎng)絡(luò)我們稱為Permissionless Blockchain。因此節(jié)點(diǎn)的數(shù)目就經(jīng)常浮動(dòng)。在本文寫作時(shí)(2019年3月),比特幣有超過一萬個(gè)節(jié)點(diǎn),而「以太坊」則有八千六百多個(gè),分布在全球各大洲上。
取自網(wǎng)站https://bitnodes.earn.com/(2019年3月)
至于商用的區(qū)塊鏈平臺就不一樣。商用區(qū)塊鏈的節(jié)點(diǎn)通常只放在參與的機(jī)構(gòu)和監(jiān)管機(jī)構(gòu)內(nèi),而非任何未被批準(zhǔn)的機(jī)構(gòu)或個(gè)人可以參與。因此,節(jié)點(diǎn)的數(shù)量會(huì)和參與機(jī)構(gòu)數(shù)目有關(guān)。例如一個(gè)由七間銀行組成的「區(qū)塊鏈貿(mào)易融資平臺」,即使每間銀行有兩個(gè)節(jié)點(diǎn),總數(shù)不會(huì)超過二十個(gè)節(jié)點(diǎn)。
物理上這些節(jié)點(diǎn)構(gòu)成一個(gè)可靠穩(wěn)妥的架構(gòu)。理論上節(jié)點(diǎn)數(shù)目越多,分布越廣,網(wǎng)絡(luò)越堅(jiān)固,而受阻斷服務(wù)攻擊(DoS, Denial of Service) 的機(jī)會(huì)越少。這是因?yàn)槊總€(gè)節(jié)點(diǎn)擁有一份相同的數(shù)據(jù)結(jié)構(gòu),在區(qū)塊鏈我們稱之為「賬本」Ledger(或稱為賬簿)。
各節(jié)點(diǎn)共同擁有一個(gè)相同的賬本
這是區(qū)塊鏈一個(gè)非常重要的元素。技術(shù)上「賬本」是一個(gè)數(shù)據(jù)結(jié)構(gòu),之所以稱為賬本,主要是因?yàn)檫@個(gè)數(shù)據(jù)結(jié)構(gòu)用作保存一筆又一筆的交易紀(jì)錄,功能上就如一本賬本。而事實(shí)上,我們所討論的「區(qū)塊鏈」更準(zhǔn)確的說法是「分布式賬本技術(shù)」(Distributed Ledger Technology),而「區(qū)塊鏈」是「分布式賬本技術(shù)」實(shí)現(xiàn)的一種方法。為免把事情復(fù)雜化,我們還是沿用「區(qū)塊鏈」作討論。
所謂的「共同擁有」,并非一個(gè)「共同使用的物理或邏輯結(jié)構(gòu)」,就如我們說幾臺電腦共用一個(gè)儲(chǔ)存裝置(硬碟或檔案系統(tǒng))一樣。「區(qū)塊鏈」所說的「共同擁有」,是各節(jié)點(diǎn)各自管有這個(gè)數(shù)據(jù)架構(gòu)。節(jié)點(diǎn)之間的數(shù)據(jù)架構(gòu)互不從屬,沒有物理關(guān)系,但它們之間的內(nèi)容保持相同。
何以各節(jié)點(diǎn)管有自己的數(shù)據(jù)架構(gòu)而又內(nèi)容可保持相同?這就是區(qū)塊鏈其中一個(gè)令人著迷的地方。這個(gè)「數(shù)據(jù)同步」(容許我這樣說)的過程稱為達(dá)致「共識」Consensus。不同區(qū)塊鏈會(huì)基于不同原因使用不同的共識方法。如「比特幣」和「以太坊」這些公共區(qū)塊鏈需要使用Proof of Work這個(gè)方法生成新的區(qū)塊,而當(dāng)中亦涉及經(jīng)濟(jì)誘因(incentive),結(jié)果是成千上萬的節(jié)點(diǎn)向數(shù)據(jù)達(dá)致「同步」這個(gè)方向發(fā)展。又例如Hyperledger Fabric 是按已定下的政策由指定的Peer 節(jié)點(diǎn)處理交易,交給Orderer 節(jié)點(diǎn)排序,最后由每個(gè)Peer 節(jié)點(diǎn)確認(rèn)才記在賬本上,這也是一種使數(shù)據(jù)達(dá)一致的手段。
目前區(qū)塊鏈中「共識」這個(gè)題目還在發(fā)展中,不少人還在投入大量的研究,希望從各方面去改善達(dá)致共識的辦法。我們悉目以待。
此外,這個(gè)「數(shù)據(jù)架構(gòu)」是否就是我們沿用很久的「數(shù)據(jù)庫」(Database)?雖然兩者都是儲(chǔ)存數(shù)據(jù)的手段,但區(qū)塊鏈的數(shù)據(jù)架構(gòu)和一般的數(shù)據(jù)庫有著明顯的分別。區(qū)塊鏈的數(shù)據(jù)架構(gòu)通常包含兩個(gè)部分:交易記錄和整體狀態(tài)(World State)。前者比較易明,就是記錄每一筆的交易紀(jì)錄,而后者則是交易處理過后的狀態(tài)。
舉一個(gè)簡單例子,如果現(xiàn)在的狀態(tài)是「我有一百元,而你有二百元」,當(dāng)一筆交易「我給你五十元」處理后,狀態(tài)就變?yōu)椤肝矣形迨?,而你有二百五十元」。但常用的「?shù)據(jù)庫」就有較廣泛的用途而不單只是記錄交易和狀態(tài)。此外,區(qū)塊鏈的交易記錄只能疊加在現(xiàn)有的記錄之上,不能(或不易)刪除或更新一些已存在的交易記錄?!笖?shù)據(jù)庫」則彈性更大,一般可以增加、閱讀、更新和刪除(CRUD)。
這里我們終于觸及到「區(qū)塊鏈」這個(gè)名詞了。上述的交易記錄是以「區(qū)塊鏈」的模式存在。簡單地說,這些交易會(huì)放在一個(gè)區(qū)塊內(nèi),而區(qū)塊與區(qū)塊之間利用密碼學(xué)(Cryptography) 的技術(shù)連結(jié)起來成為一個(gè)鏈狀結(jié)構(gòu)。新來的交易會(huì)加入在新的區(qū)塊,而新的區(qū)塊就接在現(xiàn)存的鏈上,如此這條「區(qū)塊鏈」就隨時(shí)間增長。
區(qū)塊鏈的一個(gè)重要特性,就是數(shù)據(jù)寫上后不易被修改或刪除,而且修改的記錄很容易被其他節(jié)點(diǎn)發(fā)現(xiàn)而拒絕接受。這是因?yàn)閰^(qū)塊鏈的構(gòu)造透過密碼學(xué)和其鏈狀架構(gòu),以及達(dá)致共識的機(jī)制得出的果效。以剛才的例子,不論是要?jiǎng)h去「我給你五十元」這筆交易記錄,又或者將整體狀態(tài)中的「我有五十元」改為「我有五千元」,幾乎成為不可能的事。
至于誰來建立區(qū)塊和維持這條區(qū)塊鏈?不同的平臺有不同的做法?!副忍貛拧购汀敢蕴弧沟膮^(qū)塊鏈?zhǔn)怯伞覆傻V節(jié)點(diǎn)」(Mining Node or Miner) 透過競爭生成區(qū)塊,而管有區(qū)塊鏈的節(jié)點(diǎn)就按既定協(xié)議來維護(hù)節(jié)點(diǎn)上的區(qū)塊鏈。Hyperledger Fabric是由Orderer 節(jié)點(diǎn)生成區(qū)塊,而每個(gè)Peer 節(jié)點(diǎn)收到區(qū)塊后,再確認(rèn)當(dāng)中交易才放入Peer 節(jié)點(diǎn)上的區(qū)塊鏈。
最后,雖然稱為「賬本」,所有記錄并不限于和金錢或貨品交易。理論上任何資料也可以記在這個(gè)數(shù)據(jù)架構(gòu),而記在區(qū)塊鏈的資料都有著剛才所講的特性。如果有留意新聞,去年就有人將兩韓的「板門店宣言」寫在以太坊上。理論上只要以太坊一天還存在,這筆記錄都會(huì)永遠(yuǎn)留存。
可編程的智能合約
智能合約(Smart Contract) 并不是區(qū)塊鏈發(fā)明,然而,在區(qū)塊鏈架構(gòu)中智能合約扮演一個(gè)重要的角色。
智能合約是一些編碼(code) 或程式(program),透過編碼反映出各參與方的計(jì)劃和意愿。它之所稱為「合約」,是因?yàn)樵趨^(qū)塊鏈的應(yīng)用場景中,「智能合約」可視為交易雙方或多方共同接受的事項(xiàng),有如商業(yè)上的「合約」;它之所以是「智能」 ,是因?yàn)檫@個(gè)編碼落實(shí)在區(qū)塊鏈時(shí),節(jié)點(diǎn)會(huì)照編碼所定的步驟和邏輯(logic) 自動(dòng)執(zhí)行,最重要的還是執(zhí)行結(jié)果同步于整個(gè)區(qū)塊鏈網(wǎng)絡(luò)(即每一節(jié)點(diǎn))。
沿用上述的例子,「我給你五十元」可以是一個(gè)單一而明確的交易,但也可反映現(xiàn)實(shí)一個(gè)有條件性的合約,例如:「如果你明天把這份文件送到我的公司,我給你五十元」。這個(gè)「我給你五十元」交易會(huì)否出現(xiàn),要視乎這個(gè)條件有沒有發(fā)生。當(dāng)然,現(xiàn)實(shí)商業(yè)世界的合約條款要更復(fù)雜,但只要可以以編碼模式寫成智能合約,還是可以在區(qū)塊鏈的平臺執(zhí)行的。
智能合約的例子(取材自Hyperledger Composer)
技術(shù)上來說,智能合約可以更新賬本。這個(gè)更新涉及產(chǎn)生新的交易記錄,和修改整體狀態(tài)。因?yàn)檫@涉及更新區(qū)塊鏈中最重要的數(shù)據(jù)架構(gòu),智能合約必須要反映真實(shí)參與各方的意愿(大家都接受這些合約內(nèi)容和相關(guān)編碼),按照指定的檢定機(jī)制(例如合約的執(zhí)行要由哪些機(jī)構(gòu)確認(rèn))等,甚至引入第三方的監(jiān)察或?qū)徲?jì)等。
智能合約作為編碼,必然在某個(gè)地方執(zhí)行。在區(qū)塊鏈的平臺上,節(jié)點(diǎn)負(fù)責(zé)執(zhí)行智能合約,而且是由多個(gè)節(jié)點(diǎn)各自進(jìn)行。例如以太坊是每個(gè)節(jié)點(diǎn)都會(huì)執(zhí)行智能合約,由于是同一份合約編碼,如果大家都有著相同的賬本,執(zhí)行后的結(jié)果理論上應(yīng)該是相同,從而更新賬本。而Hyperledger Fabric 則按大家協(xié)定和需要指定一些節(jié)點(diǎn)Peer 負(fù)責(zé)執(zhí)行,得出的結(jié)果經(jīng)過Orderer 排序后以區(qū)塊模式發(fā)送給所有Peer 更新他們的賬本。(當(dāng)然,因?yàn)楦鞴?jié)點(diǎn)各自獨(dú)立執(zhí)行合約編碼,現(xiàn)實(shí)是有可能出現(xiàn)不一致的情況。各平臺在設(shè)計(jì)時(shí)已包括機(jī)制處理這些情況。)
智能合約的編寫會(huì)用上編碼語言。不同平臺有不同的語言,例如以太坊用的是Solidity,一種新的合約語言,而Hyperledger Fabric 使用多種,由最初的Go,發(fā)展到后來的Node 和Java。
結(jié)語
這篇文章主要以區(qū)塊鏈的一些共同特性而加以討論。日后當(dāng)大家深入研究某一區(qū)塊鏈平臺時(shí)可以找出這三個(gè)重要元素:網(wǎng)絡(luò)、賬本和智能合約的功能。
以上就是區(qū)塊鏈的基本架構(gòu)有哪些?一文讀懂區(qū)塊鏈的基本架構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于區(qū)塊鏈基本架構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!
你可能感興趣的文章
-
解析波卡平行鏈與以太坊2.0架構(gòu)設(shè)計(jì)有什么區(qū)別?
這篇文章主要介紹了解析波卡平行鏈與以太坊2.0架構(gòu)設(shè)計(jì)有什么區(qū)別?的相關(guān)資料,希望這篇關(guān)于波卡平行鏈與以太坊2.0架構(gòu)區(qū)別的文章,能夠讓更多的人深入的了解兩者的區(qū)別,…
2021-10-29 -
什么是SDN網(wǎng)絡(luò)?解讀SDN網(wǎng)絡(luò)技術(shù)架構(gòu)
這篇文章主要介紹了什么是SDN網(wǎng)絡(luò)?解讀SDN網(wǎng)絡(luò)技術(shù)架構(gòu)的相關(guān)資料,對此感興趣的朋友,趕快過來看看詳細(xì)內(nèi)容吧!…
2021-08-19 -
NFT項(xiàng)目Doodles2是什么?Doodles2將在哪個(gè)區(qū)塊鏈上運(yùn)行?
這篇文章主要介紹了NFT項(xiàng)目Doodles2是什么?Doodles2將在哪個(gè)區(qū)塊鏈上運(yùn)行?的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-02-10 -
區(qū)塊鏈的原理和特征介紹
區(qū)塊鏈(Blockchain)是一系列現(xiàn)有成熟技術(shù)的有機(jī)組合,它對賬本進(jìn)行分布式的有效記錄,并且提供完善的腳本以支持不同的業(yè)務(wù)邏輯…
2023-02-09 -
元宇宙概念是什么?元宇宙與區(qū)塊鏈的關(guān)系
這篇文章主要介紹了元宇宙概念是什么?元宇宙與區(qū)塊鏈的關(guān)系的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-02-08 -
一文讀懂區(qū)塊鏈和DLT有什么區(qū)別?
這篇文章主要介紹了一文讀懂區(qū)塊鏈和DLT有什么區(qū)別?的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-02-08 -
比特幣和以太坊為什么一起漲一起跌 比特幣和以太坊對比分析
這篇文章主要介紹了比特幣和以太坊為什么一起漲一起跌 比特幣和以太坊對比分析的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-02-03 -
區(qū)塊鏈一級市場和二級市場區(qū)別在哪?區(qū)塊鏈一級市場和二級市場對比
這篇文章主要介紹了區(qū)塊鏈一級市場和二級市場區(qū)別在哪?區(qū)塊鏈一級市場和二級市場對比的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-01-31 -
一文玩轉(zhuǎn)區(qū)塊鏈一級市場 區(qū)塊鏈一級市場注意事項(xiàng)
這篇文章主要介紹了一文玩轉(zhuǎn)區(qū)塊鏈一級市場 區(qū)塊鏈一級市場注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-01-31 -
什么是受監(jiān)管的區(qū)塊鏈?什么是不受監(jiān)管的區(qū)塊鏈?有什么區(qū)別
這篇文章主要介紹了什么是受監(jiān)管的區(qū)塊鏈?什么是不受監(jiān)管的區(qū)塊鏈?有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹…
2023-01-31