《區(qū)塊鏈技術(shù)概述》_第1頁
《區(qū)塊鏈技術(shù)概述》_第2頁
《區(qū)塊鏈技術(shù)概述》_第3頁
《區(qū)塊鏈技術(shù)概述》_第4頁
《區(qū)塊鏈技術(shù)概述》_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

區(qū)塊鏈技術(shù)概述

2021年五月1整理ppt12區(qū)塊鏈技術(shù)介紹

OBC組網(wǎng)與智能合約3智能合約的開發(fā)與例如2整理ppt〞繼互聯(lián)網(wǎng)后的又一大變革時代到來〞、“互聯(lián)網(wǎng)金融的終極形式〞、“價值互聯(lián)網(wǎng)的開端〞、“RecordofThings記錄一切〞……

區(qū)塊鏈在短短時間內(nèi)獲得了巨大的漣漪效應(yīng),IBM在2021年2月開放了OpenBlockChain技術(shù)并奉獻(xiàn)給了Linux社區(qū),引起了業(yè)界巨大轟動。那么區(qū)塊鏈到底是怎樣的一項顛覆性技術(shù)?其特點(diǎn)是什么?IBM區(qū)塊鏈平臺的特點(diǎn)是什么?未來會如何演變?區(qū)塊鏈應(yīng)用與已有應(yīng)用的關(guān)系是什么?本片將對這些問題逐一解鏈并進(jìn)行探討。序3整理ppt區(qū)塊鏈介紹區(qū)塊鏈?zhǔn)且环N共享賬本技術(shù),商業(yè)網(wǎng)絡(luò)中的任何參與方都可以查看交易系統(tǒng)記錄〔賬本〕什么是區(qū)塊鏈?4整理ppt區(qū)塊鏈?zhǔn)侵伪忍貛诺牡讓雨P(guān)鍵技術(shù)區(qū)塊鏈技術(shù)的分類?公有鏈Pow/Pos/DPos聯(lián)盟鏈OBC/Etherenumpbft共識私有鏈5整理ppt是不受監(jiān)管的,抗審查的影子貨幣區(qū)塊鏈確保“類現(xiàn)金〞的貨幣流通唯一的,不可篡改確定的是區(qū)塊鏈?zhǔn)讉€應(yīng)用區(qū)塊鏈不是區(qū)塊鏈?zhǔn)侵伪忍貛诺牡讓雨P(guān)鍵技術(shù)什么是區(qū)塊鏈?6整理ppt更進(jìn)一步——什么是〔企業(yè)級〕區(qū)塊鏈智能合約隱私保護(hù)共享賬本共識保證共享賬本適當(dāng)?shù)目梢娦?;保證交易是真實(shí)和可驗證的交易條款和交易狀態(tài)內(nèi)嵌在區(qū)塊鏈系統(tǒng)中,驅(qū)動交易執(zhí)行所有參與者一致同意才意味著交易在網(wǎng)絡(luò)中通過驗證跨商業(yè)網(wǎng)絡(luò)共享的,不可更改的,分布式交易記錄系統(tǒng)更廣泛的參與,更低的本錢,更高的效率什么是區(qū)塊鏈? 區(qū)塊鏈?zhǔn)且环N分布式多節(jié)點(diǎn)“共識〞實(shí)現(xiàn)技術(shù),通過區(qū)塊鏈可以完整、“不可篡改〞地記錄價值轉(zhuǎn)移〔交易〕的全過程。區(qū)塊鏈的形成按照時間先后順序進(jìn)行連接,每一個參與共識形成的節(jié)點(diǎn)都有一份區(qū)塊鏈信息的完整副本。7整理ppt比特幣帳本什么是區(qū)塊鏈?8整理pptOBC帳本什么是區(qū)塊鏈?9整理ppt共享賬本記錄商業(yè)網(wǎng)絡(luò)中的所有交易在參與者之間共享參與者通過同步獲取自己的備份授權(quán)許可的,參與者只能看到適當(dāng)?shù)慕灰子涗浶畔⒐蚕淼挠涗浵到y(tǒng)什么是區(qū)塊鏈?10整理ppt智能合約合約中的商業(yè)規(guī)那么內(nèi)嵌在區(qū)塊鏈系統(tǒng)中,在交易時被執(zhí)行可驗證的、被簽署的編碼在編程語言中案例: –在公司債權(quán)發(fā)生轉(zhuǎn)移時執(zhí)行定義的合同條款什么是區(qū)塊鏈?11整理ppt隱私保護(hù)賬本是共享的,但是參與者要求其具有隱私保護(hù)參與者需要: –交易信息需要保密 –身份不和交易綁定交易必須是真實(shí)的密碼學(xué)是這些步驟的核心什么是區(qū)塊鏈?12整理ppt共識共識是交易驗證與確認(rèn)的過程當(dāng)參與方是匿名時 –交易確認(rèn)代價高昂 –的挖礦過程為匿名者提供驗證,但需巨大計算本錢〔工作證明〕當(dāng)參與者都是且可信時 –交易確認(rèn)的本錢降低多種替代方案 –權(quán)益證明,欺詐性交易產(chǎn)生時需要驗證〔如債券交易〕 –多個簽名〔如5個參與者中3人的同意〕企業(yè)級區(qū)塊鏈需要“可插拔的〞共識什么是區(qū)塊鏈?13整理ppt行業(yè)采用區(qū)塊鏈的好處減少本錢及復(fù)雜度提高可發(fā)現(xiàn)性可信的記錄保存共享的可信流程為什么與業(yè)務(wù)相關(guān)?14整理ppt區(qū)塊鏈——并非萬能不適用場景1.高性能〔毫秒級〕交易2.小型組織〔無商業(yè)網(wǎng)絡(luò)〕3.尋找數(shù)據(jù)庫的替代方案4.尋找消息傳遞的解決方案5.尋找交易處理的替代方案為什么與業(yè)務(wù)相關(guān)?15整理ppt區(qū)塊鏈技術(shù)平臺比照16整理ppt第一,跨組織協(xié)作。在區(qū)塊鏈信任機(jī)制中,所有成員參與對信任價值的監(jiān)督、控制和審計,對地址、鏈、公鑰、私鑰、摘要等幾乎所有數(shù)據(jù)記錄的要素,進(jìn)行全生命周期的協(xié)作密碼保護(hù),而且是全球、隨機(jī)的。一個聯(lián)盟鏈,相當(dāng)于一臺全球超級密碼、交換機(jī)、密鑰簽名效勞器和密碼本的總和,信用連續(xù)。第二,永不宕機(jī)。因為成員的動態(tài)運(yùn)算機(jī)制,所有成員節(jié)點(diǎn),進(jìn)行實(shí)時同步,無法實(shí)現(xiàn)局部控制,全球節(jié)點(diǎn)的隨機(jī)分布和相應(yīng)在運(yùn)算時鐘和動態(tài)時間戳的控制下,永遠(yuǎn)不停機(jī),信用連續(xù)。第三,成員監(jiān)管。區(qū)塊鏈強(qiáng)信任的技術(shù)特點(diǎn),來自其節(jié)點(diǎn)成員無中心的平安職責(zé),成員局部的協(xié)作綜合實(shí)現(xiàn)了體系平安的監(jiān)管全部,融監(jiān)管與過程之中,實(shí)現(xiàn)了系統(tǒng)學(xué)中平安的正反響機(jī)制,在目前的計算條件下,尚無法通過跨越動態(tài)時間戳的可靠超越,信用連續(xù)。為何要用區(qū)塊鏈—強(qiáng)信任機(jī)制解決中心化系統(tǒng)中信用不連續(xù)問題17整理ppt區(qū)塊鏈運(yùn)營比照18整理pptIBM開放區(qū)塊鏈與Linux社區(qū)——開放持續(xù)投入代碼運(yùn)行環(huán)境賬簿數(shù)據(jù)結(jié)構(gòu)模塊化〔可插式〕共識框架模塊化〔可插式〕身份效勞P2P網(wǎng)絡(luò)技術(shù)升級包SDK〔API〕共識算法庫〔插入模塊〕成員管理策略區(qū)塊鏈網(wǎng)關(guān)開發(fā)工具管理控制臺區(qū)塊鏈行業(yè)應(yīng)用根底局部共享賬簿〔SharedLedger〕增值局部〔模塊、工具、封裝〕應(yīng)用局部工程核心范圍內(nèi)核心APIIBM社區(qū)奉獻(xiàn)Hyperledger工程IBM在Blockchain上持續(xù)投入,致力于行業(yè)應(yīng)用是Linux開源社區(qū)Hyperledger的主要奉獻(xiàn)方,致力于協(xié)同其他公司共同研發(fā),公布OpenLedger標(biāo)準(zhǔn)〔規(guī)格說明書〕,創(chuàng)立基于Linux的開源共享賬簿〔比Bitcoin更適合行業(yè)應(yīng)用〕推動區(qū)塊鏈技術(shù)在行業(yè)中的應(yīng)用〔行業(yè)區(qū)塊鏈〕Blockchain已經(jīng)作為一種實(shí)驗性〔網(wǎng)絡(luò)〕效勞在Bluemix上推出基于LinuxOne的開放計算平臺對Blockchain的支持……IBM區(qū)塊鏈19整理pptIBM開放區(qū)塊鏈:奉獻(xiàn)給Linux社區(qū)的架構(gòu)及代碼Community+CodeMEMBERSHIP包括OBC參與方的身份識別,隱私,可審計性。BLOCKCHAIN|TRANSACTIONS經(jīng)過共識過程進(jìn)行分布式交易賬本處理。CHAIN-CODE“智能合約〞,提供在區(qū)塊鏈上運(yùn)行業(yè)務(wù)邏輯的能力。APIs,SDKs,CLI為開發(fā)人員提供以可編程方式控制區(qū)塊鏈網(wǎng)絡(luò)的能力。20整理pptIBM開放區(qū)塊鏈名詞解釋Transaction交易。賬頁中的一筆記錄,用于確認(rèn)一個事實(shí),執(zhí)行一段代碼〔chaincode〕Ledger賬薄〔賬冊〕。由首尾相連的一組區(qū)塊〔block,有時也稱為一個賬頁〕構(gòu)成,記錄交易和區(qū)塊世界的狀態(tài)WorldState區(qū)塊世界的狀態(tài)。由一組變量組成,指明交易的執(zhí)行結(jié)果Chaincode交易中記錄的一段代碼,其執(zhí)行結(jié)果會改變區(qū)塊世界的狀態(tài)〔Worldstate〕ValidatingPeer驗證節(jié)點(diǎn)。OBC區(qū)域鏈網(wǎng)絡(luò)中的全功能節(jié)點(diǎn),負(fù)責(zé)驗證交易、記錄賬薄、達(dá)成共識Non-validatingPeer非驗證節(jié)點(diǎn)。OBC區(qū)域鏈網(wǎng)絡(luò)中的半功能節(jié)點(diǎn),負(fù)責(zé)驗證交易,但不執(zhí)行交易,也不記錄賬薄,通常用于代理ValidatingPeer,提供RESTservice轉(zhuǎn)發(fā)功能Permissioned許可。只接受成員接入,不接受匿名接入Privacy隱私。OBC中任何成員都能發(fā)起交易,但只有相關(guān)方才能知道,其它無關(guān)節(jié)點(diǎn)無法從交易回溯到交易方Confidentiality保密。OBC中只有交易相關(guān)方可以看到交易內(nèi)容,其它無關(guān)節(jié)點(diǎn)只能驗證交易的真實(shí)性Auditability審計。如果把審計方參加OBC交易,那么它可以看到交易,從而審計是否合規(guī)21整理ppt帳本結(jié)構(gòu)示意22整理pptOBC角色劃分與工作內(nèi)容成員效勞〔MemberServices〕注冊〔Registration〕身份管理〔IdentityManagement〕可審計〔Auditibility〕驗證節(jié)點(diǎn)〔ValidatingPeer〕進(jìn)行共識〔Consensus〕運(yùn)行交易〔Transaction〕維護(hù)賬本〔Ledger〕發(fā)出事件〔Event〕非驗證節(jié)點(diǎn)〔Non-ValidatingPeer〕維護(hù)節(jié)點(diǎn)間的平安上下文〔SecureContext〕代表客戶向成員效勞或驗證節(jié)點(diǎn)請求效勞向應(yīng)用交付事件〔Event〕處理API請求應(yīng)用〔Application〕認(rèn)證客戶把客戶映射到平安上下文〔SecureContext〕調(diào)用RESTAPI用戶〔Client〕登錄與交易23整理ppt網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)整個OBC網(wǎng)絡(luò)中含有兩種節(jié)點(diǎn),驗證節(jié)點(diǎn)〔ValidatingPeer〕和非驗證節(jié)點(diǎn)〔Non-ValidationPeer〕。前者是全功能節(jié)點(diǎn),構(gòu)成全連通拓?fù)浣Y(jié)構(gòu),后者是代理節(jié)點(diǎn),通常掛接在相鄰驗證節(jié)點(diǎn)上應(yīng)用程序可以連接在驗證節(jié)點(diǎn),也可以連接在非驗證節(jié)點(diǎn)在OBC網(wǎng)絡(luò)中需要有一個密鑰管理結(jié)節(jié),考慮到PBFT算法的3f+1共識機(jī)制,典型的容錯〔允許一個節(jié)點(diǎn)故障〕環(huán)境需要有4個ValidationPeer節(jié)點(diǎn)成員效勞MemberServices用戶Client用戶Client24整理ppt單節(jié)點(diǎn)和多節(jié)點(diǎn)網(wǎng)絡(luò)假設(shè)OBC網(wǎng)絡(luò)中只有一個VP節(jié)點(diǎn)〔極端簡化〕,那么應(yīng)用程序可以直接與該節(jié)點(diǎn)連接,執(zhí)行其上的Chaincode代碼,這時VP節(jié)點(diǎn)只需要記賬,不需要共識假設(shè)OBC網(wǎng)絡(luò)中有多個VP節(jié)點(diǎn),那么應(yīng)用程序可以通過NVP節(jié)點(diǎn)〔NVP與應(yīng)用程序可以一對多〕間接訪問VP〔NVP與VP之間多對一〕,這時VP節(jié)點(diǎn)需要驗證交易、運(yùn)行代碼、記錄賬薄、達(dá)成共識25整理ppt商業(yè)票據(jù)的Blockchain應(yīng)用-星形架構(gòu)26整理pptIBM開放區(qū)塊鏈參考架構(gòu)概覽〔模塊與效勞〕27整理ppt成員管理〔Membership〕成員管理提供會員注冊、身份保護(hù)、內(nèi)容保密、交易審計功能OBC所有成員首先,通過RegistrationAuthority(RA)注冊獲得許可然后,通過EnrollmentCertificateAuthority(ECA)獲得注冊平安證書(ECert),第三步〔可選〕,通過TransactionCertificateAuthority(TCA)獲得交易平安證書(TCert)使用二者之一簽名發(fā)起交易請求與公有鏈不同〔所有參與方不需要身份認(rèn)證,可直接進(jìn)行交易〕28整理ppt成員管理模型29整理ppt業(yè)務(wù)網(wǎng)絡(luò)動態(tài)組建例如:第一個節(jié)點(diǎn)OBC節(jié)點(diǎn)相關(guān)配置位于github/openblockchain/obc-peer/openchain.yaml在配置文件的peer小節(jié)中,validator_enabled為true表示節(jié)點(diǎn)是驗證節(jié)點(diǎn),否那么是非驗證節(jié)點(diǎn)discovery_rootnode在啟動時使用,當(dāng)這個參數(shù)被設(shè)置時節(jié)點(diǎn)會使用discoveryprotocal查找其他節(jié)點(diǎn)。這個參數(shù)是網(wǎng)絡(luò)上另外一個節(jié)點(diǎn)的IP,這個節(jié)點(diǎn)作為網(wǎng)絡(luò)上所有節(jié)點(diǎn)進(jìn)行discover的起始點(diǎn)。rest_enabled說明節(jié)點(diǎn)是否接受REST請求,對于生產(chǎn)環(huán)境一般把驗證節(jié)點(diǎn)設(shè)置為false,只讓非驗證節(jié)點(diǎn)接受來自應(yīng)用的REST請求第一個節(jié)點(diǎn)驗證節(jié)點(diǎn)根節(jié)點(diǎn)IP:validator_enabled:truediscovery_rootnode:rest_enabled:false30整理ppt業(yè)務(wù)網(wǎng)絡(luò)動態(tài)組建例如:第二個節(jié)點(diǎn)第二個節(jié)點(diǎn)向根節(jié)點(diǎn)發(fā)送消息DISC_HELLO,含有自己區(qū)塊鏈的高度blockNumber和PeerEndpoint。如果根節(jié)點(diǎn)應(yīng)答的DISC_HELLO消息中的區(qū)塊鏈高度高于第二個節(jié)點(diǎn)當(dāng)前持有的,第二個節(jié)點(diǎn)立刻發(fā)起synchronizationprotocol以同步賬本的最新狀態(tài)此后第二個節(jié)點(diǎn)每5秒鐘向所有的節(jié)點(diǎn)〔目前只知道第一個節(jié)點(diǎn)〕發(fā)送DISC_GET_PEERS消息獲得參加網(wǎng)絡(luò)的其它節(jié)點(diǎn)第一個節(jié)點(diǎn)收到DISC_GET_PEERS消息后,回復(fù)包含了PeerEndpoint數(shù)組的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第二個節(jié)點(diǎn)驗證節(jié)點(diǎn)第一個節(jié)點(diǎn)驗證節(jié)點(diǎn)根節(jié)點(diǎn)31整理ppt業(yè)務(wù)網(wǎng)絡(luò)動態(tài)組建例如:第三個節(jié)點(diǎn)第三個節(jié)點(diǎn)向根節(jié)點(diǎn)發(fā)送消息DISC_HELLO,含有自己區(qū)塊鏈的高度blockNumber和PeerEndpoint。如果根節(jié)點(diǎn)應(yīng)答的DISC_HELLO消息中的區(qū)塊鏈高度高于第三個節(jié)點(diǎn)當(dāng)前持有的,第三個節(jié)點(diǎn)立刻發(fā)起synchronizationprotocol以同步賬本的最新狀態(tài),雖然不執(zhí)行交易,但是非驗證節(jié)點(diǎn)維護(hù)一個最新的賬本副本此后第三個節(jié)點(diǎn)每60秒鐘向所有的節(jié)點(diǎn)〔第一、二個節(jié)點(diǎn)〕發(fā)送DISC_GET_PEERS消息獲得參加網(wǎng)絡(luò)的其它節(jié)點(diǎn)〔考慮到發(fā)送間隔,第二個節(jié)點(diǎn)應(yīng)該先于第三個節(jié)點(diǎn)發(fā)現(xiàn)對方〕第一、二個節(jié)點(diǎn)收到DISC_GET_PEERS消息后,回復(fù)包含了PeerEndpoint數(shù)組的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:falsediscovery_rootnode:discovery_period:60srest_enabled:true第二個節(jié)點(diǎn)驗證節(jié)點(diǎn)第一個節(jié)點(diǎn)驗證節(jié)點(diǎn)IP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第三個節(jié)點(diǎn)非驗證節(jié)點(diǎn)32整理ppt區(qū)塊〔Block〕結(jié)構(gòu)messageBlock{version=1;tobuf.Timestamptimestamp=2;bytestransactionsHash=3;bytesstateHash=4;bytespreviousBlockHash=5;bytesconsensusMetadata=6;NonHashDatanonHashData=7;}messageBlockTransactions{repeatedTransactiontransactions=1;}messageNonHashData{tobuf.TimestamplocalLedgerCommitTimestamp=1;repeatedTransactionResulttransactionResults=2;}messageTransactionResult{stringuuid=1; //交易IDbytesresult=2; //交易執(zhí)行結(jié)果uint32errorCode=3; //錯誤碼stringerror=4; //錯誤說明}33整理pptPBFT原理介紹:核心算法〔也叫做3-phasecommit〕client把一個request播送到所有的replica,確保primary收到請求<PRE-PREPARE>Primary為這個request分配一個順序號并播送到其他replica;那些replica檢查消息的有效性,同意那個順序號且確認(rèn)了message和view;如果replica有了m和有效的pre-pare,就進(jìn)行下一步<PREPARE>每個replica發(fā)送一個PREPARE消息給其他的replica,所有收到2f個prepare的replica進(jìn)入commit<COMMIT>每個replica播送commit消息,一個replica收到2f個commit消息后,就執(zhí)行(Execute)序號小于n的所有request<REPLY>replica直接返回結(jié)果給client,client等待f+1個相同的結(jié)果。周期性地,replica會做checkpoint來清理log在內(nèi)存中的prepared/committedmessageReplica通過超時機(jī)制來監(jiān)控primary的狀態(tài),并適時觸發(fā)viewchangeprotocol來選舉新的primary。v:viewnumber;n:sequencenumber;D(m):

Digestofrequestmessagem;代碼實(shí)現(xiàn):/openchain/consensus/obcpbft/pbft-core.go;其中:innerStack=innerCPI34整理ppt賬鏈代碼〔Chaincode〕OBC中的智能合約,是通過賬鏈代碼〔Chaincode〕來實(shí)現(xiàn)。業(yè)務(wù)邏輯〔Logic〕=賬鏈代碼〔Chaincode〕=智能合約〔Smartcontract〕它嵌在交易中,所有驗證節(jié)點(diǎn)在確認(rèn)交易時都必須執(zhí)行它。執(zhí)行環(huán)境是一個定制化的平安的“沙箱〞〔Docker〕目前支持Go,將來支持Java,Node.js35整理ppt賬鏈代碼相關(guān)概念賬鏈代碼的分類:公開的賬鏈代碼:通過公開的交易來部署的賬鏈代碼,這些代碼能被網(wǎng)絡(luò)中任意成員調(diào)用。機(jī)密的賬鏈代碼:通過機(jī)密的交易來部署的賬鏈代碼,這些代碼只能被網(wǎng)絡(luò)中指定的做驗證的成員調(diào)用。訪問受控的賬鏈代碼:通過內(nèi)置令牌的機(jī)密交易來部署的賬鏈代碼,這些代碼能被網(wǎng)絡(luò)中持有對應(yīng)令牌的成員調(diào)用〔即使這些成員不是校驗者〕。賬鏈代碼的操作類型:部署賬鏈代碼:通過交易部署新的賬鏈代碼。調(diào)用賬鏈代碼:通過交易調(diào)用已經(jīng)部署的賬鏈代碼,也可以在賬鏈代碼中調(diào)用其他的賬鏈代碼。調(diào)用操作可以修改賬鏈代碼中的變量信息。查詢賬鏈代碼:通過交易查詢已經(jīng)部署的賬鏈代碼,也可以在賬鏈代碼中查詢其他賬鏈代碼。查詢操作不能修改賬鏈代碼中的變量信息。賬鏈代碼的數(shù)據(jù)存儲賬鏈代碼中需要持久化的狀態(tài)〔State〕,可以存儲在世界狀態(tài)〔WorldState〕中。36整理pptVM&ChaincodetypeVMinterface{build(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool,readerio.Reader)error //建立chaincodeimagestart(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool)error //啟動chaincodestop(ctxtcontext.Context,idstring,timeoutuint,dontkillbool,dontremovebool)error //停止chaincode}typeChaincodeinterface{Invoke(stub*ChaincodeStub,functionstring,args[]string)(error) //調(diào)用chaincodeQuery(stub*ChaincodeStub,functionstring,args[]string)([]byte,error) //查詢chaincode}messageChaincodeMessage{enumType{UNDEFINED=0;REGISTER=1;REGISTERED=2;INIT=3;READY=4;TRANSACTION=5;COMPLETED=6;ERROR=7;GET_STATE=8;PUT_STATE=9;DEL_STATE=10;INVOKE_CHAINCODE=11;INVOKE_QUERY=12;RESPONSE=13;QUERY=14;QUERY_COMPLETED=15;QUERY_ERROR=16;RANGE_QUERY_STATE=17;}Typetype=1; //消息類型tobuf.Timestamptimestamp=2;bytespayload=3; //消息體stringuuid=4; //消息ID}首先,ValidatingPeer在執(zhí)行Deploy交易時,OBC框架會自動創(chuàng)立VM〔Docker〕,為其加載〔build〕賬鏈代碼〔Chaincode〕,根據(jù)情況啟動〔start〕或停止〔stop〕賬鏈代碼接著,Chaincodeshim會與ValidatingPeer建立反向連接,接收ChaincodeMessage指令37整理pptChaincode操作38整理pptState操作messagePutStateInfo{ //存數(shù)據(jù)stringkey=1;bytesvalue=2;}messageRangeQueryState{ //批量取數(shù)據(jù)stringstartKey=1; //開始key〔含〕,字母順序stringendKey=2; //結(jié)束key〔含〕,字母順序}messageRangeQueryStateResponse{repeatedRangeQueryStateKeyValuekeysAndValues=1;boolhasMore=2; //是否還有后續(xù)數(shù)據(jù)stringID=3;}messageRangeQueryStateKeyValue{stringkey=1; //keybytesvalue=2; //value}messageRangeQueryStateNext{ //分批取回stringID=1;}messageRangeQueryStateClose{ //結(jié)束stringID=1;}39整理ppt賬鏈代碼例如〔Go〕賬戶A和B之間相互轉(zhuǎn)賬主函數(shù)〔源代碼鏈接:Github〕//Runcallbackrepresentingtheinvocationofachaincode

//ThischaincodewillmanagetwoaccountsAandBandwilltransferXunitsfrom//AtoBuponinvoke

func(t*SimpleChaincode)Run(stub*shim.ChaincodeStub,functionstring,args[]string)([]byte,error){

//Handledifferentfunctions

iffunction==“init〞{

//初始化

returnt.init(stub,args)

}elseiffunction==“invoke〞{

//調(diào)用賬鏈代碼,從賬戶A轉(zhuǎn)X元到賬戶

returnt.invoke(stub,args)

}elseiffunction=="delete"{

//Deletesanentityfromitsstate

returnt.delete(stub,args)

}

returnnil,errors.New("Receivedunknownfunctioninvocation")

}40整理ppt賬鏈代碼例如〔Go〕初始化函數(shù):func(t*SimpleChaincode)init(stub*shim.ChaincodeStub,args[]string)([]byte,error){

varA,Bstring//賬戶地址

varAval,Bvalint//賬戶金額

varerrerror

...

//初始化

A=args[0]//獲取賬戶A地址

Aval,err=strconv.Atoi(args[1])//獲取賬戶A初始余額

iferr!=nil{

returnnil,errors.New(“Expectingintegervalueforassetholding〞)

}

B=args[2]

...fmt.Printf(“Aval=%d,Bval=%d\n〞,Aval,Bval)

//將變量信息寫入賬本中err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))

iferr!=nil{

returnnil,err

}

err=stub.PutState(B,[]byte(

溫馨提示

  • 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

提交評論