Go語言Hyperledger區(qū)塊鏈開發(fā)實(shí)戰(zhàn)PPT完整全套教學(xué)課件_第1頁
Go語言Hyperledger區(qū)塊鏈開發(fā)實(shí)戰(zhàn)PPT完整全套教學(xué)課件_第2頁
Go語言Hyperledger區(qū)塊鏈開發(fā)實(shí)戰(zhàn)PPT完整全套教學(xué)課件_第3頁
Go語言Hyperledger區(qū)塊鏈開發(fā)實(shí)戰(zhàn)PPT完整全套教學(xué)課件_第4頁
Go語言Hyperledger區(qū)塊鏈開發(fā)實(shí)戰(zhàn)PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩1131頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Go語言區(qū)塊鏈開發(fā)實(shí)戰(zhàn)全套PPT課件第1章區(qū)塊鏈技術(shù)基礎(chǔ)學(xué)前提示區(qū)塊鏈技術(shù)不僅奠定了比特幣和以太坊等傳奇品牌的技術(shù)基礎(chǔ),而且已經(jīng)上升為中國的國家戰(zhàn)略。本書的主題是使用Go語言開發(fā)基于HyperledgerFabric的區(qū)塊鏈應(yīng)用。作為開篇第一章,首先介紹關(guān)于區(qū)塊鏈技術(shù)的基礎(chǔ)知識,為后面的學(xué)習(xí)奠定基礎(chǔ)。知識要點(diǎn)1.1區(qū)塊鏈的工作原理及底層技術(shù)1.2經(jīng)典的區(qū)塊鏈平臺1.1區(qū)塊鏈的工作原理及底層技術(shù)1.1.1分布式系統(tǒng)的概念1.1.2什么是比特幣系統(tǒng)1.1.3共識算法和比特幣的挖礦1.1.4雙花問題1.1.5區(qū)塊鏈技術(shù)賦予比特幣價值1.1.1分布式系統(tǒng)的概念所有的區(qū)塊鏈應(yīng)用都是分布式系統(tǒng)。所謂分布式系統(tǒng)是指建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。在分布式系統(tǒng)中一組獨(dú)立的計算機(jī)按照統(tǒng)一的規(guī)則,各司其職、密切配合,呈現(xiàn)給用戶的是一個統(tǒng)一的整體。就好像只有一個服務(wù)器一樣。在大數(shù)據(jù)、云計算、物聯(lián)網(wǎng)和本書所介紹的區(qū)塊鏈技術(shù)等領(lǐng)域中,分布式系統(tǒng)得到了廣泛的應(yīng)用。1.1.2區(qū)塊鏈技術(shù)的總體架構(gòu)“區(qū)塊鏈”名詞最早出現(xiàn)在中本聰?shù)恼撐摹侗忍貛牛阂环N點(diǎn)對點(diǎn)式的電子現(xiàn)金系統(tǒng)》中。(1)我們可以把每一臺參與比特幣系統(tǒng)的計算機(jī)稱為節(jié)點(diǎn)。(2)每個節(jié)點(diǎn)將新交易收集到一個塊中。(3)節(jié)點(diǎn)可以創(chuàng)建鏈上的下一個區(qū)塊,并使用當(dāng)前區(qū)塊的哈希值作為新區(qū)塊的“前一個哈?!弊侄沃怠^(qū)塊鏈的示意圖區(qū)塊鏈的架構(gòu)設(shè)計1.存儲層存儲層主要實(shí)現(xiàn)區(qū)塊鏈的存儲功能,其中涉及數(shù)據(jù)存儲(存儲格式、區(qū)塊大?。┖图用芩惴ǖ燃夹g(shù)細(xì)節(jié)。2.網(wǎng)絡(luò)層實(shí)現(xiàn)分布式網(wǎng)絡(luò)編程,涉及網(wǎng)絡(luò)通信協(xié)議(點(diǎn)對點(diǎn)通信)和共識算法等技術(shù)細(xì)節(jié)。共識算法包括比特幣使用的工作量證明(PoW,誰的算力大,就由誰記賬)和以太坊采用的權(quán)益證明(PoS,誰的股權(quán)多,就由誰記賬)。在分布式系統(tǒng)中,還有一個很常用的共識算法,就是投票,由節(jié)點(diǎn)投票形成共識。3.?dāng)U展層擴(kuò)展層是對經(jīng)典區(qū)塊鏈技術(shù)的補(bǔ)充和擴(kuò)展。企業(yè)級應(yīng)用是區(qū)塊鏈擴(kuò)展層的一個主要的發(fā)展方向。區(qū)塊鏈技術(shù)發(fā)展的初期,應(yīng)用場景多為公鏈應(yīng)用,所有人都可以選擇參與。正因?yàn)檫@樣,那時候很少有企業(yè)愿意應(yīng)用區(qū)塊鏈技術(shù)。另外還有一個因素:就是沒有專門針對企業(yè)應(yīng)用的區(qū)塊鏈項目,而公鏈項目多需要使用數(shù)字貨幣支付。數(shù)字貨幣的價值浮動太激烈,企業(yè)很難控制項目的成本。HyperledgerFabric以HyperledgerFabric為代表的實(shí)現(xiàn)完備權(quán)限控制和安全保障的企業(yè)級區(qū)塊鏈,可以解決企業(yè)間的信用問題。產(chǎn)業(yè)鏈上下游的各環(huán)節(jié)之間,都可能發(fā)生企業(yè)間的信息交互和配合,如果用傳統(tǒng)的線下記賬方式,顯然是低效的。很多企業(yè)都有自己的信息系統(tǒng),但是它們彼此隔離,形成一個個信息孤島。打通這些信息孤島的成本是巨大的,而且同樣存在彼此之間的信任問題。聯(lián)盟鏈由產(chǎn)業(yè)鏈中相關(guān)企業(yè)共同開發(fā)建設(shè),信息上鏈,不可隨意修改,可以解決企業(yè)間的信用問題。只要對相關(guān)企業(yè)做好科普工作,就可以大大提高企業(yè)間配合的效率,打通一個個信息孤島,最終可以形成行業(yè)大數(shù)據(jù)。4.應(yīng)用層應(yīng)用層主要負(fù)責(zé)實(shí)現(xiàn)區(qū)塊鏈技術(shù)在生產(chǎn)、交易、流通和社會生活中的應(yīng)用。目前區(qū)塊鏈技術(shù)還處于科普和底層基礎(chǔ)設(shè)施建設(shè)階段。在這一階段完成之前,區(qū)塊鏈技術(shù)大規(guī)模應(yīng)用的條件還不成熟。目前,比較經(jīng)典的區(qū)塊鏈應(yīng)用包括金融交易、存證、溯源、數(shù)字資產(chǎn)、公益(慈善、眾籌、…)等。1.1.3加密算法1.哈希算法2.對稱加密算法3.非對稱加密算法4.國密算法1.哈希算法哈希是一個函數(shù),它可以將不同長度的數(shù)據(jù)映射為固定長度的數(shù)據(jù)。因此哈希函數(shù)又稱為摘要函數(shù),或者散列函數(shù)。哈希算法最大待處理消息長度得到的摘要數(shù)據(jù)長度MD5沒有限制128位的數(shù)據(jù),表現(xiàn)為長度為32位的16進(jìn)制字符串SHA1264位160位的數(shù)據(jù)SHA-224264位240位的數(shù)據(jù)SHA-256264位256位的數(shù)據(jù)SHA-3842128位384位的數(shù)據(jù)SHA-5122128位512位的數(shù)據(jù)SM3264位256位的數(shù)據(jù)在線對數(shù)據(jù)進(jìn)行MD5處理中心化系統(tǒng)一組對數(shù)據(jù)進(jìn)行MD5處理的結(jié)果待處理消息摘要數(shù)據(jù)123456E10ADC3949BA59ABBE56E057F20F883E123456789701234567890D726DA56936D0A63A2B4D8D3ECA0D07B123202CB962AC59075B964B07152D234B701C4CA4238A0B923820DCC509A6F75849BabcdefghijklmnopqrstuvwxyzC3FCD3D76192E4007DFB496CCA67E13B比特幣系統(tǒng)中采用SHA-256算法計算區(qū)塊的摘要信息。FD80DEDA69B71529B1BC7A275FD00A45區(qū)塊鏈?zhǔn)墙陙碇耸挚蔁岬男屡d技術(shù),它不但孕育了比特幣、以太坊等知名分布式應(yīng)用平臺,而且已經(jīng)被確定為國家戰(zhàn)略,成為國家重點(diǎn)發(fā)展的IT技術(shù)。在區(qū)塊鏈發(fā)展的初期,大多數(shù)項目都屬于公有鏈項目,企業(yè)使用區(qū)塊鏈技術(shù)的成功案例并不多。區(qū)塊鏈技術(shù)3.0可以實(shí)現(xiàn)完備權(quán)限控制和安全保障的企業(yè)級區(qū)塊鏈——聯(lián)盟鏈。聯(lián)盟鏈可以解決企業(yè)間的信用問題,由產(chǎn)業(yè)鏈中相關(guān)企業(yè)共同開發(fā)建設(shè),信息上鏈,不可隨意修改。從而打造高度互信的企業(yè)級區(qū)塊鏈應(yīng)用項目。27969908728DE0176CD7FDB95B9C6B912.對稱加密算法3.非對稱加密算法4.國密算法SM1:對稱加密算法,密鑰長度為128比特,算法不公開,固化在芯片中。SM2:開源的非對稱加密算法,可以用于數(shù)據(jù)的加解密和數(shù)字簽名。SM3:開源的哈希算法,用于生成數(shù)據(jù)的摘要。SM4:開源的對稱分組加密算法,密鑰長度為128比特。SM7:對稱分組加密算法,密鑰長度為128比特,適用于非接觸式IC卡。SM9:標(biāo)識密碼算法,標(biāo)識密碼將用戶的標(biāo)識(如郵件地址、手機(jī)號碼、QQ號碼、微信賬號等)作為公鑰,省略了交換數(shù)字證書和公鑰的過程,使得安全系統(tǒng)變得易于部署和管理,非常適合端對端離線安全通訊。ZUC祖沖之算法:中國自主研究的流密碼算法,是運(yùn)用于移動通信網(wǎng)絡(luò)中的國際標(biāo)準(zhǔn)密碼算法。1.1.4區(qū)塊鏈的分類1.公有鏈2.私有鏈3.聯(lián)盟鏈1.公有鏈任何人都可以參與公有鏈的運(yùn)作,包括如下操作:(1)讀取區(qū)塊中的數(shù)據(jù);(2)發(fā)起交易;(3)作為礦工參與挖礦。2.私有鏈私有鏈?zhǔn)怯商囟ńM織控制的區(qū)塊鏈,整個網(wǎng)絡(luò)由該組織的成員機(jī)構(gòu)組成。共識算法由指定的一組節(jié)點(diǎn)完成。私有鏈只是一定限度的去中心化。通常用于企業(yè)內(nèi)部的經(jīng)營和管理。私有鏈可以有效地保護(hù)企業(yè)的商業(yè)秘密;因?yàn)閰⑴c共識過程的節(jié)點(diǎn)比較少,所以交易速度很快;而且也不需要給礦工支付交易的手續(xù)費(fèi),成本較低。

