區(qū)塊鏈技術(shù)及應(yīng)用PPT完整全套教學(xué)課件_第1頁(yè)
區(qū)塊鏈技術(shù)及應(yīng)用PPT完整全套教學(xué)課件_第2頁(yè)
區(qū)塊鏈技術(shù)及應(yīng)用PPT完整全套教學(xué)課件_第3頁(yè)
區(qū)塊鏈技術(shù)及應(yīng)用PPT完整全套教學(xué)課件_第4頁(yè)
區(qū)塊鏈技術(shù)及應(yīng)用PPT完整全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩222頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章區(qū)塊鏈概述全套PPT課件目錄/CONTENTS1.1什么是區(qū)塊鏈1.2區(qū)塊鏈的發(fā)展1.3區(qū)塊鏈的分類1.4區(qū)塊鏈體系結(jié)構(gòu)1.5區(qū)塊鏈+應(yīng)用本章小結(jié)思考題1.1.1區(qū)塊鏈的定義區(qū)塊鏈包含兩個(gè)概念:分布式賬本和智能合約。區(qū)塊鏈的實(shí)質(zhì)是一個(gè)由多方參與、共同維護(hù)、持續(xù)增長(zhǎng)的分布式數(shù)據(jù)庫(kù),也被稱為分布式共享總賬。其特點(diǎn)是分布式網(wǎng)絡(luò)、可建立信任、公開(kāi)透明和不可篡改。如果把數(shù)據(jù)庫(kù)假設(shè)成一本賬本,讀寫(xiě)數(shù)據(jù)庫(kù)就是一種記賬行為。在一段時(shí)間內(nèi)找出系統(tǒng)中記賬最快、最好的人來(lái)記賬,然后將賬本的該頁(yè)信息發(fā)給系統(tǒng)里的其他人,相當(dāng)于改變數(shù)據(jù)庫(kù)所有的記錄,發(fā)給全網(wǎng)的每個(gè)節(jié)點(diǎn)。1.1.1區(qū)塊鏈的定義區(qū)塊鏈技術(shù)是利用塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來(lái)驗(yàn)證與存儲(chǔ)數(shù)據(jù),利用分布式節(jié)點(diǎn)共識(shí)算法來(lái)生成和更新數(shù)據(jù),利用密碼學(xué)的方式保證數(shù)據(jù)傳輸和訪問(wèn)的安全,利用由自動(dòng)化腳本代碼組成的智能合約來(lái)編程和操作數(shù)據(jù)的一種全新的分布式基礎(chǔ)架構(gòu)與計(jì)算范式,最終由信息互聯(lián)實(shí)現(xiàn)價(jià)值互聯(lián)。全網(wǎng)的每個(gè)節(jié)點(diǎn)。區(qū)塊鏈技術(shù)的優(yōu)勢(shì)主要體現(xiàn)在兩方面:一是其分布式的存儲(chǔ)架構(gòu),節(jié)點(diǎn)越多,數(shù)據(jù)存儲(chǔ)的安全性越高;二是其防篡改和去中心化的巧妙設(shè)計(jì),使得任何人都很難違背規(guī)則修改數(shù)據(jù)。區(qū)塊鏈分布式架構(gòu)模式數(shù)據(jù)結(jié)構(gòu)鏈?zhǔn)浇Y(jié)構(gòu)分布式數(shù)據(jù)存儲(chǔ)1.1.2區(qū)塊鏈的特點(diǎn)分布式網(wǎng)絡(luò)區(qū)塊鏈以分布式網(wǎng)絡(luò)為基礎(chǔ)構(gòu)建,數(shù)據(jù)庫(kù)賬本分散在網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)都有一個(gè)該賬本的副本,所有副本同步更新??山⑿湃喂_(kāi)透明除了對(duì)交易各方的私有信息進(jìn)行加密外,區(qū)塊鏈數(shù)據(jù)對(duì)所有人公開(kāi)透明,所有用戶看到的是同一個(gè)賬本,所有用戶都能看到這一賬本記錄的每一筆交易,任何人都能通過(guò)公開(kāi)的接口,對(duì)區(qū)塊鏈數(shù)據(jù)進(jìn)行查詢,并能開(kāi)發(fā)相關(guān)應(yīng)用。不可篡改所謂不可篡改,即信息一旦經(jīng)過(guò)驗(yàn)證并添加到區(qū)塊鏈,就會(huì)被永久地存儲(chǔ)起來(lái)。1.1.3區(qū)塊鏈與大數(shù)據(jù)、云計(jì)算的關(guān)系1.區(qū)塊鏈和大數(shù)據(jù)的關(guān)系(1)數(shù)據(jù)安全。(2)數(shù)據(jù)開(kāi)放共享。(3)數(shù)據(jù)存儲(chǔ)。(4)數(shù)據(jù)分析。(5)數(shù)據(jù)流通。2.區(qū)塊鏈和云計(jì)算的關(guān)系從存儲(chǔ)的角度來(lái)看,云計(jì)算中的存儲(chǔ)和區(qū)塊鏈中的存儲(chǔ)都是由普通存儲(chǔ)介質(zhì)組成的;從安全性的角度來(lái)看,云計(jì)算的安全性主要是為了保證應(yīng)用程序能夠安全、穩(wěn)定、可靠地運(yùn)行,這種安全屬于傳統(tǒng)安全的范疇。區(qū)塊鏈數(shù)據(jù)開(kāi)放共享數(shù)據(jù)安全數(shù)據(jù)分析數(shù)據(jù)存儲(chǔ)數(shù)據(jù)流通1.1.4區(qū)塊鏈的局限性1.運(yùn)行安全風(fēng)險(xiǎn)區(qū)塊鏈把密碼學(xué)、分布式存儲(chǔ)等技術(shù)融為一體,但這并不意味著它本身是沒(méi)有漏洞的。2.系統(tǒng)效率及可擴(kuò)展性問(wèn)題區(qū)塊鏈?zhǔn)褂枚喙?jié)點(diǎn)冗余方式保證數(shù)據(jù)存儲(chǔ)的去中心化,這意味著對(duì)存儲(chǔ)空間的極大浪費(fèi),且對(duì)整個(gè)鏈內(nèi)大多數(shù)節(jié)點(diǎn)做一次更新非常耗時(shí);區(qū)塊鏈網(wǎng)絡(luò)的價(jià)值正比于其節(jié)點(diǎn)規(guī)模,價(jià)值越高的網(wǎng)絡(luò)越浪費(fèi)、效率越低。3.隱私泄露風(fēng)險(xiǎn)隨著區(qū)塊鏈技術(shù)在各個(gè)領(lǐng)域的廣泛應(yīng)用,區(qū)塊鏈面臨著嚴(yán)重的數(shù)據(jù)隱私泄露風(fēng)險(xiǎn)。用戶使用區(qū)塊鏈過(guò)程中,個(gè)人基本身份信息數(shù)據(jù)和交易信息數(shù)據(jù)極易被泄露。攻擊者通過(guò)地址聚類等技術(shù)來(lái)判別多個(gè)賬戶是否屬于同一用戶,挖掘用戶真實(shí)信息,導(dǎo)致用戶的數(shù)據(jù)隱私泄露。簡(jiǎn)言之,用戶的身份信息與交易信息易被攻擊者獲取。1.2區(qū)塊鏈的發(fā)展1.2.1區(qū)塊鏈的發(fā)展歷程區(qū)塊鏈技術(shù)早期的主要階段:1.2區(qū)塊鏈的發(fā)展1.2.1區(qū)塊鏈的發(fā)展歷程B-T幣早期發(fā)展的重要事件如圖:1.2區(qū)塊鏈的發(fā)展1.2.1區(qū)塊鏈的發(fā)展歷程B-T幣近年來(lái)的重要事件:1.2區(qū)塊鏈的發(fā)展1.2.2區(qū)塊鏈發(fā)展的三個(gè)階段1.區(qū)塊鏈1.0:B-T幣得到廣泛應(yīng)用2.區(qū)塊鏈2.0:數(shù)字貨幣與智能合約結(jié)合3.區(qū)塊鏈3.0:泛行業(yè)去中心化應(yīng)用(1)推動(dòng)新一代信息技術(shù)產(chǎn)業(yè)的發(fā)展。(2)為經(jīng)濟(jì)社會(huì)轉(zhuǎn)型升級(jí)提供技術(shù)支撐。(3)培育新的創(chuàng)業(yè)創(chuàng)新機(jī)會(huì)。(4)為社會(huì)管理和治理水平的提升提供技術(shù)手段。1.3區(qū)塊鏈的分類1.3.1公有鏈1.3.2聯(lián)盟鏈1.3.3私有鏈1.3.4側(cè)鏈核心觀點(diǎn)是“B-T幣”的區(qū)塊鏈在概念上獨(dú)立于作為資產(chǎn)的B-T幣。1.3.5互聯(lián)鏈針對(duì)特定領(lǐng)域的應(yīng)用可以在各自的垂直領(lǐng)域形成區(qū)塊鏈。這些區(qū)塊鏈將有互聯(lián)需求,因此這些區(qū)塊鏈也將通過(guò)某種互聯(lián)互通協(xié)議進(jìn)行連接。就像互聯(lián)網(wǎng)一樣,區(qū)塊鏈上的這種互聯(lián)構(gòu)成了一個(gè)互聯(lián)鏈,形成了一個(gè)全球性的區(qū)塊鏈網(wǎng)絡(luò)。公有鏈區(qū)塊鏈私有鏈聯(lián)盟鏈許可鏈非許可鏈1.4區(qū)塊鏈體系結(jié)構(gòu)1.?dāng)?shù)據(jù)與網(wǎng)絡(luò)組織協(xié)議層該層為區(qū)塊鏈網(wǎng)絡(luò)中各種獨(dú)立并維持高安全性的節(jié)點(diǎn)提供了多種加密功能。2.分布式共識(shí)協(xié)議層分布式共識(shí)協(xié)議層為維護(hù)區(qū)塊鏈網(wǎng)絡(luò)中數(shù)據(jù)的排序與其本身的一致性和原創(chuàng)性提供了核心功能。3.智能合約層4.人機(jī)交互層區(qū)塊鏈網(wǎng)絡(luò)因其獨(dú)特的框架和技術(shù)體系,適合作為自組織系統(tǒng)的底層支撐,用于管理分布式網(wǎng)絡(luò)節(jié)點(diǎn)之間數(shù)據(jù)或交易驅(qū)動(dòng)的交互行為。1.5區(qū)塊鏈+應(yīng)用金融政府醫(yī)療物聯(lián)網(wǎng)農(nóng)業(yè)能源人工智能大數(shù)據(jù)云計(jì)算深度學(xué)習(xí)區(qū)塊鏈本章小結(jié)本章的目的是讓讀者對(duì)區(qū)塊鏈有一個(gè)初步的了解。首先介紹了區(qū)塊鏈的定義、特點(diǎn),以及區(qū)塊鏈與大數(shù)據(jù)和云計(jì)算的關(guān)系,還有它的局限性,然后介紹了區(qū)塊鏈的發(fā)展歷程和幾個(gè)階段,接著介紹了區(qū)塊鏈的分類和區(qū)塊鏈的體系結(jié)構(gòu)。后文將在此基礎(chǔ)上更詳細(xì)地闡述區(qū)塊鏈的各種技術(shù)原理,并對(duì)區(qū)塊鏈進(jìn)行更深入的探索。本章介紹了目前國(guó)內(nèi)外提出的各種“區(qū)塊鏈+行業(yè)”的落地應(yīng)用,如區(qū)塊鏈+金融、區(qū)塊鏈+政府、區(qū)塊鏈+醫(yī)療、區(qū)塊鏈+物聯(lián)網(wǎng)、區(qū)塊鏈+農(nóng)業(yè)、區(qū)塊鏈+能源;也介紹了一些“區(qū)塊鏈+新技術(shù)”的設(shè)計(jì)實(shí)現(xiàn)原理和應(yīng)用案例,如區(qū)塊鏈+人工智能、區(qū)塊鏈+大數(shù)據(jù)、區(qū)塊鏈+云計(jì)算、區(qū)塊鏈+深度學(xué)習(xí)。綜上,我們不難看出,區(qū)塊鏈技術(shù)幾乎可以滲透生活的每一個(gè)角落。也許20年、10年,甚至5年、1年后,區(qū)塊鏈會(huì)以光速融入人們的生活。也許你也不知道具體哪里運(yùn)用了區(qū)塊鏈技術(shù),但它已無(wú)處不在,與你的生活融為一體。謝謝!第二章區(qū)塊鏈開(kāi)發(fā)基礎(chǔ)目錄/CONTENTS2.1Python的特點(diǎn)和應(yīng)用領(lǐng)域2.2模塊2.3基于Tkinter的圖形開(kāi)發(fā)界面2.4Web開(kāi)發(fā)本章小結(jié)2.1Python的特點(diǎn)和應(yīng)用領(lǐng)域Python是一種簡(jiǎn)單的、面向?qū)ο蟮摹⒔换ナ降?、解釋型的、可移植的高?jí)語(yǔ)言。Python具有語(yǔ)法清晰、簡(jiǎn)單易用、功能強(qiáng)大、可移植性強(qiáng)、通用性好的特點(diǎn),適用于Linux、MS-DOS、MacOS、Windows等多種操作系統(tǒng)。Python是一種設(shè)計(jì)良好的編程語(yǔ)言,可以應(yīng)用于各個(gè)領(lǐng)域。事實(shí)上,作為一種通用語(yǔ)言,Python的作用幾乎是無(wú)限的。從網(wǎng)站和游戲開(kāi)發(fā)到機(jī)器人和航天飛機(jī)控制,你可以在任何場(chǎng)合使用Python。Python……數(shù)學(xué)處理文本處理Web編程多媒體應(yīng)用Pymo引擎黑客編程圖形處理2.2.1模塊的使用和安裝自包含的、有組織的代碼段就是模塊。Python允許“調(diào)用”模塊,允許使用其他模塊的屬性結(jié)合以前的工作成果實(shí)現(xiàn)代碼重用。安裝模塊:①官網(wǎng)下載安裝;②命令行安裝(推薦)命令行口令(假設(shè)安裝hashlib模塊):pipinstallhashlib