3.聯(lián)盟鏈聯(lián)盟鏈?zhǔn)菣C(jī)構(gòu)(企業(yè))之間共同搭建的區(qū)塊鏈,適用于商業(yè)伙伴之間的交易、結(jié)算和清算等B2B應(yīng)用場景。對于企業(yè)而言,需要考慮區(qū)塊鏈的如下需求·參與者必須經(jīng)過認(rèn)證,已經(jīng)被標(biāo)識或可以被標(biāo)識?!ば枰獙⑴c者進(jìn)行授權(quán)。·可以高效地處理交易,以免影響商機(jī)?!さ脱訒r的交易確認(rèn),以便交易可以快速地記錄在區(qū)塊鏈中?!そ灰讛?shù)據(jù)的隱私性和保密性應(yīng)滿足商務(wù)交易的需求。1.2經(jīng)典的區(qū)塊鏈平臺1.2.1區(qū)塊鏈技術(shù)的發(fā)展階段1.2.2比特幣1.2.3以太坊1.2.4Hyperledger項目1.2.5區(qū)塊鏈開發(fā)語言1.2.1區(qū)塊鏈技術(shù)的發(fā)展階段(1)區(qū)塊鏈1.0:以比特幣為代表的數(shù)字貨幣是區(qū)塊鏈1.0的經(jīng)典應(yīng)用。(2)區(qū)塊鏈2.0:以太坊的誕生,拉開了區(qū)塊鏈2.0的帷幕,智能合約的概念拓展了區(qū)塊鏈的應(yīng)用場景。(3)區(qū)塊鏈3.0:區(qū)塊鏈3.0的經(jīng)典應(yīng)用是實(shí)現(xiàn)完備權(quán)限控制和安全保障的企業(yè)級區(qū)塊鏈——聯(lián)盟鏈。聯(lián)盟鏈可以解決企業(yè)間的信用問題,由產(chǎn)業(yè)鏈中相關(guān)企業(yè)共同開發(fā)建設(shè),信息上鏈,不可隨意修改。1.2.2比特幣比特幣平臺是區(qū)塊鏈技術(shù)落地應(yīng)用的第一個項目,也是最經(jīng)典的區(qū)塊鏈平臺。1.比特幣平臺的發(fā)展歷程2.比特幣的挖礦1.比特幣平臺的發(fā)展歷程2009年1月3日,中本聰挖出了比特幣的第一個區(qū)塊,也就是創(chuàng)世區(qū)塊(GenesisBlock)2010年5月22日是比特幣發(fā)展歷程中具有里程碑意義的一天。在這一天,早期的比特幣礦工LaszloHanyecz(拉茲洛·漢尼)用10000比特幣給自己的女兒買了2個披薩,大約相當(dāng)于41美元。2011年,津巴布韋發(fā)生了嚴(yán)重的通貨膨脹。進(jìn)一步推高了比特幣的價值。2013年11月,1個比特幣的價格飆升到1000美元。2014年2月,世界上最大的比特幣交易商MT.Gox(昵稱門頭溝)被黑客攻擊,損失了85萬個比特幣。按當(dāng)時的市值算,價值超過4.5億美元?,F(xiàn)在1個比特幣的市值已經(jīng)高達(dá)40000多美元。越來越多的國家和企業(yè)接受、認(rèn)可比特幣。2.比特幣的挖礦比特幣系統(tǒng)是一個去中心化的分布式系統(tǒng),有分布在世界各地的很多礦工參與記賬,那么怎樣在所有礦工之間形成共識、防止礦工在記賬時作假,就很重要。共識算法就可以解決這個問題,實(shí)現(xiàn)不同節(jié)點(diǎn)上數(shù)據(jù)的一致性和正確性。在比特幣系統(tǒng)中,共識算法需要解決如下2個問題:(1)確定選擇記賬節(jié)點(diǎn)的機(jī)制;(2)確保賬本數(shù)據(jù)在全網(wǎng)中保持正確性和一致性。這個過程就是比特幣的挖礦。比特幣系統(tǒng)采用工作量證明(PoW,ProofofWork)共識算法比特幣的區(qū)塊頭結(jié)構(gòu)中包含一個“難度目標(biāo)”字段,這就是系統(tǒng)給所有礦工出的一道算術(shù)題。比特幣區(qū)塊頭中還包含一個字段Nonce,這是為了找到滿足難度目標(biāo)而設(shè)定的隨機(jī)數(shù)。解題的過程就是不斷地調(diào)整Nonce的值,然后對區(qū)塊頭進(jìn)行雙重SHA256運(yùn)算,得到result??梢允褂萌缦鹿奖硎具\(yùn)算的過程:result=SHA256(SHA256(區(qū)塊頭數(shù)據(jù)))如果result小于給定難度目標(biāo)值,則視為成功解題。最先解題的礦工取得記賬權(quán)。收到被打包的區(qū)塊后,網(wǎng)絡(luò)中的節(jié)點(diǎn)會按如下步驟進(jìn)行處理(1)對打包的區(qū)塊進(jìn)行驗(yàn)證,驗(yàn)證的過程比較復(fù)雜,這里不做展開介紹。(2)如果未通過驗(yàn)證,則丟棄該區(qū)塊,不做處理。比特幣系統(tǒng)規(guī)定只有經(jīng)過6個確認(rèn)的交易才被認(rèn)為是真實(shí)的交易。這樣,即使有些礦工作弊,也會因?yàn)榈貌坏阶銐虻拇_認(rèn)而無法得逞。(3)如果通過驗(yàn)證,則說明本輪挖礦已經(jīng)結(jié)束,其他節(jié)點(diǎn)放棄競爭記賬權(quán)的計算,將該區(qū)塊記錄在自己的賬本中。1.2.3以太坊2013年末,維塔利克發(fā)布了以太坊(Ethereum)初版白皮書,吸引到一批認(rèn)可以太坊理念的合作伙伴,啟動了項目。2014年,以太坊陸續(xù)發(fā)布了幾個版本的測試網(wǎng)絡(luò),并且發(fā)起了為期42天的以太幣預(yù)售,共募集到31531個比特幣,按照當(dāng)時的比特幣匯率,相當(dāng)于1843萬美元。2015年7月,以太坊網(wǎng)絡(luò)正式發(fā)布了,標(biāo)志著以太坊區(qū)塊鏈上線運(yùn)行。智能合約在以太坊平臺上運(yùn)行的是一種叫做“智能合約”的特殊應(yīng)用程序。智能合約(smartcontract)的概念最早于1996年由法律學(xué)者尼克·薩博(NickSzabo)提出。他對智能合約的定義為:“智能合約”是一系列以數(shù)字的形式定義的承諾,相關(guān)各方可以在其(智能合約)上面執(zhí)行這些承諾的協(xié)議。以太坊的誕生使智能合約從理論過渡到了實(shí)踐。以太坊的平臺專為執(zhí)行智能合約而設(shè)計,所有參與者都可以開發(fā)屬于自己的智能合約應(yīng)用,使得智能合約可以存儲和運(yùn)行在分布式賬本上。1.2.4Hyperledger項目Hyperledger項目的核心目標(biāo)包括。?通過使用企業(yè)級的DLT(DistributedLedgerTechnology,分布式賬本技術(shù))解決方案提供對商業(yè)交易的支持。?建立和支持技術(shù)社區(qū)。?對區(qū)塊鏈技術(shù)進(jìn)行科普和推廣,并提供市場機(jī)會。?提供促進(jìn)社區(qū)發(fā)展的工具集。?提供由社區(qū)驅(qū)動的、開放的基礎(chǔ)設(shè)施。Hyperledger項目中包含的子項目1.2.5區(qū)塊鏈開發(fā)語言·Solidity:以太坊推出的智能合約開發(fā)語言。由于以太坊的影響力,加上Solidity是專注開發(fā)智能合約的語言,因此它是應(yīng)用比較廣泛的區(qū)塊鏈編程語言?!ava:作為歷史悠久、熱度很高的編程語言,Java擁有超過900萬開發(fā)者。很多區(qū)塊鏈應(yīng)用是使用Java語言開發(fā)的。·GO:是Google于2009年推出的開發(fā)語言,也是本書的主題之一。而其他流行的開發(fā)語言幾乎都是上世紀(jì)的產(chǎn)物。GO語言是近年來非常流行的一門新興開發(fā)語言,具有語法簡潔、高并發(fā)、高效運(yùn)行等特性,比較適合區(qū)塊鏈底層系統(tǒng)的開發(fā)。Fabric區(qū)塊鏈和以太坊官方客戶端Geth都是使用GO語言開發(fā)的?!ぁavaScript:最常用的開發(fā)Web應(yīng)用的前端腳本語言。在開發(fā)區(qū)塊鏈應(yīng)用時,經(jīng)常會使用到JavaScript?!ython:近年很流行的編程語言,筆者編寫本書時,Python在知名的TIOBE開發(fā)語言排行榜中排名第1名。·C#:微軟推出的編程語言,廣泛應(yīng)用于Windows應(yīng)用和Web應(yīng)用的開發(fā)。·C++:經(jīng)典的編程語言,比較適合區(qū)塊鏈底層系統(tǒng)的開發(fā)。比特幣就是使用C++開發(fā)的。Go語言區(qū)塊鏈開發(fā)實(shí)戰(zhàn)授課教師:職務(wù):第2章Fabric區(qū)塊鏈的體系結(jié)構(gòu)學(xué)前提示作為聯(lián)盟鏈的經(jīng)典平臺,F(xiàn)abric區(qū)塊鏈有很多不同于比特幣和以太坊的特色。本章結(jié)合Fabric區(qū)塊鏈的體系結(jié)構(gòu)介紹這些特色,使讀者對本書主題形成總體印象。知識要點(diǎn)2.1Fabric網(wǎng)絡(luò)模型2.2搭建示例網(wǎng)絡(luò)的過程2.1Fabric網(wǎng)絡(luò)模型2.1.1Fabric網(wǎng)絡(luò)的主要組件2.1.2Fabric區(qū)塊鏈平臺的體系結(jié)構(gòu)2.1.3排序服務(wù)與交易的流程2.1.1Fabric網(wǎng)絡(luò)的主要組件MSP(MembershipServiceProvider,成員服務(wù)提供者)。

客戶端。Peer節(jié)點(diǎn)。

排序節(jié)點(diǎn)(orderer)。1.MSPMSP是定義身份驗(yàn)證方式和訪問網(wǎng)絡(luò)權(quán)限規(guī)則的組件。它可以管理希望加入網(wǎng)絡(luò)的用戶和客戶端,為發(fā)起交易提案的客戶端提供證書。MSP使用CA(CertificateAuthority,證書頒發(fā)機(jī)構(gòu))來驗(yàn)證或撤銷用戶證書。CA是可插拔的接口,MSP使用的默認(rèn)接口是Fabric-CAAPI,但是組織也可以選擇使用外部的CA。Fabric網(wǎng)絡(luò)包含兩種MSP(1)本地MSP:管理用戶、客戶端、節(jié)點(diǎn)(Peer節(jié)點(diǎn)和排序節(jié)點(diǎn)),定義誰有對這些對象的管理權(quán)限。(2)通道MSP:定義通道級別的管理權(quán)限。通道(channel)Fabric網(wǎng)絡(luò)中的不同成員可以組成一個通道(channel),每個通道都有一個獨(dú)立的區(qū)塊鏈。這樣多個組織就可以共同使用一個區(qū)塊鏈網(wǎng)絡(luò),分別維護(hù)不同的區(qū)塊鏈。只有通道的成員才能看到通道中其他成員的交易。也就是說,通道相當(dāng)于網(wǎng)絡(luò)的分區(qū),目的是確保只有相關(guān)參與方才能看到相關(guān)交易。2.客戶端客戶端應(yīng)用程序可以通過FabricSDK與區(qū)塊鏈網(wǎng)絡(luò)通信,發(fā)起交易提案。FabricSDK可以提供讀寫區(qū)塊鏈中數(shù)據(jù)的能力。每個客戶端都有CA頒發(fā)的證書。Peer節(jié)點(diǎn)的類型