使用pip安裝口令的前提是安裝了pip。安裝模塊后就是導(dǎo)入模塊,我們使用import語(yǔ)句進(jìn)行導(dǎo)入。

命令行口令(假設(shè)導(dǎo)入hashlib模塊):import

hashlib

注意:該過(guò)程遵循作用域原則:如果在一個(gè)模塊的頂層導(dǎo)入,那么它的作用域是全局的;如果在函數(shù)中導(dǎo)入,那么它的作用域是局部的。2.2.2基本模塊hashlib:Python的hashlib模塊提供了常見(jiàn)的摘要算法,如MD5、SHA-1、SHA-256等。尤其SHA-256算法,它是區(qū)塊鏈安全的基石。簡(jiǎn)單來(lái)說(shuō),SHA-256算法就是把一串明文通過(guò)hashlib模塊提供的某個(gè)算法轉(zhuǎn)換為一個(gè)固定長(zhǎng)度的字符串。datetime:在區(qū)塊鏈中,為了進(jìn)一步提高安全性,避免彩虹表攻擊,在對(duì)明文進(jìn)行哈希處理的時(shí)候我們往往還會(huì)加上時(shí)間戳,即獲得系統(tǒng)時(shí)間,拼接原文再生成一個(gè)哈希值。datetime是Python處理日期和時(shí)間的標(biāo)準(zhǔn)庫(kù)。

可以使用如下代碼獲取當(dāng)前日期與時(shí)間。

>>>importdatetimeastime>>>now=time.datetime.now()>>>print(now)2019-06-2111:00:20.5009192.2.2基本模塊struct:由于Python沒(méi)有專門處理字節(jié)的數(shù)據(jù)類型,因此需要Struct模塊在Python值和表示為Pythonbytes對(duì)象的緩沖區(qū)結(jié)構(gòu)體之間進(jìn)行轉(zhuǎn)換。Struct模塊可用于處理存儲(chǔ)在文件中或者來(lái)自網(wǎng)絡(luò)的鏈接,以及其他來(lái)源的二進(jìn)制數(shù)據(jù)。序號(hào)異常和函數(shù)含義1異常struct.error在各種場(chǎng)合拋出異常,參數(shù)是描述錯(cuò)誤的字符串。2struct.pack(fmt,v1,v2,…)根據(jù)格式化字符串fmt封裝,返回一個(gè)包括v1、v2等值的字節(jié)對(duì)象,參數(shù)必須與格式化所需的值完全匹配。3struct.pack_into(fmt,buffer,offset,v1,v2,…)根據(jù)格式化字符串fmt,封裝v1、v2等值,并從位置offset開(kāi)始,將封裝后的字節(jié)寫(xiě)入可寫(xiě)緩沖區(qū)buffer中。注意,offset是必需的參數(shù)。4struct.unpack(fmt,buffer)根據(jù)格式化字符串fmt,從緩沖區(qū)buffer中解包。即使結(jié)果只包含一項(xiàng),也是一個(gè)元組。緩沖區(qū)的大小必須與格式所需的大小匹配,如calcsize()所得的結(jié)果。5struct.unpack_from(fmt,buffer,offset=0)根據(jù)格式化字符串fmt,從位置offset開(kāi)始解包。即使結(jié)果只包含一項(xiàng),也是一個(gè)元組。緩沖區(qū)的大小減去offset,至少是格式化所需的大小,如calcsize()所得的結(jié)果。6er_unpack(fmt,buffer)根據(jù)格式化字符串fmt,從緩沖區(qū)buffer中迭代解包,該函數(shù)返回一個(gè)iterator,它從緩沖區(qū)中讀取大小相等的塊,直到所有的內(nèi)容被耗盡。緩沖區(qū)的大小必須是格式化所需大小的倍數(shù),如calcsize()所得的結(jié)果。7struct.calcsize(fmt)返回對(duì)應(yīng)格式化字符串fmt的結(jié)構(gòu)體的大小。表2-1struct模塊定義的異常和函數(shù)2.2.2基本模塊urllib:urllib是Python內(nèi)置的HTTP請(qǐng)求庫(kù),無(wú)須安裝即可使用,它包含了4個(gè)模塊.

request:它是最基本的HTTP請(qǐng)求模塊,用來(lái)模擬發(fā)送請(qǐng)求;error:異常處理模塊,如果出現(xiàn)錯(cuò)誤可以捕獲這些異常;

parse:一個(gè)工具模塊,提供了許多URL處理方法,如拆分、解析、合并等;rebotparser:主要用來(lái)識(shí)別網(wǎng)站的robots.txt文件.urlliburllib.requesturllib.parseurllib.rebotparserurllib.error2.3基于Tkinter的圖形開(kāi)發(fā)界面

Tkinter是Python的默認(rèn)GUI庫(kù),它基于Tk工具集。Tk最初是為工具命令語(yǔ)言設(shè)計(jì)的。Tkinter流行后被移植到許多其他腳本語(yǔ)言中,包括Perl、Ruby和Python。利用Tkinter開(kāi)發(fā)GUI具有靈活性和可移植性,配合簡(jiǎn)潔的腳本語(yǔ)言和強(qiáng)勁的系統(tǒng)語(yǔ)言,可以快速開(kāi)發(fā)GUI程序。序號(hào)組件名稱組件中文名含義1Button按鈕類似于標(biāo)簽,但提供額外功能,例如鼠標(biāo)指針掠過(guò)、按下鼠標(biāo)、松開(kāi)鼠標(biāo)以及鍵盤操作2Canvas畫(huà)布提供繪圖功能,包括繪制直線、橢圓、多邊形、矩形等,可以包含圖形或位圖3Cheakbutton選擇按鈕一組方框,可以選擇其中任意多個(gè)4Entry文本框單行文字域,用來(lái)收集鍵盤輸入5Frame框架包含其他組件的純?nèi)萜?Lable標(biāo)簽用來(lái)顯示文字或者圖片7Listbox列表框一個(gè)選項(xiàng)列表,用戶可以從中選擇8Menu菜單按下菜單按鈕后彈出一個(gè)選項(xiàng)列表,用戶可以從中選擇9Menubutton菜單按鈕用來(lái)包含菜單的組件10Message消息框類似于標(biāo)簽,但可以顯示多行文本11Radiobutton單選按鈕一組按鈕,其中只有一個(gè)可被按下12Scale進(jìn)度條線性“滑塊”組件,可設(shè)定起始值和結(jié)束值,會(huì)顯示當(dāng)前位置的精確值13Scrollbar滾動(dòng)條對(duì)其支持的組件提供滾動(dòng)功能14Text文本域多行文字區(qū)域,可用來(lái)收集或顯示用戶輸入的文字15Toplevel頂級(jí)類似于框架,但提供一個(gè)獨(dú)立的窗口容器表2-2Tkinter的組件2.3基于Tkinter的圖形開(kāi)發(fā)界面創(chuàng)建和執(zhí)行GUI程序,需要如下5個(gè)基本步驟。

(1)導(dǎo)入Tkinter模塊(importTkinter)。

(2)創(chuàng)建一個(gè)頂層窗口對(duì)象,來(lái)容納整個(gè)GUI程序。

(3)在頂層窗口對(duì)象上創(chuàng)建所有的GUI模塊。

(4)把這些GUI模塊與底層代碼相連接。

(5)執(zhí)行事件循環(huán)。創(chuàng)建一個(gè)簡(jiǎn)單的GUI程序:importtkintertop=tkinter.TK()top.mainloop()

執(zhí)行結(jié)果為一個(gè)簡(jiǎn)單的空白窗口。2.4.1HTTPS簡(jiǎn)介HTTPS(HyperTextTransferProtocoloverSecureSocketLayer,超文本傳輸協(xié)議安全套接字層)簡(jiǎn)單來(lái)說(shuō)就是加密數(shù)據(jù)傳輸,通俗地說(shuō)就是安全連接。它使用安全套接字層(SecureSocketsLayer,SSL)進(jìn)行信息交換,是HTTP的安全版,基于HTTP開(kāi)發(fā),是一個(gè)抽象標(biāo)識(shí)符體系(URIScheme),句法同http:體系,用于在服務(wù)器和客戶機(jī)之間安全交換信息和數(shù)據(jù)。它是一個(gè)安全通信通道,具有數(shù)據(jù)完整性好、數(shù)據(jù)隱私性好和可實(shí)現(xiàn)身份認(rèn)證三點(diǎn)優(yōu)勢(shì)。HTTPTCPIPHTTPSSSL/TLSTCPIP2.4.2Web框架在實(shí)際開(kāi)發(fā)中,底層代碼由專門的服務(wù)器軟件來(lái)實(shí)現(xiàn),我們用Python專注于生成HTML文本。因?yàn)槲覀儾幌M佑|到TCP連接、HTTP原始請(qǐng)求和響應(yīng)格式,所以需要一個(gè)統(tǒng)一的接口(WSGI),讓我們專心用Python編寫(xiě)Web業(yè)務(wù)。WSGI雖然比HTTP接口高級(jí),但和WebAPP的邏輯相比,還是比較低級(jí)的,我們需要在WSGI上繼續(xù)抽象,至于URL到函數(shù)的映射,就交給Web框架來(lái)完成。序號(hào)Web框架含義1Django全能型Web框架2Web.py一個(gè)小巧的Web框架3Bottle和Flask類似的Web框架4TomadoFacebook的開(kāi)源異步Web框架5Flask一個(gè)使用Python編寫(xiě)的輕量級(jí)Web應(yīng)用框架表2-3常見(jiàn)的Python的Web框架本章小結(jié)本章向讀者著重介紹了Python的特點(diǎn)、應(yīng)用領(lǐng)域、模塊、圖形界面的開(kāi)發(fā)和Web開(kāi)發(fā)。由于本書(shū)篇幅有限,還需要讀者自行參考相關(guān)書(shū)籍學(xué)習(xí)Python編程語(yǔ)法等基礎(chǔ)知識(shí),為后面區(qū)塊鏈編程打下基礎(chǔ),為后期區(qū)塊鏈的開(kāi)發(fā)做好準(zhǔn)備工作。在接下來(lái)的內(nèi)容中,將會(huì)有大量的基于Python編程的實(shí)戰(zhàn),如私有鏈的開(kāi)發(fā)、公有鏈的開(kāi)發(fā)以及最后的完整項(xiàng)目實(shí)戰(zhàn)。謝謝!第三章區(qū)塊鏈開(kāi)發(fā)基礎(chǔ)目錄/CONTENTS3.1區(qū)塊鏈加密技術(shù)3.2區(qū)塊鏈核心問(wèn)題3.3區(qū)塊鏈共識(shí)機(jī)制3.4編程案例本章小結(jié)3.1.1安全哈希函數(shù)哈希(Hash)函數(shù)是非常基礎(chǔ)同時(shí)又相當(dāng)重要的一種數(shù)學(xué)函數(shù)。通俗來(lái)說(shuō),它能將一段數(shù)據(jù)(任意長(zhǎng)度)經(jīng)過(guò)計(jì)算,映射為一段較短的定長(zhǎng)的數(shù)據(jù)(就是哈希值,同時(shí)也被稱為指紋或摘要)。總結(jié)來(lái)說(shuō),它具有以下3個(gè)特征。(1)其輸入可以是任意長(zhǎng)度數(shù)據(jù)。(2)其輸出是固定長(zhǎng)度的數(shù)據(jù)。(3)其能進(jìn)行有效計(jì)算,簡(jiǎn)單來(lái)說(shuō)就是對(duì)于任意輸入,在合理的時(shí)間范圍內(nèi)我們總能得到哈希函數(shù)的輸出。Hash函數(shù)目標(biāo)文本輸出文本3.1.1安全哈希函數(shù)在基本哈希函數(shù)的基礎(chǔ)上,加密哈希函數(shù)還應(yīng)該具備抗碰撞性和不可逆性兩個(gè)特性,具備這兩個(gè)特性的哈希函數(shù)在文件的完整性驗(yàn)證、用戶密碼的保存以及數(shù)字簽名等實(shí)際場(chǎng)景中有極大的應(yīng)用。

(1)抗碰撞性:找一個(gè)y,使得y的哈希值等于x的哈希值,這幾乎是不可能的,用數(shù)學(xué)表達(dá)式可以表示為:對(duì)于x,y(x≠y),H(x)≠H(y),則稱哈希函數(shù)H()具有抗碰撞性。

注意:哈希函數(shù)具有抗碰撞性是說(shuō)不會(huì)發(fā)生碰撞的概率很大,并不表示不存在碰撞。

(2)不可逆性:即我們幾乎無(wú)法通過(guò)哈希運(yùn)算的結(jié)果推導(dǎo)出原文??箯?qiáng)碰撞攻擊抗弱碰撞攻擊抗源像攻擊圖3.1Hash函數(shù)安全特性之間的聯(lián)系3.1.1安全哈希函數(shù)安全哈希算法:目前常見(jiàn)的哈希算法包括MD5和SHA系列算法。MD5算法即MD5消息摘要算法,屬哈希算法一類。MD5算法運(yùn)行任意長(zhǎng)度的輸入消息,產(chǎn)生一個(gè)128位的消息摘要。圖3.2MD5算法的整體流程圖消息100…00填充(0-511bit)Lbit

N*512bit512bit512bit

512bit

初始序列128bit第一個(gè)分塊得出的128bit值第N-1個(gè)128bit值最終結(jié)果散列值3.1.1安全哈希函數(shù)SHA-256算法:SHA-256算法輸入報(bào)文的最大長(zhǎng)度不超過(guò)2256位,輸入按512位分組進(jìn)行處理,產(chǎn)生的輸出是一個(gè)256位的報(bào)文摘要。圖3.3SHA-256算法核心過(guò)程該算法使用了6種基本邏輯函數(shù):3.1.2加解密技術(shù)加解密技術(shù)是密碼學(xué)的核心技術(shù)之一,現(xiàn)代加密算法的典型組件包括加解密算法、私鑰和公鑰。在加密過(guò)程中,需要通過(guò)相應(yīng)的加密算法和雙方的公鑰對(duì)明文進(jìn)行加密(變換)獲得密文;在解密過(guò)程中,需要通過(guò)相應(yīng)的解密算法和私鑰對(duì)密文進(jìn)行解密(變換)還原明文。圖3-4加解密基本過(guò)程3.1.2加解密技術(shù)根據(jù)公鑰和私鑰是否相同,加解密算法可以分為對(duì)稱加密算法和非對(duì)稱加密算法兩種基本類型。兩種加密算法適用于不同場(chǎng)景的需求,恰好可以互補(bǔ),很多時(shí)候兩者也可以組合形成混合加密算法。算法類型代表算法特點(diǎn)優(yōu)勢(shì)劣勢(shì)對(duì)稱加密

算法DES、IDEA、3DES、AES加解密密鑰相同空間占用小,計(jì)算效率高,加密強(qiáng)度大共享公鑰,易泄密非對(duì)稱加密

算法RSA、ElGamal、橢圓曲線系列算法加解密密鑰不相同安全度高,無(wú)須提前共享密鑰計(jì)算效率低,存在中間人攻擊圖3-1加解密算法類型3.1.2加解密技術(shù)對(duì)稱加密算法是用相同的密鑰對(duì)原文進(jìn)行加密和解密,它的過(guò)程可以用下面兩個(gè)公式來(lái)表示。

(1)加密過(guò)程:密鑰+原文=密文。

(2)解密過(guò)程:密文-密鑰=原文。圖3-5對(duì)稱加密算法的加解密過(guò)程對(duì)稱加密算法從實(shí)現(xiàn)原理上可以分為兩種:

分組對(duì)稱加密:將明文切分為定長(zhǎng)數(shù)據(jù)塊作為基

本加密單位,應(yīng)用廣泛。

序列對(duì)稱加密:每次只對(duì)一個(gè)字節(jié)或字符進(jìn)行加

密處理,且密碼不斷變化。3.1.2加解密技術(shù)非對(duì)稱加密算法中加密密鑰和解密密鑰是不同的,分別稱為公鑰和私鑰。私鑰一般需要通過(guò)隨機(jī)算法生成,公鑰可以根據(jù)私鑰生成,而公鑰是一定不能推導(dǎo)出私鑰的。公鑰一般是公開(kāi)的,可以被他人獲取。而私鑰一般是個(gè)人持有的,不能被他人獲取。圖3-6非對(duì)稱加密算法的加解密過(guò)程3.1.2加解密技術(shù)橢圓曲線加密算法是基于橢圓曲線點(diǎn)群離散對(duì)數(shù)問(wèn)題構(gòu)成的公鑰密碼系統(tǒng),在有限域上做加解密計(jì)算。與RSA和DSA加密算法相比,它在抵抗外界攻擊方面明顯具有更強(qiáng)的安全性能,并且具有較為輕巧的密鑰尺寸,是非常適用于區(qū)塊鏈加密的一種算法。

圖3-7橢圓曲線3.1.2加解密技術(shù)橢圓曲線上的基本運(yùn)算還包括點(diǎn)加運(yùn)算和倍點(diǎn)運(yùn)算。橢圓曲線上其他的點(diǎn)運(yùn)算都可以通過(guò)調(diào)用點(diǎn)加運(yùn)算和倍點(diǎn)運(yùn)算來(lái)實(shí)現(xiàn)。點(diǎn)加運(yùn)算:假定P(x1,

-y1)和Q(x2,

y2)為橢圓曲線上的兩點(diǎn),計(jì)算R(x3,

y3)=P+Q。依據(jù)橢圓曲線的“弦和切線”法則,連接P和Q作一條直線,交于橢圓曲線上的第三點(diǎn)R′,則R′關(guān)于x軸對(duì)稱的點(diǎn)R即為所求點(diǎn)。

代數(shù)運(yùn)算表達(dá)式如下:圖3-8點(diǎn)加運(yùn)算3.1.2加解密技術(shù)倍點(diǎn)運(yùn)算:假定P(x1,

y1)為橢圓曲線上的一點(diǎn),倍點(diǎn)運(yùn)算即求R(x3,

y3)=2P。倍點(diǎn)運(yùn)算可以看成點(diǎn)加運(yùn)算中Q=P的特例,當(dāng)Q無(wú)限靠近P時(shí),P和Q所連直線即為橢圓曲線在P處的切線。根據(jù)“弦和切線”法則,

作P點(diǎn)的切線交橢圓曲線于R′,則R′關(guān)于x軸對(duì)稱的點(diǎn)R即為所求點(diǎn)。

代數(shù)運(yùn)算表達(dá)式如下:圖3-9倍點(diǎn)運(yùn)算3.1.2加解密技術(shù)橢圓曲線標(biāo)量乘運(yùn)算:橢圓曲線上的標(biāo)量乘運(yùn)算定義為Q=kP,其中P為定義在有限域Fq內(nèi)的橢圓曲線上的一點(diǎn)。該步驟為完成由私鑰求取公鑰的過(guò)程,又稱點(diǎn)乘運(yùn)算。目前學(xué)者們廣泛認(rèn)為標(biāo)量乘的運(yùn)算效率決定著整個(gè)橢圓曲線密碼系統(tǒng)的效率。通常,對(duì)二進(jìn)制下的標(biāo)量乘運(yùn)算而言,其計(jì)算一般通過(guò)調(diào)用點(diǎn)加運(yùn)算和倍點(diǎn)運(yùn)算來(lái)實(shí)現(xiàn)。圖3-10標(biāo)量乘運(yùn)算的基本層次3.1.2加解密技術(shù)橢圓曲線加密步驟:圖3-11橢圓曲線加密算法的加解密步驟通常公鑰加密系統(tǒng)有兩個(gè)密鑰,橢圓曲線加密算法同樣也有兩個(gè):公鑰Q與私鑰k。在執(zhí)行加密操作時(shí),要將明文信息嵌入曲線內(nèi)的點(diǎn);在執(zhí)行解密操作時(shí),需要將其相應(yīng)的點(diǎn)解碼還原成對(duì)應(yīng)的明文信息。通常在加密過(guò)程中使用一種密鑰進(jìn)行加密,在解密過(guò)程中使用另一種密鑰進(jìn)行解密。3.1.2加解密技術(shù)示例:假設(shè)有兩個(gè)用戶:用戶A與用戶B,用戶B發(fā)送文件M給用戶A,則使用橢圓曲線加密算法傳輸文件M的過(guò)程如下:用戶A自行選取一條橢圓曲線E,之后在其上選定一點(diǎn)作為基點(diǎn)P,同時(shí)確定一個(gè)私鑰k,最后產(chǎn)生對(duì)應(yīng)公鑰:Q

=

kP;用戶A將橢圓曲線E、基點(diǎn)P與公鑰Q傳送給用戶B;用戶B接收到信息后,產(chǎn)生一個(gè)隨機(jī)整數(shù)x(x

<

n,n為基點(diǎn)P的階數(shù)),x即為用戶B的私鑰,同時(shí)將明文M編碼到用戶A自行選取橢圓曲線E上的點(diǎn)Pm,用戶B進(jìn)行下列計(jì)算:C1=Pm+xQ,C2=xP,得到相應(yīng)的密文:C=(C1,C2),或者:C3=PmC4,C4=xQ,得到相應(yīng)的密文:C=(C3,C4)。用戶B將密文C傳給用戶A,用戶A接收到密文C,使用私鑰k解密密文:

或者:

同時(shí)將橢圓曲線E上的點(diǎn)Pm解碼為明文M即可。3.1.2加解密技術(shù)基于橢圓曲線加密算法的同態(tài)加密方法構(gòu)造:設(shè)E(K,

x)表示用加密算法E和密鑰K對(duì)x進(jìn)行加密,F(xiàn)表示一種運(yùn)算。如果對(duì)于加密算法E和運(yùn)算F,存在有效算法G使得:

就稱加密運(yùn)算E對(duì)于運(yùn)算F具有同態(tài)性。設(shè)加密函數(shù)為Ek,解密函數(shù)為Dk,明文數(shù)據(jù)為

則加法同態(tài)與乘法同態(tài)可分別表示為:3.1.2加解密技術(shù)混合加密算法:混合加密算法同時(shí)結(jié)合了對(duì)稱加密算法和非對(duì)稱加密算法的優(yōu)點(diǎn)。混合加密算法是先用計(jì)算復(fù)雜度高的非對(duì)稱加密協(xié)商一個(gè)臨時(shí)的對(duì)稱加密密鑰,然后雙方通過(guò)對(duì)稱加密對(duì)傳遞的大量數(shù)據(jù)進(jìn)行加解密處理?;旌霞用芩惴ǖ某R?jiàn)實(shí)例就是使用普遍的Web通信協(xié)議——HTTPS。明文m

加密加密