背書節(jié)點(diǎn):記賬節(jié)點(diǎn):錨節(jié)點(diǎn):領(lǐng)導(dǎo)節(jié)點(diǎn)排序機(jī)制SOLOKafkaRaft2.1.2Fabric區(qū)塊鏈平臺的體系結(jié)構(gòu)1.接口層API(ApplicationProgrammingInterface,應(yīng)用程序編程接口)是Fabric區(qū)塊鏈提供的對區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行訪問和操作操作的接口,可以在客戶端應(yīng)用程序中調(diào)用API與網(wǎng)絡(luò)進(jìn)行交互。SDK(SoftwareDevelopmentKit,軟件開發(fā)工具包)是Fabric區(qū)塊鏈提供的開發(fā)包,客戶端應(yīng)用程序可以利用SDK與智能合約進(jìn)行交互。CLI(commandlineinterface,命令行界面)是一個命令行客戶端工具,用戶可以通過命令行訪問Fabric網(wǎng)絡(luò)。開發(fā)者可以通過CLI快速測試鏈碼,或者查詢交易狀態(tài)。智能合約經(jīng)過打包后就是鏈碼。2.應(yīng)用層(1)身份管理身份管理模塊負(fù)責(zé)對Fabric網(wǎng)絡(luò)中的成員進(jìn)行身份管理,頒發(fā)數(shù)字證書、并提供身份認(rèn)證服務(wù)。(2)賬本管理賬本負(fù)責(zé)存儲網(wǎng)絡(luò)中的交易數(shù)據(jù)。Fabric區(qū)塊鏈中的數(shù)據(jù)存儲結(jié)構(gòu)由區(qū)塊鏈、世界狀態(tài)數(shù)據(jù)庫、區(qū)塊索引和歷史索引組成。?區(qū)塊鏈中的數(shù)據(jù)保存在區(qū)塊中的,不可篡改,并且按交易發(fā)生的順序存儲。?世界狀態(tài)數(shù)據(jù)庫中保存著賬本數(shù)據(jù)的當(dāng)前緩存值。?區(qū)塊索引和歷史索引則分別保存當(dāng)前和歷史的區(qū)塊索引,以便可以在賬本數(shù)據(jù)中快速定位交易數(shù)據(jù)。(3)交易管理交易是指資產(chǎn)在網(wǎng)絡(luò)成員之間轉(zhuǎn)移的操作。資產(chǎn)是區(qū)塊鏈管理的對象,它可以是有形的(比如房地產(chǎn)或硬件設(shè)備),也可以是無形的(比如智能合約或知識產(chǎn)權(quán))。在Fabric區(qū)塊鏈中使用一組鍵值對表示資產(chǎn)(可以是二進(jìn)制形式或JSON格式),可以通過交易修改資產(chǎn)。Fabric網(wǎng)絡(luò)的交易流程將在2.1.3節(jié)介紹。(4)智能合約智能合約是部署于區(qū)塊鏈網(wǎng)絡(luò)上的程序可以存取世界狀態(tài)數(shù)據(jù)庫中的數(shù)據(jù)。關(guān)于智能合約開發(fā)的具體情況將在第9章中介紹。3.服務(wù)層(1)成員服務(wù):用于管理用戶ID,并對網(wǎng)絡(luò)的所有參與者進(jìn)行身份認(rèn)證。可以通過ACL(AccessControlLists,訪問控制列表)對用戶的特定網(wǎng)絡(luò)操作授權(quán)進(jìn)行管理和控制。關(guān)于成員服務(wù)的具體情況將在第5章介紹。(2)區(qū)塊鏈服務(wù):用于管理Fabric網(wǎng)絡(luò)中的數(shù)據(jù)存儲和交易。在交易過程中負(fù)責(zé)節(jié)點(diǎn)間的共識管理,維護(hù)一個分布式賬本,賬本存儲在Peer節(jié)點(diǎn)上,Peer節(jié)點(diǎn)間通過P2P網(wǎng)絡(luò)協(xié)議進(jìn)行通信。(3)鏈碼服務(wù):鏈碼是經(jīng)過打包的智能合約,鏈碼服務(wù)用于管理Fabric網(wǎng)絡(luò)中的智能合約,包括智能合約的編碼、部署和調(diào)用等。(4)事件流:事件是Fabric網(wǎng)絡(luò)中各組件的通信機(jī)制,可以在應(yīng)用程序、Peer節(jié)點(diǎn)、排序服務(wù)和智能合約間傳遞消息。所謂事件流就是指事件在各組件之間流轉(zhuǎn)、傳遞的機(jī)制。由于篇幅所限,本書不對事件流做展開介紹。2.1.3排序服務(wù)與交易的流程1.什么是排序2.排序節(jié)點(diǎn)和通道配置1.什么是排序Fabric區(qū)塊鏈的工作原理與前面提到的公有鏈不同,它設(shè)置了一種特殊的節(jié)點(diǎn),即排序節(jié)點(diǎn),專門負(fù)責(zé)對交易進(jìn)行排序。多個排序節(jié)點(diǎn)構(gòu)成排序服務(wù)。因?yàn)镕abric區(qū)塊鏈采用確定的共識算法,到達(dá)記賬節(jié)點(diǎn)的區(qū)塊順序是一致的,而且交易內(nèi)容經(jīng)過多次驗(yàn)證,也就是不可能存在互相沖突的交易,比如一筆錢被使用兩次。這樣就保證了區(qū)塊鏈不可能出現(xiàn)分叉。2.排序節(jié)點(diǎn)和通道配置除了負(fù)責(zé)排序,排序節(jié)點(diǎn)還負(fù)責(zé)維護(hù)一個可以創(chuàng)建通道的組織的列表,這些組織構(gòu)成聯(lián)盟。更新通道配置的交易由排序節(jié)點(diǎn)處理,以確認(rèn)交易的發(fā)起者是否擁有指定的管理員權(quán)限。如果有,則排序節(jié)點(diǎn)會根據(jù)當(dāng)前的配置數(shù)據(jù)驗(yàn)證配置更新請求,生成一個新的配置交易,將更新申請打包到一個區(qū)塊中,然后將該區(qū)塊發(fā)送至通道中的所有Peer節(jié)點(diǎn)。3.身份標(biāo)識與Fabric區(qū)塊鏈的所有組件(包括Peer節(jié)點(diǎn)、應(yīng)用程序、管理員和排序節(jié)點(diǎn))進(jìn)行交互都需要組件所屬組織的身份標(biāo)識,身份標(biāo)識由數(shù)字證書和組織的MSP所定義。與Peer節(jié)點(diǎn)一樣,排序節(jié)點(diǎn)也屬于一個組織。同樣,每個獨(dú)立的CA也應(yīng)該只為一個組織服務(wù)??梢赃x擇使用一個單獨(dú)的CA,也可以部署一個根CA、然后設(shè)置中間CA,這取決于每個組織的選擇。4.基本交易流程Fabric網(wǎng)絡(luò)中交易的基本流程更詳細(xì)的交易流程(1)提案/背書在“提案/背書”階段,客戶端應(yīng)用程序會發(fā)送一個交易提案到一組Peer節(jié)點(diǎn),Peer節(jié)點(diǎn)會調(diào)用智能合約發(fā)起一個更新賬本的申請,然后對結(jié)果進(jìn)行背書。此時,背書Peer節(jié)點(diǎn)不會將更新提案應(yīng)用到自己賬本副本中。而是將背書的結(jié)果返回至客戶端應(yīng)用程序。背書結(jié)果中包含背書節(jié)點(diǎn)的簽名和對應(yīng)的帶有版本號的交易數(shù)據(jù)讀/寫集。如果客戶端應(yīng)用程序收集了策略中規(guī)定的足夠數(shù)量的背書,則將交易發(fā)送至排序服務(wù)。(2)排序/打包在交易的第2階段,排序服務(wù)會通過共識協(xié)議對交易進(jìn)行排序。在Fabric網(wǎng)絡(luò)中,共識協(xié)議是可插拔的,也就是可以從多個配置好的共識協(xié)議中選擇使用其中的一個,可以動態(tài)增加共識協(xié)議。(3)驗(yàn)證/記賬根據(jù)應(yīng)用程序在提交交易到賬本之前指定的背書策略對交易進(jìn)行驗(yàn)證。應(yīng)用程序指定的背書策略中包括需要哪個Peer節(jié)點(diǎn)或多少個Peer節(jié)點(diǎn)對給定智能合約的正確執(zhí)行提供擔(dān)保。每個交易都需要經(jīng)過背書策略中指定數(shù)量的Peer節(jié)點(diǎn)進(jìn)行背書。如果要求多個Peer節(jié)點(diǎn)對交易進(jìn)行背書,則并發(fā)執(zhí)行背書可以提高系統(tǒng)的性能。5.完整的交易流程圖中使用的圖例Fabric網(wǎng)絡(luò)中交易的完整流程整個交易過程可以分為如下6個步驟(1)客戶端初始化交易(2)背書節(jié)點(diǎn)驗(yàn)證簽名并執(zhí)行交易(3)檢查提案響應(yīng)(4)客戶端將背書信息集成到交易中(5)驗(yàn)證交易(6)更新賬本6.交易模擬和讀寫集<TxReadWriteSet><NsReadWriteSetname="chaincode1"><read-set><readkey="K1",version="1"><readkey="K2",version="1"></read-set><write-set><writekey="K1",value="V1"><writekey="K3",value="V2"><writekey="K4",isDelete="true"></write-set></NsReadWriteSet><TxReadWriteSet>2.2搭建示例網(wǎng)絡(luò)的過程2.2.1示例網(wǎng)絡(luò)的拓?fù)?.2.2創(chuàng)建網(wǎng)絡(luò)2.2.3證書頒發(fā)機(jī)構(gòu)(CA)2.2.4添加網(wǎng)絡(luò)管理員2.2.5創(chuàng)建一個聯(lián)盟2.2.6為聯(lián)盟創(chuàng)建通道2.2.7Peer節(jié)點(diǎn)和賬本2.2.8客戶端應(yīng)用和智能合約2.2.1示例網(wǎng)絡(luò)的拓?fù)?.2.2創(chuàng)建網(wǎng)絡(luò)2.2.3證書頒發(fā)機(jī)構(gòu)(CA)在圖2-11中包含一個證書頒發(fā)機(jī)構(gòu)CA4,它在示例網(wǎng)絡(luò)中扮演著關(guān)鍵的角色。它可以為組織R4的組件分配X.509證書,用于標(biāo)識組件的身份。關(guān)于X.509證書的具體情況將在第4章中介紹。Fabric提供一個內(nèi)置的CA,叫做Fabric-CA。證書與成員組織之間的映射使用一個叫做MSP(MemnershipServicesProvider,成員服務(wù)提供者)的組件實(shí)現(xiàn)。2.2.4添加網(wǎng)絡(luò)管理員2.2.5創(chuàng)建一個聯(lián)盟2.2.6為聯(lián)盟創(chuàng)建通道2.2.7Peer節(jié)點(diǎn)和賬本2.2.8客戶端應(yīng)用和智能合約Go語言區(qū)塊鏈開發(fā)實(shí)戰(zhàn)授課教師:職務(wù):第3章搭建Fabric區(qū)塊鏈環(huán)境學(xué)前提示本章介紹在局域網(wǎng)中搭建Fabric區(qū)塊鏈環(huán)境的方法,使讀者對Fabric區(qū)塊鏈網(wǎng)絡(luò)形成直觀的了解,為學(xué)習(xí)本書后面的內(nèi)容奠定硬件和軟件基礎(chǔ)。知識要點(diǎn)3.1搭建基礎(chǔ)環(huán)境3.2安裝Fabric區(qū)塊鏈3.3管理工具和配置文件3.4Fabric測試網(wǎng)絡(luò)3.1搭建基礎(chǔ)環(huán)境3.1.1安裝VitualBox虛擬機(jī)3.1.2安裝CentOS3.1.3安裝和使用Docker3.1.1安裝VitualBox虛擬機(jī)VirtualBox是Oracle推出的一款開源虛擬機(jī)軟件。為了便于讀者學(xué)習(xí),盡量少的占用物理資源,本書選擇在VitualBox虛擬機(jī)中搭建Fabric環(huán)境。3.1.2安裝CentOS1.在OracleVirtualBox中安裝CentOS虛擬機(jī)2.設(shè)置CentOS虛擬機(jī)的靜態(tài)IP地址3.使用Putty工具遠(yuǎn)程連接CentOS虛擬機(jī)4.使用WinSCP工具實(shí)現(xiàn)向CentOS服務(wù)器上傳文件的功能1.在OracleVirtualBox中安裝CentOS虛擬機(jī)新建虛擬電腦對話框“設(shè)置內(nèi)存大小”對話框新建的CentOS虛擬機(jī)設(shè)置虛擬機(jī)的存儲屬性在存儲中選中提前準(zhǔn)備好的CentOS7安裝光盤鏡像查看CentOS的版本信息2.設(shè)置CentOS虛擬機(jī)的靜態(tài)IP地址將網(wǎng)卡1的“混雜模式”設(shè)置為“全部允許”查看CentOS系統(tǒng)的網(wǎng)卡名字默認(rèn)的網(wǎng)絡(luò)配置參數(shù)配置DNSvi/etc/resolv.confnameserver0nameserver重新啟動網(wǎng)絡(luò)servicenetworkrestart如果可以ping通百度,則說明IP地址配置成功了ping3.使用Putty工具遠(yuǎn)程連接CentOS虛擬機(jī)PuTTY是一款免費(fèi)的基于SSH和Telnet的遠(yuǎn)程連接工具。(1)為遠(yuǎn)程連接建立一個通道。(2)安裝openssh組件。(3)編輯openssh組件的配置文件。(4)使用PuTTY。(1)為遠(yuǎn)程連接建立一個通道。打開VitualBox軟件,右擊CentOS虛擬機(jī)圖標(biāo),選擇“設(shè)置”打開“虛擬機(jī)設(shè)置”窗口。在左側(cè)窗格中選中“網(wǎng)絡(luò)”,在右側(cè)的網(wǎng)卡2選項卡中,選中“啟用網(wǎng)絡(luò)連接”復(fù)選框,將連接方式選擇為“僅主機(jī)(Host-Only)網(wǎng)絡(luò)”,然后單擊OK按鈕。配置好后,可以在宿主機(jī)(安裝VirtualBox的計算機(jī))中看到一個名稱為VirtualBoxHost-OnlyEthernetAdapter的虛擬網(wǎng)絡(luò)連接。查看虛擬連接的IP地址為第2塊網(wǎng)卡配置靜態(tài)IP地址將ifcfg-enp0s3復(fù)制為ifcfg-enp0s8,內(nèi)容如下:TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticIPADDR=01NETMASK=DNS1=0DNS2=GATEWAY=DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=enp0s8UUID=b86ee2d0-57a8-4e49-8eaf-803edd59d4dfDEVICE=enp0s8ONBOOT=yes重啟network服務(wù)systemctlrestartnetwork(2)安裝openssh組件。(2)安裝openssh組件。yuminstallopenssh-server(3)編輯openssh組件的配置文件。vi/etc/ssh/sshd_config按下:鍵,然后執(zhí)行setnu命令,使配置文件中顯示行號。找到如下配置項,去掉前面的注釋符17Port2219ListenAddress