解密解密圖3-12分組混合加密法示例3.1.3時(shí)間戳技術(shù)時(shí)間戳就是一份能夠表示一份數(shù)據(jù)在一個(gè)特定時(shí)間點(diǎn)已經(jīng)存在的、完整的、可驗(yàn)證的數(shù)據(jù),是能夠唯一標(biāo)識(shí)某一時(shí)間的字符串,具有防篡改、防復(fù)用等特點(diǎn),被廣泛應(yīng)用于數(shù)字版權(quán)、電子合同、共識(shí)交易等領(lǐng)域。區(qū)塊鏈對(duì)每個(gè)經(jīng)共識(shí)的區(qū)塊加蓋時(shí)間戳,證明數(shù)據(jù)的存在狀態(tài)和時(shí)間順序,確保數(shù)據(jù)在交易各方之間公開(kāi)、透明并可追溯,為交易信息提供了有力的存在性證明。權(quán)威時(shí)間源時(shí)間戳服務(wù)器數(shù)字簽名文件時(shí)間戳請(qǐng)求時(shí)間戳服務(wù)器反簽名圖3-13時(shí)間戳工作示意圖3.1.4梅克爾樹(shù)技術(shù)梅克爾樹(shù)又稱哈希樹(shù),是將數(shù)據(jù)的哈希值以樹(shù)的結(jié)構(gòu)來(lái)表示的一種數(shù)據(jù)結(jié)構(gòu),葉子節(jié)點(diǎn)為原始數(shù)據(jù)的哈希值,非葉子節(jié)點(diǎn)為其孩子節(jié)點(diǎn)的哈希值。圖3-14梅克爾樹(shù)在區(qū)塊鏈的分布式環(huán)境中,通過(guò)使用梅克爾樹(shù)的數(shù)據(jù)結(jié)構(gòu)和哈希算法,兩個(gè)節(jié)點(diǎn)在共識(shí)過(guò)程中,只需比較梅克爾樹(shù)根節(jié)點(diǎn)的哈希值就能夠判斷兩個(gè)節(jié)點(diǎn)分別持有的交易數(shù)據(jù)是否一致。圖3-15區(qū)塊結(jié)構(gòu)3.1.5數(shù)字簽名數(shù)字簽名是非對(duì)稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用,是只有信息的發(fā)送者才能生成的、別人無(wú)法偽造的一段數(shù)字串。通過(guò)它能確認(rèn)數(shù)據(jù)的來(lái)源以及保證數(shù)據(jù)在發(fā)送的過(guò)程中未做任何修改或變動(dòng)。數(shù)字簽名中的簽名與信息是分開(kāi)的,需要一種方法將簽名與信息聯(lián)系在一起。任何人都可以利用一種公開(kāi)的方法對(duì)數(shù)字簽名進(jìn)行驗(yàn)證。圖3-16數(shù)字簽名加解密過(guò)程3.1.5數(shù)字簽名盲簽名:簽名者需要在無(wú)法看到原始內(nèi)容的前提下對(duì)信息進(jìn)行簽名。一方面,盲簽名可以實(shí)現(xiàn)對(duì)簽名內(nèi)容的保護(hù),防止簽名者看到原始內(nèi)容;另一方面,盲簽名還可以防止追蹤,簽名者無(wú)法將簽名內(nèi)容和簽名結(jié)果進(jìn)行對(duì)應(yīng)。RSA盲簽名算法是典型的盲簽名算法。圖3-17盲簽名流程圖盲化去盲化用戶消息盲簽簽名者加密簽名簽名驗(yàn)證消息true/false3.1.5數(shù)字簽名多重簽名:在n個(gè)簽名者中,至少收集到m個(gè)(n≥m≥1)簽名,即認(rèn)為簽名合法。其中,n是提供公鑰的個(gè)數(shù),m是需要匹配公鑰的最少的簽名個(gè)數(shù)。多重簽名可以有效地應(yīng)用在多人投票共同決策的場(chǎng)景中。圖3-18多重簽名示例圖買家收貨接收驗(yàn)證發(fā)貨支付提醒賣方發(fā)貨確認(rèn)貨物后簽名完成交易3.1.5數(shù)字簽名群簽名:即某個(gè)群組內(nèi)一個(gè)成員可以代表群組進(jìn)行匿名簽名。簽名可以驗(yàn)證來(lái)自該群組,卻無(wú)法準(zhǔn)確追蹤到簽名的是哪個(gè)成員。群簽名需要一個(gè)群管理員來(lái)添加新的群成員,因此存在群管理員追蹤到簽名成員身份的風(fēng)險(xiǎn)。圖3-19群簽名一般流程圖序號(hào)安全性要求含義1完整性即有效的簽名能夠被正確地驗(yàn)證2不可偽造性只有群成員可以產(chǎn)生有效的群簽名。其他任何人包括群管理員都不能偽造合法的簽名3匿名性給定一個(gè)群簽名后,對(duì)除了唯一的群管理員以外的任何人來(lái)說(shuō),確定簽名者的身份是不可行的,至少在計(jì)算上是困難的4可追蹤性群管理員在發(fā)生糾紛的情況下可以打開(kāi)一個(gè)簽名來(lái)確定簽名者的身份,而且任何人都不能阻止一個(gè)合法簽名的打開(kāi)5不關(guān)聯(lián)性在不打開(kāi)簽名的情況下,確定兩個(gè)不同的簽名是否為同一個(gè)群成員所簽的是不可行的,至少在計(jì)算上是困難的6沒(méi)有框架即使其他群成員相互串通,也不能為不在群里的成員進(jìn)行簽名7不可偽造的追蹤驗(yàn)證撤銷群管理員權(quán)限,不能錯(cuò)誤地指責(zé)簽名者創(chuàng)建他沒(méi)有創(chuàng)建的簽名8抵抗聯(lián)合攻擊即使一些群成員串通在一起也不能產(chǎn)生一個(gè)合法的、不能被跟蹤的群簽名表3-2群簽名的安全性要求3.1.5數(shù)字簽名環(huán)簽名:環(huán)簽名是一種簡(jiǎn)化的群簽名。簽名者首先選定一個(gè)臨時(shí)的簽名者集合,集合中包括簽名者自身。然后簽名者利用自己的私鑰和簽名集合中其他人的公鑰可以獨(dú)立地產(chǎn)生簽名,而無(wú)須他人的幫助。簽名者集合中的其他成員可能并不知道自己被包含在最終的簽名中。圖3-20環(huán)簽名一般流程圖表3-3群簽名和環(huán)簽名的對(duì)比序號(hào)對(duì)比點(diǎn)解釋1匿名性都是一種個(gè)體代表群體簽名的機(jī)制,驗(yàn)證者能驗(yàn)證簽名為群體中某個(gè)成員所簽,但并不能知道具體是哪個(gè)成員,以達(dá)到簽名者匿名的作用2可追蹤性群簽名中,群管理員的存在保證了簽名的可追蹤性。群管理員可以撤銷簽名,揭示真正的簽名者。環(huán)簽名本身無(wú)法揭示簽名者,除非簽名者本身想暴露或者在簽名中添加了額外的信息。環(huán)簽名提出了一個(gè)可驗(yàn)證的方案,方案中真實(shí)簽名者希望驗(yàn)證者知道自己的身份,此時(shí)真實(shí)簽名者可以通過(guò)透露自己掌握的秘密信息來(lái)證實(shí)自己的身份3管理系統(tǒng)群簽名由群管理員管理,環(huán)簽名不需要管理,簽名者只需選擇一個(gè)可能的簽名者集合,獲得其公鑰,然后公布這個(gè)集合即可,所有成員平等3.1.6數(shù)字證書(shū)對(duì)非對(duì)稱加密算法和數(shù)字簽名來(lái)說(shuō),一旦公鑰自身出現(xiàn)了問(wèn)題,則整個(gè)建立在其上的安全體系的安全性將不復(fù)存在。數(shù)字證書(shū)機(jī)制可以解決證明“我確實(shí)是我”的問(wèn)題,它就像日常生活中的一個(gè)證書(shū)一樣,可以證明所記錄信息的合法性。私鑰公鑰Fh1

F

h2h1提供私鑰提供公鑰SHAI加密RSA加密RSA解密SHAI加密對(duì)比h1和h2,驗(yàn)證數(shù)字證書(shū)數(shù)字簽名者發(fā)布數(shù)字證書(shū)者圖3-21數(shù)字簽名一般流程3.1.6數(shù)字證書(shū)數(shù)字證書(shū)一般包括版本、序列號(hào)、簽名算法類型、簽發(fā)者信息、有效期、被簽發(fā)人、簽發(fā)的公開(kāi)密鑰、CA數(shù)字簽名等信息。其中最重要的是簽發(fā)的公開(kāi)密鑰和CA數(shù)字簽名。因?yàn)閹в蠧A的數(shù)字簽名,所以只要通過(guò)證書(shū)就可以證明某個(gè)公鑰是合法的。類似地,CA的簽名是否合法也是通過(guò)CA的簽名證書(shū)來(lái)證明的。圖3-22采用HTTPS建立安全連接(TLS握手協(xié)商過(guò)程)的基本步驟3.1.7密鑰分存密鑰分存技術(shù):根據(jù)Shamir和Blakley在1979年分別提出的“門限方案”:將選定的主密鑰K打造成n份不同的子密鑰,以t(0<t<n)為“門限值”,當(dāng)子密鑰數(shù)目超過(guò)或等于門限值t的時(shí)候,可以導(dǎo)出主密鑰。從上面的定義可以知道,通過(guò)改變門限值t可以適當(dāng)?shù)靥嵘到y(tǒng)的安全性和操作效率。圖3-23密鑰分存又被稱為“現(xiàn)代虎符”3.1.8匿名技術(shù)在計(jì)算機(jī)科學(xué)中,這種不用真實(shí)姓名而使用一種特定標(biāo)識(shí)的折中做法被稱為化名,而匿名是指具有無(wú)關(guān)聯(lián)性的化名,無(wú)關(guān)聯(lián)性是一種針對(duì)特定攻擊者的能力而定義的屬性。從直觀的意思來(lái)看,無(wú)關(guān)聯(lián)性意味著如果一個(gè)用戶和系統(tǒng)進(jìn)行重復(fù)交互,從特定攻擊者的角度,不同的交互行為之間應(yīng)該無(wú)法相互關(guān)聯(lián)。圖3-24B-T幣是否具有完全的匿名性呢?3.1.9隱私模型傳統(tǒng)的隱私模型為交易的參與者提供了一定程度的隱私保護(hù)。第三方不會(huì)交出交易者的個(gè)人身份信息,但事實(shí)上,交易雙方的個(gè)人信息都存儲(chǔ)在第三方機(jī)構(gòu)中,因此在一定程度上,交易參與人的隱私仍然存在泄露的風(fēng)險(xiǎn)。圖3-25傳統(tǒng)的隱私模型在B-T幣的隱私模型中,只需要提供B-T幣地址就可以完成準(zhǔn)匿名交易。在一定程度上,交易無(wú)法追溯到交易者本身,因此B-T幣交易在一定程度上可以不受監(jiān)管。然而,通過(guò)對(duì)區(qū)塊鏈上的交易地址和交易金額的關(guān)聯(lián)分析,可以獲得該交易相關(guān)人員的線索。因此,是一種準(zhǔn)匿名交易機(jī)制。圖3-26B-T幣的隱私模型3.2.1一致性問(wèn)題一致性(Consistency),早期也叫作“Agreement”,是指對(duì)分布式系統(tǒng)中的多個(gè)服務(wù)節(jié)點(diǎn),給定一系列操作,在約定協(xié)議的保障下,試圖使得它們對(duì)處理結(jié)果達(dá)成“某種程度”的認(rèn)同。理想情況下,如果各個(gè)服務(wù)節(jié)點(diǎn)嚴(yán)格遵守相同的處理協(xié)議,構(gòu)成相同的處理狀態(tài)機(jī),給定相同的初始狀態(tài)和輸入序列,則可以保障在處理過(guò)程中的每個(gè)環(huán)節(jié)的結(jié)果都是相同的。序號(hào)問(wèn)題1節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信是不可靠的,包括消息延遲、亂序和內(nèi)容錯(cuò)誤等2節(jié)點(diǎn)的處理時(shí)間無(wú)法保障,結(jié)果可能出現(xiàn)錯(cuò)誤,甚至節(jié)點(diǎn)自身可能發(fā)生“宕機(jī)”3同步調(diào)用可以簡(jiǎn)化設(shè)計(jì),但會(huì)嚴(yán)重降低系統(tǒng)的可擴(kuò)展性,甚至使其退化為單節(jié)點(diǎn)系統(tǒng)表3-4分布式計(jì)算機(jī)集群系統(tǒng)中容易出現(xiàn)問(wèn)題的幾個(gè)方面3.2.1一致性問(wèn)題分布式系統(tǒng)達(dá)成一致的過(guò)程應(yīng)該滿足以下幾個(gè)條件:可終止性:一致的結(jié)果在有限的時(shí)間內(nèi)完成;約同性:不同節(jié)點(diǎn)最終完成決策的結(jié)果是相同的;合法性:決策的結(jié)果必須是某個(gè)節(jié)點(diǎn)提出的提案。事實(shí)上,越強(qiáng)的一致性需求常常導(dǎo)致越弱的處理性能和更差的可拓展性。強(qiáng)一致性主要包括以下兩類:順序一致性:這是一個(gè)相對(duì)較強(qiáng)的約束,確保所有進(jìn)程看到的全局順序是一致的,并且每個(gè)進(jìn)程看到自身的執(zhí)行順序與實(shí)際發(fā)生順序一致。線性一致性:在順序一致性的前提下加強(qiáng)了進(jìn)程間的操作排序,形成唯一的全局順序,是很強(qiáng)的原子性的保證,但這比較難實(shí)現(xiàn)。3.2.2拜占庭將軍問(wèn)題與算法問(wèn)題簡(jiǎn)介:拜占庭將軍問(wèn)題又稱拜占庭問(wèn)題,它是蘭伯特等科學(xué)家在1982年提出的一個(gè)解釋一致性問(wèn)題的虛擬模型。拜占庭是古羅馬的首都,由于地域?qū)拸V,邊界上的多個(gè)將軍(類似分布式系統(tǒng)中的多個(gè)節(jié)點(diǎn))需要信使來(lái)傳遞消息并達(dá)成某些一致的決定。但由于將軍中可能有叛變者(類似分布式系統(tǒng)中節(jié)點(diǎn)出錯(cuò)),這些叛變者會(huì)試圖向不同的將軍發(fā)送不同的信息,干擾共識(shí)的達(dá)成。拜占庭問(wèn)題即為此情況下如何讓忠誠(chéng)的將軍們達(dá)成行動(dòng)的一致。3.2.2拜占庭將軍問(wèn)題與算法拜占庭容錯(cuò)算法是解決拜占庭問(wèn)題的一種容錯(cuò)算法。它解決了網(wǎng)絡(luò)通信的可靠性問(wèn)題,即節(jié)點(diǎn)如何在故障情況下達(dá)成一致PBFT是一種狀態(tài)機(jī)復(fù)制算法,即服務(wù)作為狀態(tài)機(jī)進(jìn)行建模,狀態(tài)機(jī)在分布式系統(tǒng)的不同節(jié)點(diǎn)進(jìn)行副本復(fù)制。狀態(tài)機(jī)的每個(gè)副本都保存服務(wù)的狀態(tài),并實(shí)現(xiàn)服務(wù)的操作。流程如下:客戶端向主節(jié)點(diǎn)發(fā)送請(qǐng)求調(diào)用服務(wù)操作;主節(jié)點(diǎn)通過(guò)廣播將請(qǐng)求發(fā)送給其他副本;所有副本都執(zhí)行請(qǐng)求并將結(jié)果發(fā)回客戶端;客戶端需要等待f+1個(gè)不同副本節(jié)點(diǎn)發(fā)回相同的結(jié)果,作為整個(gè)操作的最終結(jié)果。圖3-27節(jié)點(diǎn)投票流程示例3.2.3FLP不可能原理FLP不可能原理:在網(wǎng)絡(luò)可靠但允許節(jié)點(diǎn)失效(即便只有一個(gè))的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問(wèn)題的確定性共識(shí)算法。FLP不可能原理實(shí)際上告訴人們,不要浪費(fèi)時(shí)間去為異步分布式系統(tǒng)設(shè)計(jì)在任意場(chǎng)景下都能實(shí)現(xiàn)共識(shí)的算法。FLP不可能原理實(shí)際上說(shuō)明在允許節(jié)點(diǎn)失效的情況下,純粹異步系統(tǒng)無(wú)法確保一致性在有限時(shí)間內(nèi)完成。即便在非拜占庭錯(cuò)誤的前提下,包括Paxos、Raft等算法也都存在無(wú)法達(dá)成共識(shí)的情況,只是工程實(shí)踐中這種情況出現(xiàn)的概率很小。3.2.3CAP原理CAP原理又稱CAP定理,指的是在一個(gè)分布式系統(tǒng)中,一致性、可用性、分區(qū)容忍性這三個(gè)需求最多只能同時(shí)滿足兩個(gè),不可能三者兼顧。圖3-28CAP原理示例分區(qū)容忍性可用性一致性NO3.3.1PoW機(jī)制PoW機(jī)制也稱工作量證明算法。作為區(qū)塊鏈技術(shù)的開(kāi)創(chuàng)者,B-T幣所采用的共識(shí)機(jī)制就是PoW機(jī)制,并且這一機(jī)制也是其他公有鏈的主流共識(shí)機(jī)制。PoW算法通過(guò)算力競(jìng)爭(zhēng)將記賬權(quán)分配給全網(wǎng)所有節(jié)點(diǎn),獲得記賬權(quán)的誠(chéng)實(shí)節(jié)點(diǎn)能得到一定的數(shù)字貨幣作為貢獻(xiàn)算力等資源的獎(jiǎng)勵(lì)。生成Merkle根哈希作為組裝區(qū)塊頭的輸入隨機(jī)數(shù)上個(gè)區(qū)塊hash值當(dāng)前Merkle根哈希版本時(shí)間戳難度值組裝區(qū)塊頭作為下框的輸入目標(biāo)值小于網(wǎng)絡(luò)目標(biāo)值結(jié)束變更隨機(jī)值N圖3-29PoW工作量證明流程圖3.3.2PoS機(jī)制PoS機(jī)制:即權(quán)益證明機(jī)制。與PoW機(jī)制不同,PoS機(jī)制是一種更加節(jié)能的共識(shí)機(jī)制。PoS是根據(jù)用戶持有的股份數(shù)量來(lái)調(diào)整該用戶挖礦的難度的,且用戶挖礦難度和持有的股份數(shù)量成反比。PoS機(jī)制的出現(xiàn)緩解了PoW機(jī)制對(duì)算力與電力的大量消耗,且加速出塊時(shí)間也能提高對(duì)交易的處理速度和吞吐量。圖3-30PoS交易結(jié)構(gòu)核心輸入權(quán)益輸入權(quán)益輸入權(quán)益輸出(支出給權(quán)益所有者自己)3.3.3DPoS機(jī)制DPoS機(jī)制即授權(quán)權(quán)益證明機(jī)制。DPoS機(jī)制是一種更高效、更安全的共識(shí)機(jī)制,該機(jī)制與PoW機(jī)制和PoS機(jī)制相比,DPoS機(jī)制的優(yōu)點(diǎn)如下:①耗能更低;②更加去中心化;③更快的確認(rèn)速度。圖3-31DPoS機(jī)制結(jié)構(gòu)3.3.4分布式一致性算法PBFT共識(shí)算法:將全部服務(wù)器的配置信息稱為一個(gè)視圖,視圖會(huì)根據(jù)實(shí)際情況一直切換。在某個(gè)視圖中,我們選取某個(gè)副本節(jié)點(diǎn)作為主節(jié)點(diǎn),則其余的副本均作為從節(jié)點(diǎn)。主節(jié)點(diǎn)負(fù)責(zé)接收客戶端的請(qǐng)求,同時(shí)對(duì)收到的請(qǐng)求按照順序進(jìn)行排列。主節(jié)點(diǎn)在接收到客戶端請(qǐng)求后向所有從節(jié)點(diǎn)發(fā)送消息。從節(jié)點(diǎn)接收并驗(yàn)證主節(jié)點(diǎn)發(fā)出的消息,若驗(yàn)證通過(guò),從節(jié)點(diǎn)執(zhí)行對(duì)應(yīng)的操作,再將結(jié)果返回。圖3-32PBFT一致性協(xié)議流程3.3.4分布式一致性算法Paxos算法:Paxos算法把每個(gè)數(shù)據(jù)寫(xiě)請(qǐng)求比喻成一次提案,每個(gè)提案都有一個(gè)獨(dú)立的編號(hào),提案會(huì)轉(zhuǎn)發(fā)給提交者(Proposer)來(lái)提交,提案必須被2f+1個(gè)節(jié)點(diǎn)中的f+1個(gè)節(jié)點(diǎn)接受才會(huì)生效,2f+1個(gè)節(jié)點(diǎn)叫作這次提案的投票委員會(huì)(Quorum),投票委員會(huì)中的節(jié)點(diǎn)叫作接收者(Acceptor)。圖3-33Paxos算法中的角色3.3.4分布式一致性算法Paxos算法流程劃分為兩個(gè)階段,第一階段是發(fā)起方學(xué)習(xí)提案最新?tīng)顟B(tài)的準(zhǔn)備階段;第二階段是根據(jù)學(xué)習(xí)到的狀態(tài)組成正確提案提交的階段。圖3-34Paxos算法流程3.3.4分布式一致性算法Raft算法:Raft算法和Paxos一樣是一個(gè)針對(duì)非拜占庭問(wèn)題所提出的算法,不考慮分布式網(wǎng)絡(luò)中有作惡節(jié)點(diǎn)的情況。也就是說(shuō)這樣的節(jié)點(diǎn)可能宕機(jī)或者延遲,但是不會(huì)出現(xiàn)錯(cuò)誤信息。Raft算法的設(shè)計(jì)中,服務(wù)器節(jié)點(diǎn)都可以有3種狀態(tài),即Follower、Candidate和Leader。圖3-35Raft算法節(jié)點(diǎn)之間的狀態(tài)轉(zhuǎn)換過(guò)程3.3.4分布式一致性算法Raft算法將時(shí)間分為一個(gè)個(gè)的任期(term),每一個(gè)term的開(kāi)始都是Leader選舉。在成功選舉Leader之后,Leader會(huì)在整個(gè)term內(nèi)管理整個(gè)集群。如果Leader選舉失敗,該term就會(huì)因?yàn)闆](méi)有Leader而結(jié)束。圖3-36任期流程任期1任期2任期3任期4選舉正常運(yùn)行無(wú)領(lǐng)導(dǎo)出現(xiàn)任期3.3.4分布式一致性算法日志復(fù)制的主要作用是保證節(jié)點(diǎn)的一致性,這個(gè)階段所做的操作也是為了保證一致性與高可用性。要保證節(jié)點(diǎn)的一致性就要保證每個(gè)節(jié)點(diǎn)都按順序執(zhí)行相同的操作序列,日志復(fù)制就是為了保證執(zhí)行相同的操作序列所做的工作。圖3-37Raft日志同步過(guò)程clientLFF1.提交數(shù)據(jù)2.1復(fù)制2.1復(fù)制3.1確認(rèn)接收3.1確認(rèn)接收4.2數(shù)據(jù)提交4.1確認(rèn)接收3.3.5共識(shí)機(jī)制比較共識(shí)機(jī)制/算法吞吐量速度耗能優(yōu)點(diǎn)缺點(diǎn)PoW低慢高易于實(shí)現(xiàn),惡意破壞賬本體系需要付出很高的代價(jià),可有效防止節(jié)點(diǎn)作惡浪費(fèi)計(jì)算資源,區(qū)塊確認(rèn)時(shí)間長(zhǎng),共識(shí)達(dá)成時(shí)間周期長(zhǎng),效率低PoS低較慢較高解決PoW機(jī)制消耗過(guò)多算力的問(wèn)題,縮短了共識(shí)達(dá)成的時(shí)間機(jī)制略復(fù)雜,計(jì)算資源仍有一定程度上的浪費(fèi)DPoS低較快較高大大減少了參與驗(yàn)證和記賬的節(jié)點(diǎn),交易確認(rèn)的速度可達(dá)到秒級(jí)機(jī)制較復(fù)雜,真正參與記賬的節(jié)點(diǎn)較少,因此安全性、健壯性都有所下降PBFT高快低實(shí)現(xiàn)秒級(jí)的快速共識(shí)機(jī)制,保證一致性網(wǎng)絡(luò)規(guī)模不宜太大表3-5各種共識(shí)機(jī)制/算法比較所有的共識(shí)機(jī)制都是為了讓節(jié)點(diǎn)在分布式的網(wǎng)絡(luò)中能達(dá)成共識(shí),雖然都有著相同的目標(biāo),但采取的方法確是大相徑庭。在不同的應(yīng)用場(chǎng)景下也有著不同的特點(diǎn)和缺陷。3.3.6跨鏈共識(shí)機(jī)制圖3-38系統(tǒng)結(jié)構(gòu)圖下面通過(guò)構(gòu)建一個(gè)從鏈基于PoVT(ProofofVoteandTrust,PoVT)共識(shí)機(jī)制,主鏈基于PBFT機(jī)制(算法)的主從多鏈分層跨鏈模型,來(lái)介紹跨鏈共識(shí)機(jī)制。模型描述:將時(shí)間劃分為時(shí)間片段,每個(gè)時(shí)間片為一個(gè)周期(epoch),每個(gè)周期分成多個(gè)時(shí)隙(slot),每個(gè)時(shí)隙從鏈完成完整的從出塊到上鏈的過(guò)程,在每個(gè)周期的最后一個(gè)時(shí)隙結(jié)束后,代表節(jié)點(diǎn)將該周期所有已確認(rèn)的區(qū)塊數(shù)據(jù)上傳至主鏈網(wǎng)絡(luò)中。模型中的節(jié)點(diǎn)被分成5種角色:普通節(jié)點(diǎn)No、投票節(jié)點(diǎn)Nv、生產(chǎn)節(jié)點(diǎn)Np、候補(bǔ)節(jié)點(diǎn)Nc、代表節(jié)點(diǎn)Nm。3.3.6跨鏈共識(shí)機(jī)制從鏈共識(shí)機(jī)制:(1)準(zhǔn)備階段:在每個(gè)周期開(kāi)始前,系統(tǒng)從希望參與共識(shí)的節(jié)點(diǎn)中根據(jù)節(jié)點(diǎn)的權(quán)益以及STrust值選擇一些節(jié)點(diǎn)組成共識(shí)節(jié)點(diǎn)集合N將集合中的節(jié)點(diǎn)進(jìn)行編號(hào),編號(hào)1到Nump的節(jié)點(diǎn)成為生產(chǎn)節(jié)點(diǎn),編號(hào)Nump

+

1到Nump

+