38PermitRootLoginyes65PasswordAuthenticationyes

具體說明如下。Port22:指定openssh組件在端口22上監(jiān)聽。

ListenAddress

:指定openssh組件監(jiān)聽所有的IPv4地址。

PermitRootLoginyes:指定openssh組件允許使用root用戶連接。

PasswordAuthenticationyes:指定openssh組件允許使用密碼進(jìn)行身份驗(yàn)證。重新啟動sshd服務(wù)并關(guān)閉防火墻systemctlrestartsshdsystemctldisablefirewalld(4)使用PuTTY。4.使用WinSCP工具實(shí)現(xiàn)向CentOS服務(wù)器上傳文件的功能WinSCP登錄窗口WinSCP主窗口3.1.3安裝和使用DockerDocker是一個開源的引擎,使用Docker可以很輕松地為任何應(yīng)用創(chuàng)建輕量級的、便于移植的、自包含的容器。容器化是目前非常流行的部署軟件系統(tǒng)的方法。容器是軟件的一個標(biāo)準(zhǔn)的單元,其中打包了代碼和運(yùn)行代碼所有依賴的軟件和組件,以便使應(yīng)用程序可以快捷、穩(wěn)定地運(yùn)行,而且因?yàn)槿萜魇窍鄬Κ?dú)立存在的,所以可以很方便地在不同環(huán)境下實(shí)現(xiàn)應(yīng)用程序的遷移。使用容器部署應(yīng)用程序的方法被稱為容器化。1.Docker的基本概念(1)鏡像(image)鏡像是一個輕量級的、獨(dú)立的、可以執(zhí)行的包,其中包含運(yùn)行指定軟件所需要的一切資源,包括代碼、庫、環(huán)境變量和配置文件等。(2)容器(container)容器是鏡像的一個運(yùn)行時實(shí)例。如果將鏡像比作類的話,則容器就是類的一個實(shí)例化的對象。當(dāng)鏡像被加載到內(nèi)存中并實(shí)際執(zhí)行時,它與主機(jī)環(huán)境是完全隔離的,只訪問主機(jī)上的文件和端口。(3)標(biāo)簽(tag)用于標(biāo)記鏡像的版本。(4)棧(stack)棧是一組相互關(guān)聯(lián)的服務(wù),這些服務(wù)可以共享依賴、一起被編排,從而實(shí)現(xiàn)Web服務(wù)器集群。(5)鏡像倉庫(repository)用于存儲Docker鏡像的倉庫??梢苑譃楣_倉庫和私有倉庫。公開倉庫是開放的,大家都可以訪問的倉庫,最大的公開倉庫是DockerHub。私有倉庫是自己搭建的,用于存儲私有鏡像的倉庫,其他人無權(quán)訪問。(6)注冊服務(wù)器(registry)用于管理鏡像倉庫的服務(wù)器。注冊服務(wù)器、鏡像倉庫、標(biāo)簽和鏡像的關(guān)系2.在CentOS中安裝Docker(1)升級yum包sudoyumupdate(2)卸載舊版本sudoyumremovedockerdocker-commondocker-selinuxdocker-engine(3)安裝需要的軟件包sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2(4)選擇安裝Docker的版本sudoyum-config-manager--add-repo/docker-ce/linux/centos/docker-ce.repo然后查看所有倉庫中所有docker版本。yumlistdocker-ce--showduplicates|sort-r查看所有倉庫中所有docker版本安裝Docker17.12.1.ceyuminstalldocker-ce-17.12.1.ce安裝完成后,執(zhí)行下面的命令,可以查看Docker的版本。docker--version如果返回結(jié)果類似如下,則說明安裝成功。

Dockerversion17.12.1-ce,build7390fc63.Docker服務(wù)管理啟動Docker服務(wù)。systemctlstartdocker查看Docker服務(wù)的狀態(tài)。

systemctlstatusdocker設(shè)置自動啟動Docker服務(wù)。systemctlenabledocker查看Docker服務(wù)的狀態(tài)4.配置Docker鏡像加速器sudo

mkdir-p/etc/dockervi/etc/docker/daemon.json

在/etc/docker/daemon.json中填寫如下內(nèi)容:{"registry-mirrors":["/"]}EOF應(yīng)用配置,重啟Docker服務(wù)

sudo

systemctldaemon-reloadsudo

systemctlrestartdocker5.使用Docker容器(1)運(yùn)行Docker鏡像dockerrunhello-world命令的運(yùn)行過程?Docker客戶端連接到Docker守護(hù)進(jìn)程(daemon)。?Docker守護(hù)進(jìn)程從DockHub拉取hello-world:latest鏡像。首先在本地倉庫中查找hello-world:latest鏡像,如果找不到則從線上倉庫中拉取hello-world:latest鏡像。?Docker守護(hù)進(jìn)程使用下載的鏡像新建一個容器,然后運(yùn)行它,并輸出上面的結(jié)果。?Docker守護(hù)進(jìn)程將輸出結(jié)果發(fā)送到Docker客戶端顯示。(2)查看本機(jī)Docker鏡像dockerimages(3)在Docker容器中執(zhí)行交互操作首先拉取ubuntu,Ubuntu是一個以桌面應(yīng)用為主的Linux操作系統(tǒng)。

dockerpullubuntu

然后運(yùn)行鏡像:

dockerrun-itubuntu/bin/bash參數(shù)說明?-i,指定支持交互操作。?-t,指定以終端(terminal)形式運(yùn)行。?/bin/bash,指定啟動一個交互式的Shell,用戶可以在Docker鏡像里面執(zhí)行命令。查看Ubuntu鏡像里面的目錄結(jié)構(gòu)(4)查看Docker容器信息dockerps-a查看Docker容器信息(5)啟動和停止Docker容器執(zhí)行dockerstart命令可以啟動Docker容器,命令格式如下:

dockerstartDocker容器ID

執(zhí)行dockerstop命令可以停止Docker容器,命令格式如下:

dockerstopDocker容器ID(6)刪除Docker容器Dockerrm<Docker容器ID>

例如,執(zhí)行下面的命令刪除ID為ccb52f4b4774的容器。

dockerrmccb52f4b4774(7)刪除Docker鏡像Dockerrmi<Docker鏡像ID>例如,執(zhí)行下面的命令刪除ID為1d622ef86b13的鏡像。dockerrmi1d622ef86b133.2安裝Fabric區(qū)塊鏈3.2.1安裝和運(yùn)行Fabric區(qū)塊鏈所需要的環(huán)境3.2.2安裝Go語言環(huán)境3.2.3安裝Git3.2.4安裝DockerCompose3.2.5安裝Fabric區(qū)塊鏈3.2.1安裝和運(yùn)行Fabric區(qū)塊鏈所需要的環(huán)境1.Go語言2.Git3.Docker4.DockerCompose3.2.2安裝Go語言環(huán)境cd/usr/local/wget/dl/golang/go1.15.3.linux-amd64.tar.gz如果系統(tǒng)中沒有安裝wget,可以執(zhí)行如下命令安裝。yuminstall-ywget解壓縮GO語言源碼到$HOME目錄tar-C$HOME-xzfgo1.15.3.linux-amd64.tar.gz(3)創(chuàng)建保存Go語言程序的目錄$HOME/gocodemkdir$HOME/gocode設(shè)置GO語言的環(huán)境變量vi~/.bashrc然后在文件中添加如下代碼:exportGOPATH=$HOME/gocodeexportGOROOT=$HOME/goexportPATH=$PATH:$GOROOT/binexportPATH=$PATH:$GOPATH/bin保存退出后,執(zhí)行下面的命令編譯.bashrc文件。source~/.bashrc查看GO語言的版本goversion如果輸出如下信息,則說明安裝成功。goversiongo1.15.3linux/amd643.2.3安裝Git首先執(zhí)行g(shù)it命令,檢查系統(tǒng)中是否已經(jīng)安裝了Git。如果返回如下結(jié)果則說明尚未安裝。-bash:git:未找到命令否則執(zhí)行如下命令卸載較低版本的Git。yumremove-ygit安裝git的命令如下:yum-yinstallgit安裝完成后,執(zhí)行如下命令查看git的版本信息。gitversion筆者在編寫本書時,返回的版本信息如下:gitversion3.2.4安裝DockerCompose首先從GitHub下載與CentOS版本相匹配的DockerCompose,命令如下:sudocurl-Lhttps://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-compose如果CentOS中沒有curl,可以通過如下命令安裝:yuminstall-ycurl執(zhí)行下面的命令為安裝腳本添加執(zhí)行權(quán)限。sudo

chmod+x/usr/local/bin/docker-compose執(zhí)行下面的命令可以查看DockerCompose的版本信息。docker-compose-v如果結(jié)果如下,則說明DockerCompose已經(jīng)安裝成功。docker-composeversion1.29.2,buildcabd5cfb3.2.5安裝Fabric區(qū)塊鏈mkdir$GOPATH/srcmkdir$GOPATH/src/mkdir$GOPATH/src//hyperledger1.下載Fabric源代碼cd$GOPATH/src//hyperledgergitclone/mirrors/fabric.git2.下載Fabric區(qū)塊鏈的示例代碼cd$GOPATH/src//hyperledger/fabric/scripts/gitcheckoutrelease-2.3gitclone/hyperledger/fabric-samples.git3.安裝Fabric區(qū)塊鏈cd$GOPATH/src//hyperledger/fabric/scripts/shbootstrap.sh(1)查看bootstrap.sh的內(nèi)容,找到pullBinaries()函數(shù)pullBinaries(){echo"===>Downloadingversion${FABRIC_TAG}platformspecificfabricbinaries"download"${BINARY_FILE}""/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"if[$?-eq22];thenechoecho">${FABRIC_TAG}platformspecificfabricbinaryisnotavailabletodownload<"echoexitfi

echo"===>Downloadingversion${CA_TAG}platformspecificfabric-ca-clientbinary"download"${CA_BINARY_FILE}""/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"if[$?-eq22];thenechoecho">${CA_TAG}fabric-ca-clientbinaryisnotavailabletodownload(Availablefrom1.1.0-rc1)<"echoexitfi}download()函數(shù)download(){localBINARY_FILE=$1localURL=$2echo"===>Downloading:""${URL}"curl-L--retry5--retry-delay3"${URL}"|tarxz||rc=$?if[-n"$rc"];thenecho"==>Therewasanerrordownloadingthebinaryfile."return22elseecho"==>Done."fi}兩次調(diào)用download()函數(shù)的下載文件和對應(yīng)的URL調(diào)用download()函數(shù)的序號下載文件URL1"${BINARY_FILE}""/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"2"${CA_BINARY_FILE}""/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"pullBinaries()函數(shù)中用到的變量變量名取值BINARY_FILEhyperledger-fabric-${ARCH}-${VERSION}.tar.gzVERSION2.3.3CA_BINARY_FILEhyperledger-fabric-ca-${ARCH}-${CA_VERSION}.tar.gzCA_VERSION1.5.2ARCH=$(echo"$(uname-s|tr'[:upper:]''[:lower:]'|sed's/mingw64_nt.*/windows/')-$(uname-m|sed's/x86_64/amd64/g')")

(3)借助下載工具手動下載上面的兩個二進(jìn)制文件。如果必要,可以借助代理等技術(shù)手段訪問GitHub,例如搜索“GitHub文件加速”可以找到加速下載GitHub網(wǎng)站文件的方法。(4)將下載得到的兩個文件上傳至文件夾/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples內(nèi)。然后執(zhí)行如下命令,將它們解壓。cd/$GOPATH/src//hyperledger/fabric/scripts/fabric-samplestar-zxvfhyperledger-fabric-linux-amd64-2.3.3.tar.gztar-zxvfhyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz(5)啟動Fabric網(wǎng)絡(luò)cd$GOPATH/src//hyperledger/fabric/scripts/./bootstrap.sh-bFabric網(wǎng)絡(luò)所依賴的所有Docker鏡像鏡像名版本具體說明hyperledger/fabric-peer2.3.3Fabric網(wǎng)絡(luò)的Peer節(jié)點(diǎn)鏡像hyperledger/fabric-orderer2.3.3Fabric網(wǎng)絡(luò)的排序服務(wù)鏡像hyperledger/fabric-ccenv2.3.3fabric-ccenv鏡像是連碼的編譯和執(zhí)行環(huán)境hyperledger/fabric-tools2.3.3fabric-tools鏡像中包含配置和部署Fabric網(wǎng)絡(luò)的一些腳本hyperledger/fabric-baseos2.3.3fabric-baseos鏡像為Peer節(jié)點(diǎn)編譯鏈碼提供hyperledger/fabric-ca1.5.2fabric-ca鏡像是3.3管理工具和配置文件

3.3.1Fabric區(qū)塊鏈的管理工具3.3.2Fabric區(qū)塊鏈的常用配置文件

3.3.1Fabric區(qū)塊鏈的管理工具安裝Fabric區(qū)塊鏈后,在/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples/bin目錄下保存著一些管理工具Fabric區(qū)塊鏈的管理工具工具名說

明configtxgen用于對通道進(jìn)行配置的工具,可以用來生成如下3種文件。

排序節(jié)點(diǎn)的創(chuàng)世區(qū)塊。

創(chuàng)建通道時使用的通道配置交易。

更新通道時使用的通道配置交易在第5章中會結(jié)合具體場景介紹configtxgen工具的使用方法configtxlator在Fabric區(qū)塊鏈中,通道配置交易文件.tx(關(guān)于通道配置交易文件將在5.2.2節(jié)介紹)和創(chuàng)世區(qū)塊文件.block都是二進(jìn)制格式的,用戶無法直接編輯。configtxlator工具可以將這些配置文件在二進(jìn)制格式和JSON格式之間進(jìn)行轉(zhuǎn)換。在第5章中會結(jié)合具體場景介紹configtxlator工具的使用方法cryptogen用于生成證書文件。在第4章中將介紹cryptogen工具的使用方法discover服務(wù)發(fā)現(xiàn)命令行工具,用于發(fā)現(xiàn)Fabric服務(wù)的客戶端。本書不展開介紹discover的使用方法fabric-ca-clientFabricCA客戶端工具。在第4章中將介紹FabricCA客戶端的基本情況fabric-ca-serverFabricCA服務(wù)器端工具。在第4章中將介紹FabricCA服務(wù)器端的基本情況idemixgen身份混合器Idemix的配置生成器。在第4章中將介紹身份混合器Idemix的基本情況orderer排序節(jié)點(diǎn)的命令行工具,在第5章中將介紹排序節(jié)點(diǎn)的管理和配置方法osnadminOSN(OrderingServiceNode,排序服務(wù)節(jié)點(diǎn))管理工具。在第5章中將介紹osnadmin工具的使用方法peerPeer節(jié)點(diǎn)管理工具,在第5章中將介紹Peer節(jié)點(diǎn)的管理和配置方法將/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples/bin添加至全局環(huán)境變量PATH中(1)編輯/etc/profile,在文檔最后,添加如下代碼:exportPATH="/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples/bin:$PATH“(2)保存并退出后,執(zhí)行如下命令使環(huán)境變量生效。