Numv的節(jié)點(diǎn)為投票節(jié)點(diǎn),剩下的個(gè)數(shù)為Numc的節(jié)點(diǎn)成為候補(bǔ)節(jié)點(diǎn),普通節(jié)點(diǎn)No不參與共識(shí)但需同步最新數(shù)據(jù)塊至本地。(2)基于投票和信用機(jī)制的PoVT共識(shí)機(jī)制:該共識(shí)機(jī)制通過(guò)引入投票機(jī)制來(lái)更加公平地選擇出塊節(jié)點(diǎn),徹底避免節(jié)點(diǎn)之間的算力競(jìng)爭(zhēng),并且引入的信用機(jī)制能夠保證參與共識(shí)的節(jié)點(diǎn)的可靠性,同時(shí)降低權(quán)益對(duì)記賬權(quán)分配的影響,從而增大對(duì)系統(tǒng)發(fā)起權(quán)益粉碎攻擊、雙花攻擊、自私挖礦攻擊等的難度。3.3.6跨鏈共識(shí)機(jī)制圖3-39共識(shí)流程圖1)共識(shí)流程(右圖3-39)。2)隨機(jī)數(shù)R的產(chǎn)生。每個(gè)生產(chǎn)節(jié)點(diǎn)生成區(qū)塊的同時(shí)也產(chǎn)生一個(gè)記錄在區(qū)塊中的隨機(jī)數(shù)R來(lái)決定誰(shuí)是下一個(gè)生產(chǎn)節(jié)點(diǎn)。生成過(guò)程如下:①生產(chǎn)節(jié)點(diǎn)在向投票節(jié)點(diǎn)提交區(qū)塊后同時(shí)收集投票節(jié)點(diǎn)的反饋消息,同時(shí)根據(jù)時(shí)間戳,得到對(duì)得到的Resource進(jìn)行哈希運(yùn)算,然后取字符串的后32位將其轉(zhuǎn)化成整數(shù),得到從而可得到隨機(jī)數(shù):通過(guò)這種方式隨機(jī)地選擇生產(chǎn)節(jié)點(diǎn),能夠有效地預(yù)防節(jié)點(diǎn)之間的共謀攻擊,也保證了共識(shí)過(guò)程的公平與穩(wěn)定。3)信用機(jī)制通過(guò)綜合考慮一個(gè)節(jié)點(diǎn)的有效出塊數(shù)、有效投票數(shù)、參與度等因素,然后使用STrust值來(lái)定量地描述一個(gè)節(jié)點(diǎn)的可信度,再結(jié)合節(jié)點(diǎn)本身的權(quán)益來(lái)決定節(jié)點(diǎn)是否能夠參與共識(shí)過(guò)程。3.3.6跨鏈共識(shí)機(jī)制主鏈共識(shí)機(jī)制:(1)主鏈節(jié)點(diǎn)選擇:主鏈節(jié)點(diǎn)從集合N中選擇,利用從鏈生產(chǎn)節(jié)點(diǎn)計(jì)算隨機(jī)數(shù)R的過(guò)程中得到的中間數(shù)據(jù)R′作為梅森旋轉(zhuǎn)算法(MT19937-32)的種子得到一個(gè)隨機(jī)數(shù)Rm,再?gòu)募螻中選擇編號(hào)與Rm相同的節(jié)點(diǎn)作為代表節(jié)點(diǎn)構(gòu)成主鏈。(2)主鏈共識(shí):為了保證主鏈上保存的從鏈區(qū)塊數(shù)據(jù)都是真實(shí)完整、未被篡改的,代表節(jié)點(diǎn)在打包之前會(huì)檢查被上傳的從鏈區(qū)塊數(shù)據(jù)的上傳次數(shù),只有被不少于其所在從鏈中一半以上的代表節(jié)點(diǎn)上傳過(guò)的從鏈區(qū)塊數(shù)據(jù)才能被主鏈節(jié)點(diǎn)打包上鏈。當(dāng)主鏈節(jié)點(diǎn)確保所打包信息都符合要求后,在主鏈上通過(guò)PBFT共識(shí)算法達(dá)成共識(shí),完成信息在主鏈上的完整上鏈過(guò)程。(3)數(shù)據(jù)跨越:每一周期被選擇成為主鏈節(jié)點(diǎn)的各從鏈代表節(jié)點(diǎn)會(huì)將自己所在從鏈本周期產(chǎn)生的區(qū)塊上傳至主鏈網(wǎng)絡(luò)中,同時(shí)參與主鏈共識(shí),在共識(shí)完成后各代表節(jié)點(diǎn)同樣保存主鏈區(qū)塊至本地網(wǎng)絡(luò)中,每一個(gè)代表節(jié)點(diǎn)保存的主鏈區(qū)塊中都包含來(lái)自不同從鏈的區(qū)塊數(shù)據(jù)供其所在從鏈其余節(jié)點(diǎn)查詢,從而完成不同從鏈之間的數(shù)據(jù)跨鏈。本章小結(jié)本章主要介紹了在區(qū)塊鏈中會(huì)使用的一系列現(xiàn)代密碼學(xué)算法和區(qū)塊鏈網(wǎng)絡(luò)中的核心問(wèn)題——共識(shí)機(jī)制,為我們后面構(gòu)建區(qū)塊鏈網(wǎng)絡(luò)做相應(yīng)的準(zhǔn)備。同時(shí)希望通過(guò)本章的學(xué)習(xí),讀者能去思考現(xiàn)有區(qū)塊鏈網(wǎng)絡(luò)中存在的安全問(wèn)題和一致性問(wèn)題,隨著學(xué)習(xí)的深入,可以逐步形成自己對(duì)解決特定區(qū)塊鏈應(yīng)用的特定問(wèn)題的共識(shí)方案。謝謝!第四章區(qū)塊鏈數(shù)據(jù)存儲(chǔ)目錄/CONTENTS4.1哈希指針與區(qū)塊鏈4.2梅克爾數(shù)簡(jiǎn)介4.3區(qū)塊鏈存儲(chǔ)案例分析4.4編程案例本章小結(jié)思考題4.1哈希指針與區(qū)塊鏈4.1.1哈希指針哈希指針(HashPointer)是一個(gè)指向數(shù)據(jù)存儲(chǔ)位置和數(shù)據(jù)的哈希值的指針,即指向某個(gè)區(qū)塊的地址,只不過(guò)這個(gè)地址進(jìn)行了哈希轉(zhuǎn)換,用哈希值來(lái)表示。通過(guò)哈希指針,我們可以快速定位到某個(gè)區(qū)塊,且能按一定的順序進(jìn)行排列。哈希指針可以保證交易的不可篡改性,一旦區(qū)塊形成后,如果有人想要篡改某個(gè)區(qū)塊中的信息,那么后面一個(gè)區(qū)塊的哈希值匹配就會(huì)出現(xiàn)錯(cuò)誤。哈希指針的存在,使得任何篡改行為牽一發(fā)而動(dòng)全身,讓作惡者無(wú)法篡改區(qū)塊中的信息,從而保證數(shù)據(jù)的完整性。DataPointertoDataHashofDataHashPointer4.1.2區(qū)塊鏈如下圖所示,我們通過(guò)哈希指針構(gòu)建了一個(gè)區(qū)塊鏈。在普通鏈表中,每個(gè)區(qū)塊既有數(shù)據(jù),也有指向上一個(gè)區(qū)塊的指針,而在區(qū)塊鏈中,上一個(gè)區(qū)塊的指針被替換成哈希指針。因此,每個(gè)區(qū)塊不僅能告訴我們上一個(gè)區(qū)塊的值在哪里,還包含了該值的摘要(原文經(jīng)過(guò)哈希函數(shù)形成),從而能夠驗(yàn)證這個(gè)值是否被改變。區(qū)塊鏈的一個(gè)應(yīng)用就是“防止篡改日志”,這意味著我們要構(gòu)建一個(gè)存儲(chǔ)大量數(shù)據(jù)的日志數(shù)據(jù)結(jié)構(gòu),以便能夠?qū)?shù)據(jù)附加到日志末尾。只要有人篡改日志前面的數(shù)據(jù),我們就可以監(jiān)測(cè)到。4.2.梅克爾樹(shù)簡(jiǎn)介4.2.1二叉樹(shù)二叉樹(shù)就是每個(gè)節(jié)點(diǎn)至多有兩棵子樹(shù)的樹(shù)。并且,二叉樹(shù)有左右之分,即其次序不能任意顛倒。二叉樹(shù)在數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)上有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種,而常用的存儲(chǔ)結(jié)構(gòu)是鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),包括區(qū)塊鏈中使用的也是鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。下圖所示的二叉鏈表存儲(chǔ)結(jié)構(gòu)中,二叉樹(shù)中的每一個(gè)節(jié)點(diǎn)用鏈表的一個(gè)鏈節(jié)點(diǎn)來(lái)存儲(chǔ)。二叉鏈表每個(gè)節(jié)點(diǎn)一般包括數(shù)據(jù)域和左右指針,這與梅克爾樹(shù)的結(jié)構(gòu)完全一樣。4.2.2梅克爾樹(shù)梅克爾樹(shù)(MerkleTree)又叫作哈希樹(shù),是另一個(gè)我們可以用哈希指針建立的二叉樹(shù)樹(shù)型數(shù)據(jù)結(jié)構(gòu),以其發(fā)明者梅克爾的名字命名。梅克爾樹(shù)是一種典型的二叉樹(shù)結(jié)構(gòu),由一個(gè)根節(jié)點(diǎn)、一組中間節(jié)點(diǎn)和一組葉子節(jié)點(diǎn)組成。每個(gè)葉子節(jié)點(diǎn)包含一個(gè)存有數(shù)據(jù)的區(qū)塊,然后把所有葉子節(jié)點(diǎn)兩兩分組,每一組建立一個(gè)有兩個(gè)哈希指針的數(shù)據(jù)結(jié)構(gòu),每個(gè)指針指向一個(gè)葉子節(jié)點(diǎn),也就形成了一個(gè)父節(jié)點(diǎn),依此類推,直到得到一個(gè)單一的節(jié)點(diǎn),也就是根節(jié)點(diǎn)。4.2.2梅克爾樹(shù)梅克爾樹(shù)的典型應(yīng)用場(chǎng)景:1.比對(duì)或驗(yàn)證處理:特別是在分布式環(huán)境下進(jìn)行比對(duì)或驗(yàn)證時(shí),梅克爾樹(shù)會(huì)大大減少數(shù)據(jù)的傳輸量以及計(jì)算的復(fù)雜度。2.快速定位修改:如下圖所示,如果N0對(duì)應(yīng)的數(shù)據(jù)被修改,會(huì)直接影響到N1、N4和N6。3.確保不可偽造和無(wú)重復(fù)交易:在B-T幣的設(shè)計(jì)中,梅克爾樹(shù)存在于每個(gè)區(qū)塊中,它被應(yīng)用于交易的存儲(chǔ)上。每筆交易都會(huì)生成一個(gè)哈希值,然后不同的哈希值向上繼續(xù)做哈希運(yùn)算,最終生成唯一的根,并把這個(gè)梅克爾樹(shù)根作為數(shù)據(jù)區(qū)塊的區(qū)塊頭。4.3區(qū)塊鏈存儲(chǔ)案例分析4.3.1100%準(zhǔn)備金證明最簡(jiǎn)單的證明方法就是公布所有用戶數(shù)據(jù)。該方法很直接,但易偽造。如果想要保證邏輯完備性,需要證明以下兩點(diǎn)。(1)沒(méi)有偽造,包括沒(méi)有偽造用戶和沒(méi)有偽造用戶余額。(2)沒(méi)有遺漏,包括沒(méi)有直接遺漏用戶和間接遺漏用戶。要完成100%準(zhǔn)備金的證明,可以用到梅克爾樹(shù)。這個(gè)證明的主要過(guò)程是構(gòu)建梅克爾樹(shù),當(dāng)構(gòu)建完該樹(shù)且根節(jié)點(diǎn)的余額與公布的儲(chǔ)蓄余額相同時(shí),即可100%儲(chǔ)備。100%準(zhǔn)備金證明沒(méi)有偽造沒(méi)有偽造用戶沒(méi)有偽造用戶余額沒(méi)有遺漏沒(méi)有直接遺漏用戶沒(méi)有間接遺漏用戶4.3.2分布式存儲(chǔ)分布式存儲(chǔ)系統(tǒng)是大量普通計(jì)算機(jī)或服務(wù)器通過(guò)Internet互聯(lián),對(duì)外作為一個(gè)整體提供存儲(chǔ)服務(wù)的系統(tǒng)。它的特點(diǎn)是可擴(kuò)展、成本低、性能高、易用。分布式存儲(chǔ)涉及的設(shè)計(jì)主要來(lái)自兩個(gè)領(lǐng)域:分布式系統(tǒng)和數(shù)據(jù)庫(kù)。分布式存儲(chǔ)系統(tǒng)分為以下4類。分布式存儲(chǔ)系統(tǒng)分布式文件系統(tǒng)分布式鍵值系統(tǒng)分布式表系統(tǒng)分布式數(shù)據(jù)庫(kù)系統(tǒng)1.分布式文件系統(tǒng):以對(duì)象的形式組織,對(duì)象之間不存在關(guān)聯(lián),這種數(shù)據(jù)一般稱為二進(jìn)制大對(duì)象數(shù)據(jù)。2.分布式鍵值系統(tǒng):分布式鍵值系統(tǒng)用于存儲(chǔ)關(guān)系簡(jiǎn)單的半結(jié)構(gòu)化數(shù)據(jù)。3.分布式表系統(tǒng):用于存儲(chǔ)具有更復(fù)雜關(guān)系的半結(jié)構(gòu)化數(shù)據(jù)。4.分布式數(shù)據(jù)庫(kù)系統(tǒng):具有靈活的體系結(jié)構(gòu),系統(tǒng)經(jīng)濟(jì),可靠性高,可用性好,在一定條件下響應(yīng)速度快,可擴(kuò)展性好,易于集成現(xiàn)有系統(tǒng),也易于擴(kuò)充。4.4編程案例4.4.1實(shí)現(xiàn)哈希列表哈希函數(shù)經(jīng)常被用于數(shù)據(jù)完整性校驗(yàn),最簡(jiǎn)單的方法是對(duì)整個(gè)數(shù)據(jù)做哈希運(yùn)算,得到固定長(zhǎng)度的哈希值,然后把得到的哈希值公布在網(wǎng)上。這樣用戶下載數(shù)據(jù)之后,對(duì)數(shù)據(jù)再次進(jìn)行哈希運(yùn)算,將運(yùn)算結(jié)果和網(wǎng)上公布的哈希值進(jìn)行比較,如果兩個(gè)哈希值相等,說(shuō)明下載的數(shù)據(jù)沒(méi)有被損壞。實(shí)際操作中,點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)在傳輸數(shù)據(jù)的時(shí)候其實(shí)都是把比較大的一個(gè)文件切成小的數(shù)據(jù)塊。在下載文件之前,通常需要先下載一個(gè)種子文件,這個(gè)種子文件里包含著每個(gè)塊的索引信息和哈希驗(yàn)證碼,因此也被稱為索引文件。根哈希確定這個(gè)哈希列表本身是否正確。使用哈希列表進(jìn)行數(shù)據(jù)完整性校驗(yàn)的原理如下圖所示。4.4.2實(shí)現(xiàn)梅克爾樹(shù)梅克爾樹(shù)也可以實(shí)現(xiàn)數(shù)據(jù)的完整性校驗(yàn)。相對(duì)于哈希列表,梅克爾樹(shù)一個(gè)明顯的優(yōu)點(diǎn)是可以單獨(dú)拿出一個(gè)分支(作為一個(gè)小樹(shù))來(lái)對(duì)部分?jǐn)?shù)據(jù)進(jìn)行校驗(yàn),這為很多使用場(chǎng)合帶來(lái)了哈希列表所不能比擬的方便和高效。如下圖所示,使用梅克爾樹(shù)對(duì)數(shù)據(jù)進(jìn)行高效檢驗(yàn),假設(shè)8號(hào)文件在下載過(guò)程中出現(xiàn)了錯(cuò)誤,如果采用哈希列表,那么必須要對(duì)比16個(gè)分片文件的哈希值,才能確定究竟是哪個(gè)分片文件出現(xiàn)了錯(cuò)誤,而使用梅克爾樹(shù),需要檢驗(yàn)的哈希值只有8個(gè)。4.4.2實(shí)現(xiàn)梅克爾樹(shù)下面以9個(gè)分片文件為例,介紹如何生成一棵梅克爾樹(shù)。(1)假如最底層有9個(gè)數(shù)據(jù)塊。(2)第五層:對(duì)9個(gè)數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,Node0i=hash(Data0i),i=1,2,…,9。(3)第四層:相鄰兩個(gè)哈希塊串聯(lián),然后進(jìn)行哈希運(yùn)算,Node1i=hash(Node0j+Node0(j+1)),i=1,2,3,4,j=1,2,…,8;對(duì)于j=9,Node15=hash(Node09)。(4)第三層:重復(fù)步驟(3)。(5)第二層:重復(fù)步驟(3)。(6)第一層:重復(fù)步驟(3),生成梅克爾樹(shù)根。本章小結(jié)本章基于區(qū)塊鏈中的存儲(chǔ)問(wèn)題向讀者介紹了區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)、梅克爾樹(shù)及其應(yīng)用場(chǎng)景,并介紹了區(qū)塊鏈的存儲(chǔ)案例,希望讀者能更直觀地了解區(qū)塊鏈的存儲(chǔ)特性。由于區(qū)塊鏈?zhǔn)且粋€(gè)基于分布式存儲(chǔ)的記賬系統(tǒng),編者給讀者又介紹了不同的分布式系統(tǒng)及其運(yùn)作機(jī)理。讀者可比較其中的差異,積累更多的區(qū)塊鏈這種分布式記賬系統(tǒng)的相關(guān)知識(shí)。謝謝!第五章區(qū)塊鏈網(wǎng)絡(luò)構(gòu)建目錄/CONTENTS5.1網(wǎng)絡(luò)架構(gòu)5.2去中心化5.3基于開(kāi)源區(qū)塊鏈項(xiàng)目5.4編程案例本章小結(jié)思考題5.1.網(wǎng)絡(luò)架構(gòu)5.1.1網(wǎng)絡(luò)中的節(jié)點(diǎn)通常來(lái)說(shuō),計(jì)算機(jī)網(wǎng)絡(luò)中的節(jié)點(diǎn)指的是一臺(tái)有獨(dú)立地址并具有傳送或接收數(shù)據(jù)功能的設(shè)備。而在區(qū)塊鏈中,節(jié)點(diǎn)必須具有以下幾個(gè)特點(diǎn)。(1)具有一定的存儲(chǔ)空間:任何節(jié)點(diǎn)都必須存儲(chǔ)整條區(qū)塊鏈或區(qū)塊鏈的一部分。(2)連接網(wǎng)絡(luò):通常來(lái)說(shuō),區(qū)塊鏈網(wǎng)絡(luò)由多個(gè)節(jié)點(diǎn)組成,因此這些節(jié)點(diǎn)必須通過(guò)網(wǎng)絡(luò)相連。(3)參與區(qū)塊鏈:任何一個(gè)區(qū)塊鏈節(jié)點(diǎn)必須運(yùn)行與區(qū)塊鏈相關(guān)的程序。區(qū)塊鏈節(jié)點(diǎn)的特點(diǎn)具有一定的存儲(chǔ)空間連接網(wǎng)絡(luò)參與區(qū)塊鏈5.1.1網(wǎng)絡(luò)中的節(jié)點(diǎn)在現(xiàn)在的區(qū)塊鏈應(yīng)用中,區(qū)塊鏈中的節(jié)點(diǎn)可分為礦工節(jié)點(diǎn)、全節(jié)點(diǎn)和輕節(jié)點(diǎn)。1.礦工節(jié)點(diǎn)現(xiàn)有的礦工節(jié)點(diǎn)運(yùn)行于強(qiáng)大或?qū)S玫挠布ㄈ鏏SIC)上,它們唯一的目標(biāo)是盡可能快地挖出新區(qū)塊。2.全節(jié)點(diǎn)全節(jié)點(diǎn)驗(yàn)證礦工挖出來(lái)的塊的有效性,并對(duì)交易進(jìn)行確認(rèn)。為此,它們必須擁有區(qū)塊鏈的完整副本。同時(shí),全節(jié)點(diǎn)執(zhí)行路由操作,幫助其他節(jié)點(diǎn)發(fā)現(xiàn)彼此。區(qū)塊鏈中的節(jié)點(diǎn)輕節(jié)點(diǎn)全節(jié)點(diǎn)礦工節(jié)點(diǎn)3.輕節(jié)點(diǎn)輕節(jié)點(diǎn)并不存儲(chǔ)整個(gè)區(qū)塊鏈副本,但是仍然能夠?qū)灰走M(jìn)行驗(yàn)證(不過(guò)不是驗(yàn)證全部交易,而是一個(gè)交易子集,如發(fā)送到某個(gè)指定地址的交易)。5.1.2區(qū)塊鏈的運(yùn)行機(jī)制通常來(lái)說(shuō),一個(gè)系統(tǒng)可以根據(jù)中心機(jī)構(gòu)的數(shù)量分為3類:中心化系統(tǒng)、多中心化系統(tǒng)和去中心化系統(tǒng)。(1)中心化系統(tǒng):只存在一個(gè)中心機(jī)構(gòu)。(2)多中心化系統(tǒng):同時(shí)存在多個(gè)中心機(jī)構(gòu)。(3)去中心化系統(tǒng):不存在任何中心機(jī)構(gòu)。中心化系統(tǒng)(左)、多中心化系統(tǒng)(中)和去中心化系統(tǒng)(右)5.1.2區(qū)塊鏈的運(yùn)行機(jī)制區(qū)塊鏈網(wǎng)絡(luò)通常來(lái)說(shuō)是去中心化的,這意味著沒(méi)有服務(wù)器,客戶端也不需要依賴服務(wù)器來(lái)獲取或處理數(shù)據(jù)。在區(qū)塊鏈網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)是網(wǎng)絡(luò)的一個(gè)完全(Full-Fledged)成員。節(jié)點(diǎn)就是一切,它既是一個(gè)客戶端,也是一個(gè)服務(wù)器。區(qū)塊鏈網(wǎng)絡(luò)是一個(gè)P2P的網(wǎng)絡(luò),即節(jié)點(diǎn)直接連接到其他節(jié)點(diǎn)。它的拓?fù)涫潜馄降模驗(yàn)樵诠?jié)點(diǎn)的世界中沒(méi)有層級(jí)之分。5.2去中心化5.2.1去中心化的定義中心化的意思是中心決定節(jié)點(diǎn),節(jié)點(diǎn)必須依賴中心,節(jié)點(diǎn)離開(kāi)了中心就無(wú)法生存。去中心化恰恰相反,在一個(gè)分布有眾多節(jié)點(diǎn)的系統(tǒng)中,每個(gè)節(jié)點(diǎn)都具有高度自治的特征,每個(gè)節(jié)點(diǎn)都是一個(gè)“小中心”。由于中心化設(shè)計(jì)里存在著強(qiáng)大的中心機(jī)構(gòu),因此可以解決許多技術(shù)上難以解決的問(wèn)題,如對(duì)整個(gè)系統(tǒng)的監(jiān)督和管理。去中心化系統(tǒng)通常存在著效率低下的問(wèn)題,但去中心化的系統(tǒng)具有能夠降低系統(tǒng)運(yùn)營(yíng)成本、防止系統(tǒng)被中心機(jī)構(gòu)掌控的優(yōu)點(diǎn)。流通標(biāo)準(zhǔn)中心中心化去中心化5.2.2