source/etc/profile

配置完成后,在任意路徑下執(zhí)行如下命令:

configtxgen--help3.3.2Fabric區(qū)塊鏈的常用配置文件安裝Fabric區(qū)塊鏈后,在$GOPATH/src//hyperledger/fabric/sampleconfig目錄下保存著常用配置文件的模板。Fabric區(qū)塊鏈的常用配置文件配置文件說

明configtx.yaml工具configtxgen用于生成通道創(chuàng)世區(qū)塊或通道交易的配置文件。在第4章、第5章和第7章中會結(jié)合具體場景介紹configtx.yaml配置文件的使用方法core.yamlPeer節(jié)點(diǎn)的配置文件。在第5章中會介紹core.yaml的基本情況orderer.yaml排序器節(jié)點(diǎn)的配置文件。在第5章中將介紹orderer.yaml的基本情況configtx.yaml的主要功能·配置如何生成啟動排序節(jié)點(diǎn)所需的創(chuàng)世區(qū)塊orderer.block。·配置如何生成創(chuàng)建應(yīng)用通道所需的配置交易文件。·配置如何生成組織錨節(jié)點(diǎn)所需的更新配置交易文件。configtx.yaml中通常會包含下面6個配置段。(1)Organizations(2)Capabilities(3)Application(4)Orderer(5)Channel(1)Organizations定義組織結(jié)構(gòu),其中包含MSP的相關(guān)配置,可以在Profiles部分中被引用。(2)Capabilities用于定義Fabric網(wǎng)絡(luò)的能力。例如,下面的代碼定義Fabric網(wǎng)絡(luò)的通道能力支持V2.0版本。通道中的排序節(jié)點(diǎn)和Peer節(jié)點(diǎn)都必須支持此配置項,即運(yùn)行Fabric2.0及以上版本的程序,否則將于通道不兼容。Capabilities:Channel:&ChannelCapabilitiesV2_0:true(3)Application應(yīng)用通道的相關(guān)配置,包括參與應(yīng)用網(wǎng)絡(luò)的組織信息和策略配置。(4)Orderer排序節(jié)點(diǎn)的相關(guān)配置,用于定義要編碼寫入創(chuàng)世區(qū)塊或通道交易的排序節(jié)點(diǎn)參數(shù)。(5)Channel通道的相關(guān)配置,用于定義要編碼寫入創(chuàng)世區(qū)塊或通道交易的通道參數(shù)。(6)Profiles定義一系列通道配置模板,包括排序服務(wù)系統(tǒng)通道的配置模板和應(yīng)用通道的配置模板。此部分的具體內(nèi)容將在第5章結(jié)合排序節(jié)點(diǎn)進(jìn)行介紹,請參照理解。關(guān)于系統(tǒng)通道和應(yīng)用通道的概念也將在第5章中介紹。3.4Fabric測試網(wǎng)絡(luò)3.4.1測試網(wǎng)絡(luò)的特點(diǎn)3.4.2啟動和關(guān)閉測試網(wǎng)絡(luò)3.4.3創(chuàng)建通道3.4.1測試網(wǎng)絡(luò)的特點(diǎn)·測試網(wǎng)絡(luò)中只包含2個Peer組織和一個排序組織?!こ鲇诤喕紤],只能配置一個單節(jié)點(diǎn)的Raft排序服務(wù)?!榱私档蛷?fù)雜度,并未部署TLS(TransportLayerSecurity,傳輸層安全性協(xié)議)CA,所有證書均由根CA生成和管理?!な褂肈ockerCompose部署Fabric網(wǎng)絡(luò),因?yàn)樵贒ockerCompose網(wǎng)絡(luò)中節(jié)點(diǎn)是隔離的。測試網(wǎng)絡(luò)不能與其他運(yùn)行的Fabric節(jié)點(diǎn)連接。在$GOPATH/src//hyperledger/fabric/scripts/fabric-samples目錄下有一個名為test-network的子文件夾,其中包含F(xiàn)abric測試網(wǎng)絡(luò)。3.4.2啟動和關(guān)閉測試網(wǎng)絡(luò)1.以默認(rèn)方式啟動測試網(wǎng)絡(luò)2.關(guān)閉測試網(wǎng)絡(luò)3.啟動測試網(wǎng)絡(luò)的同時啟用CA1.以默認(rèn)方式啟動測試網(wǎng)絡(luò)cd/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples/test-network./network.shup啟動過程的具體描述(1)使用cryptogen工具為組織Org1、Org2和Orderer生成證書。(2)為Peer節(jié)點(diǎn)和排序節(jié)點(diǎn)創(chuàng)建用于存儲數(shù)據(jù)的Docker卷(volume)。(3)創(chuàng)建組織Org1的Peer節(jié)點(diǎn)容器。(4)創(chuàng)建組織Org2的Peer節(jié)點(diǎn)容器。(5)創(chuàng)建排序節(jié)點(diǎn)容器。與測試網(wǎng)絡(luò)有關(guān)的Docker容器名稱鏡像說明cliperledger/fabric-tools:latest客戶端工具容器hyperledger/fabric-peer:latest組織org1的Peer節(jié)點(diǎn)容器hyperledger/fabric-peer:latest組織org2的Peer節(jié)點(diǎn)容器hyperledger/fabric-orderer:latest排序節(jié)點(diǎn)容器2.關(guān)閉測試網(wǎng)絡(luò)cd/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples/test-network./network.shdown關(guān)閉測試網(wǎng)絡(luò)的過程(1)關(guān)閉網(wǎng)絡(luò)。(2)停止排序節(jié)點(diǎn)。(3)停止組織org2的Peer節(jié)點(diǎn)。(4)停止組織org1的Peer節(jié)點(diǎn)。(5)移除網(wǎng)絡(luò)fabric_test。(6)移除為Peer節(jié)點(diǎn)和排序節(jié)點(diǎn)創(chuàng)建的用于存儲數(shù)據(jù)的Docker卷。(7)移除與測試網(wǎng)絡(luò)有關(guān)的Docker容器。(8)移除與測試網(wǎng)絡(luò)有關(guān)的鏈碼Docker鏡像。3.啟動測試網(wǎng)絡(luò)的同時啟用CA如果已經(jīng)啟動測試網(wǎng)絡(luò),則將其關(guān)閉。./network.shdown然后執(zhí)行如下命令,就可以在啟動測試網(wǎng)絡(luò)的同時啟用內(nèi)置的CA服務(wù)。./network.shup-ca在啟動測試網(wǎng)絡(luò)的同時創(chuàng)建了下面3個CA(1)組織Org1的CA(ca_org1)。(2)組織Org1的CA(ca_org2)。(3)排序節(jié)點(diǎn)的CA(ca_orderer)。檢查Org1管理員用戶的MSP文件夾treeorganizations/peerOrganizations//users/Admin@/MSP文件夾下的子文件夾作用·cacerts:用于存放根CA服務(wù)器的證書?!eystore:用于存放節(jié)點(diǎn)或者賬號的私鑰?!igncerts:用于存放節(jié)點(diǎn)或者賬號的X.509證書。3.4.3創(chuàng)建通道cd/$GOPATH/src//hyperledger/fabric/scripts/fabric-samples/test-network./network.shcreateChannel創(chuàng)建通道的具體過程(1)如果網(wǎng)絡(luò)沒有啟動,命令會自動啟動測試網(wǎng)絡(luò)。(2)創(chuàng)建通道的創(chuàng)世區(qū)塊mychannel.block。(3)創(chuàng)建通道m(xù)ychannel。因?yàn)樵趫?zhí)行./network.shcreateChannel命令時沒有指定通道名字,所以使用默認(rèn)的名字mychannel。(4)將組織Org1的Peer節(jié)點(diǎn)加入到通道中。(5)將組織Org2的Peer節(jié)點(diǎn)加入到通道中。(6)設(shè)置組織Org1的錨節(jié)點(diǎn)。(7)初始化背書節(jié)點(diǎn)和排序節(jié)點(diǎn),將它們加入通道中。(8)設(shè)置組織Org1在通道m(xù)ychannel上的錨節(jié)點(diǎn)。(9)設(shè)置組織Org2在通道m(xù)ychannel上的錨節(jié)點(diǎn)。執(zhí)行下面的命令可以創(chuàng)建通道channel1./network.shcreateChannel-cchannel1Go語言區(qū)塊鏈開發(fā)實(shí)戰(zhàn)授課教師:職務(wù):第4章Fabric區(qū)塊鏈的安全機(jī)制學(xué)前提示Fabric區(qū)塊鏈?zhǔn)怯啥鄠€組織共同參與的聯(lián)盟鏈。聯(lián)盟鏈中的各組織共享它們的數(shù)據(jù),因此數(shù)據(jù)安全和隱私保護(hù)尤為重要。在構(gòu)建Fabric網(wǎng)絡(luò)之前,相關(guān)各組織需要協(xié)商并約定各自所扮演的角色、承擔(dān)的責(zé)任和擁有的權(quán)限。本章介紹Fabric區(qū)塊鏈的安全機(jī)制。知識要點(diǎn)4.1背景知識4.2FabricCA4.3安全策略4.4成員服務(wù)提供者(MSP)4.5組織管理4.1背景知識4.1.1許可鏈的概念4.1.2安全機(jī)制的重要意義4.1.3身份標(biāo)識4.1.4身份混合器Idemix4.1.1許可鏈的概念與比特幣和以太坊等公有鏈平臺不同,F(xiàn)abric區(qū)塊鏈既是聯(lián)盟鏈也是許可鏈,并不是所有人都可以隨意加入Fabric區(qū)塊鏈網(wǎng)絡(luò)。每個人都可以參與公有鏈,而且每個參與者都可以是匿名的。在這種情況下,除了區(qū)塊鏈的狀態(tài)外,沒有什么是可信的。在許可鏈中,參與者可以通過各自的證書了解彼此是誰;另外,參與者的所有操作都會被記錄在區(qū)塊中。包括提交交易、修改配置文件或部署智能合約等。Fabric是模塊化的、可擴(kuò)展的開源許可鏈系統(tǒng),也是第一個使用標(biāo)準(zhǔn)的通用編程語言開發(fā)的、不依賴任何原生數(shù)字貨幣的、用于運(yùn)行分布式應(yīng)用程序的區(qū)塊鏈系統(tǒng)。其他的區(qū)塊鏈平臺通常都需要滿足如下兩個條件。(1)使用特定的專用編程語言開發(fā)智能合約。例如以太坊平臺使用Solidity語言開發(fā)智能合約。除了以太坊平臺的智能合約,Solidity語言并不能用于開發(fā)其他應(yīng)用。(2)系統(tǒng)的運(yùn)行依賴特定的數(shù)字貨幣。例如,以太坊平臺依賴以太幣來支付使用平臺的費(fèi)用。部署和調(diào)用智能合約都需要支付費(fèi)用(以太坊平臺稱之為Gas)。為了解決企業(yè)級區(qū)塊鏈應(yīng)用對隱私保護(hù)和彼此互信的需求,不同的區(qū)塊鏈平臺嘗試了各種方法,每種方法各有利弊。這里列舉兩個解決方案(1)對數(shù)據(jù)進(jìn)行加密存儲可以保證商業(yè)數(shù)據(jù)的隱私。但是,在使用PoW共識算法的公有鏈中,加密數(shù)據(jù)存儲在每一個節(jié)點(diǎn)中。只要有足夠的時間和算力,就可能會破解加密數(shù)據(jù)。而這在企業(yè)級應(yīng)用中是不可接受的。(2)使用ZKP(Zeroknowledgeproofs,零知識證明)算法。ZKP是解決隱私保護(hù)與彼此互信的經(jīng)典算法。指不需要泄露相關(guān)信息,就可以證明自己是某些權(quán)益的合法所有者。零知識證明存在于證明者和驗(yàn)證者之間,驗(yàn)證者隨機(jī)地向證明者提出問題,如果證明者都可以給出正確答案,則說明他擁有主張的權(quán)益。零知識證明需要耗費(fèi)時間和算力;而且也有可能誤判(也就是冒牌的證明者每次都蒙對了答案),盡管這只是小概率事件??梢酝ㄟ^調(diào)整算法降低誤判的概率,但是這就犧牲了區(qū)塊鏈網(wǎng)絡(luò)的性能。Fabric區(qū)塊鏈作為許可鏈平臺,F(xiàn)abric區(qū)塊鏈通過通道體系結(jié)構(gòu)建立了互信機(jī)制。Fabric網(wǎng)絡(luò)可以在網(wǎng)絡(luò)參與者的子集之間建立通道,可以對指定的參與者授權(quán)允許其查看通道中的交易。只有通道的參與者才能訪問通道中的智能合約和交易數(shù)據(jù),這既保證了數(shù)據(jù)隱私,也實(shí)現(xiàn)了彼此間的互信。Fabric網(wǎng)絡(luò)還支持私有數(shù)據(jù)的概念和零知識證明算法。關(guān)于私有數(shù)據(jù)將在第8章中介紹。零知識證明算法會在4.1.4節(jié)中結(jié)合身份混合器Idemix做簡單的介紹。4.1.2安全機(jī)制的重要意義在國內(nèi)的所有企業(yè)中,中小企業(yè)的數(shù)量占比約為99%,提供了超過80%的就業(yè)機(jī)會,是國民經(jīng)濟(jì)的重要組成部分。但是由于缺乏足夠的抵押物以及信息不透明,中小企業(yè)很難得到金融機(jī)構(gòu)充分的信貸支持。中小企業(yè)需要借助供應(yīng)鏈金融服務(wù)來解決財務(wù)困難。提供在線金融服務(wù)需要滿足以下兩個條件(1)防止企業(yè)的惡意欺騙,或者來自第三方的惡意攻擊。(2)為了提供金融服務(wù),金融機(jī)構(gòu)需要得到必要的中小企業(yè)商業(yè)信息。為了保障企業(yè)的商業(yè)秘密,在分享企業(yè)信息的同時,應(yīng)該注重保護(hù)企業(yè)隱私數(shù)據(jù)。區(qū)塊鏈解決方案一方面,可以通過區(qū)塊鏈技術(shù)保障交易數(shù)據(jù)不可篡改,所有操作可追蹤,從而降低信用風(fēng)險。另一方面,區(qū)塊鏈技術(shù)支持多種數(shù)據(jù)加密的算法,可以有效保護(hù)數(shù)據(jù)安全。以HyperledgerFabric為代表的聯(lián)盟鏈?zhǔn)怯陕?lián)盟企業(yè)構(gòu)成的區(qū)塊鏈網(wǎng)絡(luò)。網(wǎng)絡(luò)成員彼此了解,每個成員的權(quán)限由聯(lián)盟共同制定,成員企業(yè)只與經(jīng)過認(rèn)可的機(jī)構(gòu)共享數(shù)據(jù),聯(lián)盟之外的第三方無權(quán)訪問網(wǎng)絡(luò)。可以有效地保護(hù)數(shù)據(jù)安全和數(shù)據(jù)隱私。為供應(yīng)鏈金融服務(wù)的落地實(shí)施奠定了技術(shù)基礎(chǔ)。4.1.3身份標(biāo)識Fabric網(wǎng)絡(luò)中包含Peer節(jié)點(diǎn)、排序節(jié)點(diǎn)、客戶端應(yīng)用和管理員等角色,這些角色都有一個身份標(biāo)識(identity)。身份標(biāo)識的存在形式是X.509數(shù)字證書。身份標(biāo)識非常重要,因?yàn)樗軌驔Q定其所有者對區(qū)塊鏈網(wǎng)絡(luò)中資源的訪問權(quán)限。身份標(biāo)識中包含一些附加的屬性,例如所屬組織、部門和角色等。Fabric網(wǎng)絡(luò)可以根據(jù)這些屬性決定其所有者的權(quán)限。PKI模型的工作原理在PKI模型中,包含如下幾個關(guān)鍵元素·數(shù)字證書。·公鑰和私鑰?!?/p>