工作量證明機(jī)制區(qū)塊鏈技術(shù)最重要的創(chuàng)新之一,便是通過(guò)工作量證明機(jī)制來(lái)實(shí)現(xiàn)分布式共識(shí),同時(shí)通過(guò)提高攻擊成本來(lái)防御惡意攻擊。工作量證明的關(guān)鍵特點(diǎn)就是,分布式系統(tǒng)中請(qǐng)求服務(wù)的節(jié)點(diǎn)必須解決一個(gè)有難度但是可行的問(wèn)題,但是驗(yàn)證問(wèn)題答案的過(guò)程對(duì)服務(wù)提供者來(lái)說(shuō)非常容易,也就是一個(gè)不容易解答但是容易被驗(yàn)證的問(wèn)題。這種問(wèn)題通常需要消耗一定的CPU時(shí)間來(lái)計(jì)算某個(gè)問(wèn)題的答案,目前絕大部分的區(qū)塊鏈都選擇使用工作量證明的分布式共識(shí)機(jī)制,網(wǎng)絡(luò)中的所有節(jié)點(diǎn)通過(guò)執(zhí)行解密來(lái)獲得創(chuàng)建新區(qū)塊的權(quán)利。1.compute2.solve3.send4.vertifySenderReceiver5.2.3區(qū)塊鏈共識(shí)當(dāng)一個(gè)節(jié)點(diǎn)挖出一個(gè)新區(qū)塊后,默認(rèn)會(huì)立即將新區(qū)塊鏈接到本地存儲(chǔ)的區(qū)塊鏈的末尾,并且廣播到整個(gè)網(wǎng)絡(luò)中。其他節(jié)點(diǎn)在收到這一新區(qū)塊后,會(huì)驗(yàn)證這一區(qū)塊的有效性并決定是否接收這一區(qū)塊。當(dāng)同時(shí)收到多個(gè)新區(qū)塊時(shí),節(jié)點(diǎn)默認(rèn)只承認(rèn)那些連接到共識(shí)鏈(最長(zhǎng)鏈)上最后一個(gè)被確認(rèn)的新區(qū)塊,并以第一個(gè)滿足條件的區(qū)塊所在的鏈為共識(shí)鏈。對(duì)于收到的其他區(qū)塊,節(jié)點(diǎn)可以自己選擇處理方式,推薦的方式為將較新的區(qū)塊以支鏈的形式保存起來(lái)。如果一個(gè)節(jié)點(diǎn)收到的區(qū)塊的索引遠(yuǎn)遠(yuǎn)大于該節(jié)點(diǎn)當(dāng)前共識(shí)鏈的最后一個(gè)區(qū)塊的索引,那么說(shuō)明該節(jié)點(diǎn)很有可能已經(jīng)失去與其他節(jié)點(diǎn)的同步,需要立即重新進(jìn)行同步(從其他節(jié)點(diǎn)下載區(qū)塊鏈)。按照上述共識(shí)機(jī)制,經(jīng)過(guò)一段時(shí)間的區(qū)塊競(jìng)爭(zhēng)后,一定會(huì)有一條最長(zhǎng)的共識(shí)鏈形成。5.2.3區(qū)塊鏈共識(shí)3個(gè)節(jié)點(diǎn),區(qū)塊數(shù)量完全一樣,同一時(shí)刻只有一個(gè)節(jié)點(diǎn)挖出一個(gè)新區(qū)塊3個(gè)節(jié)點(diǎn),區(qū)塊數(shù)量完全一樣,同一時(shí)刻不止一個(gè)節(jié)點(diǎn)挖出一個(gè)新區(qū)塊在上一張圖的人基礎(chǔ)上。礦工a又挖出一個(gè)新區(qū)塊一個(gè)節(jié)點(diǎn)長(zhǎng)時(shí)間掉線收到一個(gè)比較舊的區(qū)塊緩存舊區(qū)塊,產(chǎn)生支鏈下圖為區(qū)塊鏈就最長(zhǎng)鏈達(dá)成共識(shí)的詳細(xì)過(guò)程:5.3基于開(kāi)源區(qū)塊鏈項(xiàng)目5.3.1Hyperledger超級(jí)賬本項(xiàng)目為透明、開(kāi)放和去中心化的企業(yè)級(jí)分布式賬本技術(shù)提供了開(kāi)源參考實(shí)現(xiàn),并促進(jìn)了區(qū)塊鏈和分布式賬本相關(guān)協(xié)議、規(guī)范和標(biāo)準(zhǔn)的發(fā)展。作為一個(gè)聯(lián)合項(xiàng)目,超級(jí)賬本由用于不同目的和場(chǎng)景的子項(xiàng)目組成。所有項(xiàng)目都遵守ApacheV2許可,并約定共同遵守以下基本原則。(1)重視模塊化設(shè)計(jì):包括交易、合同、一致性、身份、存儲(chǔ)等技術(shù)場(chǎng)景。(2)重視代碼可讀性:保障新功能和模塊都可以很容易添加和擴(kuò)展。(3)可持續(xù)的演化路線:隨著需求的深入和應(yīng)用場(chǎng)景的增加,不斷增加和演化新的項(xiàng)目。Hyperledger重視模塊設(shè)計(jì)重視代碼可讀性可持續(xù)的演化路線5.3.2

InterLedgerInterLedger是Ripple公司推出的一個(gè)跨賬本協(xié)議,旨在幫助銀行間進(jìn)行快速結(jié)算。Ripple公司的跨賬本協(xié)議允許參與者查看相同的賬本,通過(guò)該公司網(wǎng)絡(luò),銀行客戶可以實(shí)現(xiàn)實(shí)時(shí)點(diǎn)對(duì)點(diǎn)跨境轉(zhuǎn)賬,無(wú)須中央組織管理,支持各國(guó)使用不同的貨幣。在InterLedger系統(tǒng)中,兩個(gè)不同的賬本系統(tǒng)可以通過(guò)第三方來(lái)進(jìn)行貨幣之間的兌換,如下圖所示。賬本系統(tǒng)不需要信任第三方,因?yàn)閰f(xié)議使用密碼算法為這兩個(gè)賬本系統(tǒng)和第三方創(chuàng)建資金托管,并且當(dāng)各方在資金上達(dá)成共識(shí)時(shí),它們可以互相進(jìn)行交易。這意味著此類交易不需要受到法律合同的保護(hù)和過(guò)多的審查,大大降低了交易的門檻。5.3.2

InterLedger1.InterLedger協(xié)議功能InterLedger協(xié)議(InterLedgerProtocol,ILP)有3個(gè)關(guān)鍵功能,即具有ILP數(shù)據(jù)包、可進(jìn)行無(wú)信任發(fā)送和具有打包價(jià)值。InterLedger協(xié)議功能具有打包價(jià)值可無(wú)信任發(fā)送具有ILP數(shù)據(jù)包(1)具有ILP數(shù)據(jù)包:InterLedger協(xié)議的核心是ILP數(shù)據(jù)包,這是發(fā)送方、第三方、接收方之間使用的消息傳遞標(biāo)準(zhǔn)。(2)可進(jìn)行無(wú)信任發(fā)送:InterLedger的第二個(gè)關(guān)鍵功能是其能夠讓用戶通過(guò)第三方網(wǎng)絡(luò)進(jìn)行匯款,而不需要信任它們。(3)具有打包價(jià)值:或?qū)⑤^大的轉(zhuǎn)賬分成許多低價(jià)值的數(shù)據(jù)包。5.3.3

steemSteem項(xiàng)目使用加密貨幣獎(jiǎng)勵(lì)用戶,解決了現(xiàn)有社交平臺(tái)利潤(rùn)分配不合理的問(wèn)題。簡(jiǎn)而言之,Steem是一個(gè)通過(guò)加密貨幣獎(jiǎng)勵(lì)來(lái)支持社區(qū)建設(shè)和社交互動(dòng)的區(qū)塊鏈數(shù)據(jù)庫(kù)。Steem的兩個(gè)重要特色:1.共識(shí)機(jī)制:Steem系統(tǒng)采用石墨烯技術(shù),所以區(qū)塊鏈記賬采用的是DPoS算法。2.首創(chuàng)零手續(xù)費(fèi):因?yàn)镾teem使用新發(fā)行的代幣給見(jiàn)證人(記賬員)發(fā)工資,加上Steem使用的是DPoS共識(shí)機(jī)制,記賬員記賬不會(huì)有太大的工作量,所以大部分的價(jià)值可以保存下來(lái)并分發(fā)給平臺(tái)中的其他貢獻(xiàn)者。所有記賬員的工資占Steem系統(tǒng)每年產(chǎn)生新代幣總數(shù)的10%。DPoS共識(shí)機(jī)制5.4

編程案例5.4.1實(shí)現(xiàn)私有鏈1.準(zhǔn)備工作本小節(jié)的目標(biāo)是開(kāi)發(fā)一個(gè)能夠在本地運(yùn)行的私有鏈,這一區(qū)塊鏈接收和存儲(chǔ)本地用戶上傳的數(shù)據(jù),且每個(gè)用戶在上傳數(shù)據(jù)時(shí)需要提供自己的數(shù)字簽名以驗(yàn)證自己的身份。簡(jiǎn)易區(qū)塊鏈架構(gòu)如下圖:2.區(qū)塊結(jié)構(gòu)構(gòu)建在本小節(jié)中為簡(jiǎn)便起見(jiàn),我們只是簡(jiǎn)單地將其以列表的形式進(jìn)行組織。一般來(lái)說(shuō),區(qū)塊鏈中的區(qū)塊必須包含下列元數(shù)據(jù):區(qū)塊產(chǎn)生的時(shí)間,誰(shuí)生成了這個(gè)區(qū)塊,上一個(gè)區(qū)塊的哈希值,工作量證明的結(jié)果等。每個(gè)區(qū)塊都必須包含以下屬性:前一個(gè)區(qū)塊的哈希值(hash)、工作量證明(proof)、索引(index)、時(shí)間戳(timestamp)以及交易列表(trans)5.4.1

實(shí)現(xiàn)私有鏈3.Blockchain類回憶一下前文對(duì)這個(gè)私有鏈的要求,它需要完成3個(gè)功能。(1)能夠接收區(qū)塊鏈擁有者上傳的數(shù)據(jù),并把接收到的數(shù)據(jù)存儲(chǔ)到區(qū)塊鏈中。(2)能夠執(zhí)行工作量證明算法,產(chǎn)生存儲(chǔ)數(shù)據(jù)的新區(qū)塊,并將未確認(rèn)的數(shù)據(jù)寫(xiě)入新區(qū)塊。(3)能夠?qū)?shù)據(jù)提交者的身份進(jìn)行驗(yàn)證,只有通過(guò)了驗(yàn)證,系統(tǒng)才會(huì)接收提交的數(shù)據(jù)。Blockchain類的功能是管理區(qū)塊鏈,它能執(zhí)行存儲(chǔ)交易、加入新區(qū)塊、驗(yàn)證簽名等操作。在它的構(gòu)造方法中還創(chuàng)建了兩個(gè)列表:chain列表用于存儲(chǔ)區(qū)塊鏈,trans列表用于存儲(chǔ)尚未確認(rèn)的交易(數(shù)據(jù))。newTrans()方法newBlock()方法hash()方法工作量證明機(jī)制signProof()方法lastBlock()方法經(jīng)過(guò)上圖的流程,Blockchain類的開(kāi)發(fā)已經(jīng)基本完成了,它能夠驗(yàn)證上傳數(shù)據(jù)者的身份,將未確認(rèn)的新交易緩存起來(lái),創(chuàng)建新的區(qū)塊并將緩存的交易寫(xiě)入其中。5.4.1實(shí)現(xiàn)私有鏈4.區(qū)塊鏈API開(kāi)發(fā)首先,需要為Flask框架編寫(xiě)HTML模板。目前我們需要兩個(gè)模板,一個(gè)是控制區(qū)塊鏈執(zhí)行各種操作的頁(yè)面的模板,另一個(gè)是提交交易的頁(yè)面的模板。編寫(xiě)完模板之后,就需要為Flask框架定制接口了。/index區(qū)塊鏈應(yīng)用的首頁(yè)/chain查看區(qū)塊鏈上存儲(chǔ)的所有數(shù)據(jù)/newtrans接收和驗(yàn)證用戶提交的數(shù)據(jù)/newblock執(zhí)行工作量證明算法并生成新的區(qū)塊編寫(xiě)向外界提供4類接口5.測(cè)試與運(yùn)行編寫(xiě)完成Blockchain類和接口.py文件之后,就可以開(kāi)始運(yùn)行區(qū)塊鏈了。運(yùn)行結(jié)果如圖所示。sever.py腳本運(yùn)行結(jié)果5.4.1實(shí)現(xiàn)私有鏈Web服務(wù)器啟動(dòng)之后,會(huì)顯示服務(wù)器綁定的IP地址和端口。復(fù)制命令行中的“:5000”,將其粘貼到瀏覽器地址欄中,在末尾加上前文編寫(xiě)的某個(gè)接口的名稱。即可訪問(wèn)我們編寫(xiě)的頁(yè)面,其結(jié)果如下圖所示。

單擊“查看區(qū)塊鏈”按鈕,就可以看到目前區(qū)塊鏈中存儲(chǔ)的所有數(shù)據(jù),其結(jié)果如圖所示。5.4.1實(shí)現(xiàn)私有鏈可以看到,目前區(qū)塊鏈中只存在初始化Blockchain類時(shí)建立的創(chuàng)世區(qū)塊?;氐降谝粋€(gè)頁(yè)面,單擊“新交易”按鈕就會(huì)進(jìn)入交易提交界面,如圖右所示。前3項(xiàng)可以任意填寫(xiě),因?yàn)槟壳暗膮^(qū)塊鏈只負(fù)責(zé)存儲(chǔ)我們提交的數(shù)據(jù)而不會(huì)在意具體數(shù)據(jù)是否有意義。第4項(xiàng)和第5項(xiàng)需要輸入配套的公鑰和私鑰,公鑰和私鑰的生成如右圖所示。5.4.1實(shí)現(xiàn)私有鏈分別復(fù)制命令行中的公鑰和私鑰到交易提交頁(yè)面的兩個(gè)輸入框中,單擊“提交”按鈕即可查看交易提交是否成功。交易提交成功的結(jié)果如圖所示。另外一種產(chǎn)生配套的公鑰和私鑰的方法是在網(wǎng)上搜索“RSA密鑰在線生成”,可以找到一些提供配套R(shí)SA密鑰生成的網(wǎng)站,如圖所示。5.4.1實(shí)現(xiàn)私有鏈交易順利提交之后,再次訪問(wèn)/chain接口,可以看到剛剛提交的交易還沒(méi)有加入?yún)^(qū)塊鏈。這是因?yàn)閯倓偺峤坏慕灰走€沒(méi)有通過(guò)工作量證明算法加入新區(qū)塊,目前仍處于未確認(rèn)狀態(tài)。回到第一個(gè)頁(yè)面,單擊“新區(qū)塊”按鈕就會(huì)開(kāi)始執(zhí)行工作量證明算法,這個(gè)過(guò)程可能會(huì)需要一些時(shí)間,特別是如果hard被設(shè)置得太大,時(shí)間會(huì)更久。當(dāng)工作

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論