CA?!?/p>

CRL。(1)數(shù)字證書數(shù)字證書是包含與持有者有關(guān)的一系列屬性的文檔,大多數(shù)類型的數(shù)字證書都兼容X.509標(biāo)準(zhǔn)。X.509標(biāo)準(zhǔn)定義了在結(jié)構(gòu)體中對成員的標(biāo)識細(xì)節(jié)進(jìn)行編碼的規(guī)范。X.509證書中包含的基本字段字

段說明Version證書的版本號SerialNumber證書的唯一標(biāo)識符,由CA分配的用于標(biāo)識證書的一個整數(shù)Signature證書所用的數(shù)字簽名算法,例如SHA-1或RSAIssuer證書頒發(fā)者的可識別名Validity證書有效期的時間段Subject證書持有人的基本信息,其中包含一組屬性字段。例如:C=CN,ST=北京,L=海淀,O=XXX公司,OU=開發(fā)部,CN=小明,UID=xiaomingSubjectPublicKeyInfo主體的公鑰IssuerUniqueIdentifier證書頒發(fā)者的唯一標(biāo)識符,可選項SubjectUniqueIdentifier證書擁有者的唯一標(biāo)識符,可選項Extensions證書擴(kuò)展部分(2)公鑰和私鑰在1.1.3節(jié)講解非對稱加密算法時,介紹了公鑰和私鑰的概念。請參照理解。(3)CAFabric網(wǎng)絡(luò)中的組件或節(jié)點(diǎn)都有網(wǎng)絡(luò)信任的CA所授予的數(shù)字證書。證書可以廣泛傳播,因?yàn)槠渲胁⒉话渌姓叩乃借€,也沒有CA的私鑰。CA也有自己的證書,并且可以廣泛應(yīng)用。從CA獲得證書的用戶可以驗(yàn)

溫馨提示

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

評論

0/150

提交評論