版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、12 區(qū)塊鏈技術(shù)介紹 OBC組網(wǎng)與智能合約3 智能合約開發(fā)與示例第1頁2”繼互聯(lián)網(wǎng)后又一大變革時(shí)代到來”、“互聯(lián)網(wǎng)金融終極形式”、“價(jià)值互聯(lián)網(wǎng)開端”、“Record of Things 統(tǒng)計(jì)一切”區(qū)塊鏈在短短時(shí)間內(nèi)取得了巨大漣漪效應(yīng),IBM在年2月開放了OpenBlockChain技術(shù)并貢獻(xiàn)給了Linux小區(qū),引發(fā)了業(yè)界巨大轟動(dòng)。那么區(qū)塊鏈到底是怎樣一項(xiàng)顛覆性技術(shù)?其特點(diǎn)是什么?IBM區(qū)塊鏈平臺特點(diǎn)是什么?未來會(huì)怎樣演變?區(qū)塊鏈應(yīng)用與已經(jīng)有應(yīng)用關(guān)系是什么?本片將對這些問題逐一解鏈并進(jìn)行探討。序第2頁3區(qū)塊鏈介紹區(qū)塊鏈?zhǔn)且粋€(gè)共享賬本技術(shù) ,商業(yè)網(wǎng)絡(luò)中任何參加方都能夠查看交易系統(tǒng)統(tǒng)計(jì)(賬本)什么是
2、區(qū)塊鏈?第3頁4區(qū)塊鏈?zhǔn)侵伪忍貛诺讓雨P(guān)鍵技術(shù)區(qū)塊鏈技術(shù)分類?公有鏈Pow/Pos/DPos聯(lián)盟鏈OBC/Etherenum pbft共識私有鏈第4頁5 是不受監(jiān)管,抗審查影子貨幣區(qū)塊鏈確保“類現(xiàn)金”貨幣流通唯一, 不可篡改確定 是區(qū)塊鏈?zhǔn)讉€(gè)應(yīng)用區(qū)塊鏈 不是區(qū)塊鏈?zhǔn)侵伪忍貛诺讓雨P(guān)鍵技術(shù)什么是區(qū)塊鏈?第5頁6更深入什么是(企業(yè)級)區(qū)塊鏈智能合約隱私保護(hù)共享賬本共識確保共享賬本適當(dāng)可見性;確保交易是真實(shí)和可驗(yàn)證交易條款和交易狀態(tài)內(nèi)嵌在區(qū)塊鏈系統(tǒng)中,驅(qū)動(dòng)交易執(zhí)行全部參加者一致同意才意味著交易在網(wǎng)絡(luò)中通過驗(yàn)證跨商業(yè)網(wǎng)絡(luò)共享,不可更改,分布式交易統(tǒng)計(jì)系統(tǒng)更廣泛參加,更低成本,更高效率什么是區(qū)塊鏈?區(qū)塊
3、鏈?zhǔn)且粋€(gè)分布式多節(jié)點(diǎn)“共識”實(shí)現(xiàn)技術(shù),經(jīng)過區(qū)塊鏈能夠完整、“不可篡改”地統(tǒng)計(jì)價(jià)值轉(zhuǎn)移(交易)全過程。區(qū)塊鏈形成按照時(shí)間先后次序進(jìn)行連接,每一個(gè)參加共識形成節(jié)點(diǎn)都有一份區(qū)塊鏈信息完整副本。第6頁7比特幣帳本什么是區(qū)塊鏈?第7頁8OBC帳本什么是區(qū)塊鏈?第8頁9共享賬本統(tǒng)計(jì)商業(yè)網(wǎng)絡(luò)中全部交易在參加者之間共享參加者經(jīng)過同時(shí)獲取自己備份授權(quán)許可,參加者只能看到適當(dāng)交易統(tǒng)計(jì)信息共享統(tǒng)計(jì)系統(tǒng)什么是區(qū)塊鏈?第9頁10智能合約合約中商業(yè)規(guī)則內(nèi)嵌在區(qū)塊鏈系統(tǒng)中,在交易時(shí)被執(zhí)行可驗(yàn)證、被簽署編碼在編程語言中案例: 在企業(yè)債權(quán)發(fā)生轉(zhuǎn)移時(shí)執(zhí)行定義協(xié)議條款什么是區(qū)塊鏈?第10頁11隱私保護(hù)賬本是共享,不過參加者要求其含
4、有隱私保護(hù)參加者需要: 交易信息需要保密 身份不和交易綁定交易必須是真實(shí)密碼學(xué)是這些步驟關(guān)鍵什么是區(qū)塊鏈?第11頁12共識共識是交易驗(yàn)證與確認(rèn)過程當(dāng)參加方是匿名時(shí) 交易確認(rèn)代價(jià)高昂 挖礦過程為匿名者提供驗(yàn)證,但需巨大計(jì)算成本(工作證實(shí))當(dāng)參加者都是已知且可信時(shí) 交易確認(rèn)成本降低各種替換方案 權(quán)益證實(shí), 欺詐性交易產(chǎn)生時(shí)需要驗(yàn)證 (如債券交易) 多個(gè)署名(如5個(gè)參加者中3人同意)企業(yè)級區(qū)塊鏈需要“可插拔”共識什么是區(qū)塊鏈?第12頁13行業(yè)采取區(qū)塊鏈好處降低成本及復(fù)雜度提升可發(fā)覺性可信統(tǒng)計(jì)保留共享可信流程為何與業(yè)務(wù)相關(guān)?第13頁14區(qū)塊鏈并非萬能不適用場景1. 高性能(毫秒級)交易2. 小型組織
5、(無商業(yè)網(wǎng)絡(luò))3. 尋找數(shù)據(jù)庫替換方案4. 尋找消息傳遞處理方案5. 尋找交易處理替換方案為何與業(yè)務(wù)相關(guān)?第14頁15區(qū)塊鏈技術(shù)平臺對比第15頁第一,跨組織協(xié)作。在區(qū)塊鏈信任機(jī)制中,全部組員參加對信任價(jià)值監(jiān)督、控制和審計(jì),對地址、鏈、公鑰、私鑰、摘要等幾乎全部數(shù)據(jù)統(tǒng)計(jì)要素,進(jìn)行全生命周期協(xié)作密碼保護(hù),而且是全球、隨機(jī)。一個(gè)聯(lián)盟鏈,相當(dāng)于一臺全球超級密碼、交換機(jī)、密鑰署名服務(wù)器和密碼本總和, 信用連續(xù)。第二,永不宕機(jī)。因?yàn)榻M員動(dòng)態(tài)運(yùn)算機(jī)制,全部組員節(jié)點(diǎn),進(jìn)行實(shí)時(shí)同時(shí),無法實(shí)現(xiàn)局部控制,全球節(jié)點(diǎn)隨機(jī)分布和對應(yīng)在運(yùn)算時(shí)鐘和動(dòng)態(tài)時(shí)間戳控制下,永遠(yuǎn)不停機(jī), 信用連續(xù)。第三,組員監(jiān)管。區(qū)塊鏈強(qiáng)信任技術(shù)特點(diǎn)
6、,來自其節(jié)點(diǎn)組員無中心安全職責(zé),組員局部協(xié)作綜合實(shí)現(xiàn)了體系安全監(jiān)管全部,融監(jiān)管與過程之中,實(shí)現(xiàn)了系統(tǒng)學(xué)中安全正反饋機(jī)制,在當(dāng)前計(jì)算條件下,尚無法經(jīng)過跨越動(dòng)態(tài)時(shí)間戳可靠超越, 信用連續(xù)。為何要用區(qū)塊鏈強(qiáng)信任機(jī)制處理中心化系統(tǒng)中信用不連續(xù)問題第16頁17區(qū)塊鏈運(yùn)行對比第17頁18IBM開放區(qū)塊鏈與Linux小區(qū)開放連續(xù)投入代碼運(yùn)行環(huán)境賬簿數(shù)據(jù)結(jié)構(gòu)模塊化(可插式)共識框架模塊化(可插式)身份服務(wù)P2P網(wǎng)絡(luò)技術(shù)升級包SDK(API)共識算法庫(插入模塊)組員管理策略區(qū)塊鏈網(wǎng)關(guān)開發(fā)工具管理控制臺區(qū)塊鏈行業(yè)應(yīng)用基礎(chǔ)部分共享賬簿(Shared Ledger)增值部分(模塊、工具、封裝)應(yīng)用部分項(xiàng)目關(guān)鍵范圍內(nèi)
7、關(guān)鍵APIIBM小區(qū)貢獻(xiàn)Hyperledger項(xiàng)目IBM在Blockchain 上連續(xù)投入,致力于行業(yè)應(yīng)用是Linux開源小區(qū) Hyperledger主要貢獻(xiàn)方,致力于協(xié)同其它企業(yè)共同研發(fā),公布Open Ledger標(biāo)準(zhǔn)(規(guī)格說明書),創(chuàng)建基于Linux開源共享賬簿(比Bitcoin更適合行業(yè)應(yīng)用)推進(jìn)區(qū)塊鏈技術(shù)在行業(yè)中應(yīng)用(行業(yè)區(qū)塊鏈)Blockchain已經(jīng)作為一個(gè)試驗(yàn)性(網(wǎng)絡(luò))服務(wù)在Bluemix上推出基于LinuxOne開放計(jì)算平臺對Blockchain支持IBM區(qū)塊鏈第18頁19IBM 開放區(qū)塊鏈: 貢獻(xiàn)給Linux小區(qū)架構(gòu)及代碼Community + CodeMEMBERSHIP包
8、含OBC參加方身份識別,隱私,可審計(jì)性。BLOCKCHAIN | TRANSACTIONS經(jīng)過共識過程進(jìn)行分布式交易賬本處理。CHAIN-CODE“智能合約”, 提供在區(qū)塊鏈上運(yùn)行業(yè)務(wù)邏輯能力。APIs, SDKs, CLI為開發(fā)人員提供以可編程方式控制區(qū)塊鏈網(wǎng)絡(luò)能力。第19頁20IBM開放區(qū)塊鏈名詞解釋Transaction交易。賬頁中一筆統(tǒng)計(jì),用于確認(rèn)一個(gè)事實(shí),執(zhí)行一段代碼(chaincode)Ledger賬薄(賬冊)。由首尾相連一組區(qū)塊(block,有時(shí)也稱為一個(gè)賬頁)組成,統(tǒng)計(jì)交易和區(qū)塊世界狀態(tài)World State區(qū)塊世界狀態(tài)。由一組變量組成,指明交易執(zhí)行結(jié)果Chaincode交易中
9、統(tǒng)計(jì)一段代碼,其執(zhí)行結(jié)果會(huì)改變區(qū)塊世界狀態(tài)(World state)Validating Peer驗(yàn)證節(jié)點(diǎn)。OBC區(qū)域鏈網(wǎng)絡(luò)中全功效節(jié)點(diǎn),負(fù)責(zé)驗(yàn)證交易、統(tǒng)計(jì)賬薄、達(dá)成共識Non-validating Peer非驗(yàn)證節(jié)點(diǎn)。 OBC區(qū)域鏈網(wǎng)絡(luò)中半功效節(jié)點(diǎn),負(fù)責(zé)驗(yàn)證交易,但不執(zhí)行交易,也不統(tǒng)計(jì)賬薄,通慣用于代理 Validating Peer,提供REST service轉(zhuǎn)發(fā)功效Permissioned許可。只接收組員接入,不接收匿名接入Privacy隱私。OBC中任何組員都能發(fā)起交易,但只有相關(guān)方才能知道,其它無關(guān)節(jié)點(diǎn)無法從交易回溯到交易方Confidentiality保密。OBC中只有交易相關(guān)方
10、能夠看到交易內(nèi)容,其它無關(guān)節(jié)點(diǎn)只能驗(yàn)證交易真實(shí)性Auditability審計(jì)。假如把審計(jì)方加入OBC交易,則它能夠看到交易,從而審計(jì)是否合規(guī)第20頁21帳本結(jié)構(gòu)示意第21頁22OBC角色劃分與工作內(nèi)容組員服務(wù)(Member Services)注冊(Registration)身份管理(Identity Management)可審計(jì)(Auditibility)驗(yàn)證節(jié)點(diǎn)(Validating Peer)進(jìn)行共識(Consensus)運(yùn)行交易(Transaction)維護(hù)賬本(Ledger)發(fā)出事件(Event)非驗(yàn)證節(jié)點(diǎn)(Non-Validating Peer)維護(hù)節(jié)點(diǎn)間安全上下文(Secure C
11、ontext)代表客戶向組員服務(wù)或驗(yàn)證節(jié)點(diǎn)請求服務(wù)向應(yīng)用交付事件(Event)處理API請求應(yīng)用(Application)認(rèn)證客戶把客戶映射到安全上下文(Secure Context)調(diào)用REST API用戶(Client)登錄與交易第22頁23網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)整個(gè)OBC網(wǎng)絡(luò)中含有兩種節(jié)點(diǎn),驗(yàn)證節(jié)點(diǎn)(Validating Peer)和非驗(yàn)證節(jié)點(diǎn)(Non-Validation Peer)。前者是全功效節(jié)點(diǎn),組成全連通拓?fù)浣Y(jié)構(gòu),后者是代理節(jié)點(diǎn),通常掛接在相鄰驗(yàn)證節(jié)點(diǎn)上應(yīng)用程序能夠連接在驗(yàn)證節(jié)點(diǎn),也能夠連接在非驗(yàn)證節(jié)點(diǎn)在OBC網(wǎng)絡(luò)中需要有一個(gè)密鑰管理結(jié)節(jié),考慮到PBFT算法3f+1共識機(jī)制,經(jīng)典容錯(cuò)(允
12、許一個(gè)節(jié)點(diǎn)故障)環(huán)境需要有4個(gè)Validation Peer節(jié)點(diǎn)組員服務(wù)Member Services用戶Client用戶Client第23頁24單節(jié)點(diǎn)和多節(jié)點(diǎn)網(wǎng)絡(luò)若OBC網(wǎng)絡(luò)中只有一個(gè)VP節(jié)點(diǎn)(極端簡化),則應(yīng)用程序能夠直接與該節(jié)點(diǎn)連接,執(zhí)行其上Chaincode代碼,這時(shí)VP節(jié)點(diǎn)只需要記賬,不需要共識若OBC網(wǎng)絡(luò)中有多個(gè)VP節(jié)點(diǎn),則應(yīng)用程序能夠經(jīng)過NVP節(jié)點(diǎn)(NVP與應(yīng)用程序能夠一對多)間接訪問VP(NVP與VP之間多對一),這時(shí)VP節(jié)點(diǎn)需要驗(yàn)證交易、運(yùn)行代碼、統(tǒng)計(jì)賬薄、達(dá)成共識第24頁25商業(yè)票據(jù)Blockchain應(yīng)用-星形架構(gòu)第25頁26IBM開放區(qū)塊鏈參考架構(gòu)概覽(模塊與服務(wù))第2
13、6頁27組員管理(Membership)組員管理提供會(huì)員注冊、身份保護(hù)、內(nèi)容保密、交易審計(jì)功效OBC全部組員首先,經(jīng)過Registration Authority(RA)注冊取得許可然后,經(jīng)過Enrollment Certificate Authority(ECA)取得注冊安全證書(ECert),第三步(可選),經(jīng)過Transaction Certificate Authority(TCA)取得交易安全證書(TCert)使用二者之一署名發(fā)起交易請求與公有鏈不一樣(全部參加方不需要身份認(rèn)證,可直接進(jìn)行交易)第27頁28組員管理模型第28頁29業(yè)務(wù)網(wǎng)絡(luò)動(dòng)態(tài)組建示例:第一個(gè)節(jié)點(diǎn)OBC節(jié)點(diǎn)相關(guān)配置位于
14、/openblockchain/obc-peer/openchain.yaml在配置文件peer小節(jié)中,validator_enabled為true表示節(jié)點(diǎn)是驗(yàn)證節(jié)點(diǎn),不然是非驗(yàn)證節(jié)點(diǎn)discovery_rootnode在開啟時(shí)使用,當(dāng)這個(gè)參數(shù)被設(shè)置時(shí)節(jié)點(diǎn)會(huì)使用discovery protocal查找其它節(jié)點(diǎn)。這個(gè)參數(shù)是網(wǎng)絡(luò)上另外一個(gè)節(jié)點(diǎn)IP,這個(gè)節(jié)點(diǎn)作為網(wǎng)絡(luò)上全部節(jié)點(diǎn)進(jìn)行discover起始點(diǎn)。rest_enabled表明節(jié)點(diǎn)是否接收REST請求,對于生產(chǎn)環(huán)境普通把驗(yàn)證節(jié)點(diǎn)設(shè)置為false,只讓非驗(yàn)證節(jié)點(diǎn)接收來自應(yīng)用REST請求第一個(gè)節(jié)點(diǎn)驗(yàn)證節(jié)點(diǎn)根節(jié)點(diǎn)IP: validator_enable
15、d : truediscovery_rootnode: rest_enabled: false第29頁30業(yè)務(wù)網(wǎng)絡(luò)動(dòng)態(tài)組建示例:第二個(gè)節(jié)點(diǎn)第二個(gè)節(jié)點(diǎn)向根節(jié)點(diǎn)發(fā)送消息DISC_HELLO,含有自己區(qū)塊鏈高度blockNumber和PeerEndpoint。假如根節(jié)點(diǎn)應(yīng)答DISC_HELLO消息中區(qū)塊鏈高度高于第二個(gè)節(jié)點(diǎn)當(dāng)前持有,第二個(gè)節(jié)點(diǎn)立刻發(fā)起synchronization protocol以同時(shí)賬本最新狀態(tài)今后第二個(gè)節(jié)點(diǎn)每5秒鐘向全部已知節(jié)點(diǎn)(當(dāng)前只知道第一個(gè)節(jié)點(diǎn))發(fā)送DISC_GET_PEERS消息取得加入網(wǎng)絡(luò)其它節(jié)點(diǎn)第一個(gè)節(jié)點(diǎn)收到DISC_GET_PEERS消息后,回復(fù)包含了PeerEn
16、dpoint 數(shù)組DISC_PEERS消息IP: validator_enabled : truediscovery_rootnode: rest_enabled: falseIP: validator_enabled : truediscovery_rootnode: discovery_period: 5srest_enabled: false第二個(gè)節(jié)點(diǎn)驗(yàn)證節(jié)點(diǎn)第一個(gè)節(jié)點(diǎn)驗(yàn)證節(jié)點(diǎn)根節(jié)點(diǎn)第30頁31業(yè)務(wù)網(wǎng)絡(luò)動(dòng)態(tài)組建示例:第三個(gè)節(jié)點(diǎn)第三個(gè)節(jié)點(diǎn)向根節(jié)點(diǎn)發(fā)送消息DISC_HELLO,含有自己區(qū)塊鏈高度blockNumber和PeerEndpoint。假如根節(jié)點(diǎn)應(yīng)答DISC_HELLO消息中區(qū)塊鏈高
17、度高于第三個(gè)節(jié)點(diǎn)當(dāng)前持有,第三個(gè)節(jié)點(diǎn)立刻發(fā)起synchronization protocol以同時(shí)賬本最新狀態(tài),即使不執(zhí)行交易,不過非驗(yàn)證節(jié)點(diǎn)維護(hù)一個(gè)最新賬本副本今后第三個(gè)節(jié)點(diǎn)每60秒鐘向全部已知節(jié)點(diǎn)(第一、二個(gè)節(jié)點(diǎn))發(fā)送DISC_GET_PEERS消息取得加入網(wǎng)絡(luò)其它節(jié)點(diǎn)(考慮到發(fā)送間隔,第二個(gè)節(jié)點(diǎn)應(yīng)該先于第三個(gè)節(jié)點(diǎn)發(fā)覺對方)第一、二個(gè)節(jié)點(diǎn)收到DISC_GET_PEERS消息后,回復(fù)包含了PeerEndpoint 數(shù)組DISC_PEERS消息IP: validator_enabled : truediscovery_rootnode:rest_enabled: false IP: valid
18、ator_enabled : falsediscovery_rootnode: discovery_period: 60srest_enabled: true第二個(gè)節(jié)點(diǎn)驗(yàn)證節(jié)點(diǎn)第一個(gè)節(jié)點(diǎn)驗(yàn)證節(jié)點(diǎn)IP: validator_enabled : truediscovery_rootnode: discovery_period: 5srest_enabled: false第三個(gè)節(jié)點(diǎn)非驗(yàn)證節(jié)點(diǎn)第31頁32區(qū)塊(Block)結(jié)構(gòu)message Block version = 1; 谷歌.protobuf.Timestamp timestamp = 2; bytes transactionsHash =
19、3; bytes stateHash = 4; bytes previousBlockHash = 5; bytes consensusMetadata = 6; NonHashData nonHashData = 7;message BlockTransactions repeated Transaction transactions = 1;message NonHashData 谷歌.protobuf.Timestamp localLedgerCommitTimestamp = 1; repeated TransactionResult transactionResults = 2;me
20、ssage TransactionResult string uuid = 1;/ 交易 ID bytes result = 2;/ 交易執(zhí)行結(jié)果 uint32 errorCode = 3;/ 錯(cuò)誤碼 string error = 4;/ 錯(cuò)誤說明第32頁33PBFT原理介紹: 關(guān)鍵算法 (也叫做3-phase commit)client把一個(gè)request廣播到全部replica, 確保primary收到請求Primary為這個(gè)request分配一個(gè)次序號并廣播到其它replica;那些replica檢驗(yàn)消息有效性,同意那個(gè)次序號且確認(rèn)了message和view;假如replica有了m和有
21、效pre-pare, 就進(jìn)行下一步每個(gè)replica發(fā)送一個(gè)PREPARE消息給其它replica,全部收到2f個(gè)preparereplica進(jìn)入commit每個(gè)replica廣播commit消息,一個(gè)replica收到2f個(gè)commit消息后,就執(zhí)行(Execute)序號小于n全部requestreplica直接返回結(jié)果給client, client等候f+1個(gè)相同結(jié)果。周期性地,replica會(huì)做checkpoint來清理log在內(nèi)存中prepared/committed messageReplica經(jīng)過超時(shí)機(jī)制來監(jiān)控primary狀態(tài),并適時(shí)觸發(fā)view change protocol來
22、選舉新primary。v: view number; n: sequence number; D(m): Digest of request message m;代碼實(shí)現(xiàn): /openchain/consensus/obcpbft/pbft-core.go ; 其中:innerStack=innerCPI第33頁34賬鏈代碼(Chaincode)OBC中智能合約,是經(jīng)過賬鏈代碼(Chaincode)來實(shí)現(xiàn)。業(yè)務(wù)邏輯(Logic) = 賬鏈代碼(Chaincode) = 智能合約(Smart contract)它嵌在交易中,全部驗(yàn)證節(jié)點(diǎn)在確認(rèn)交易時(shí)都必須執(zhí)行它。執(zhí)行環(huán)境是一個(gè)定制化安全“沙箱”(
23、Docker)當(dāng)前支持Go, 未來支持Java, Node.js第34頁35賬鏈代碼相關(guān)概念賬鏈代碼分類:公開賬鏈代碼:經(jīng)過公開交易來布署賬鏈代碼,這些代碼能被網(wǎng)絡(luò)中任意組員調(diào)用。機(jī)密賬鏈代碼:經(jīng)過機(jī)密交易來布署賬鏈代碼,這些代碼只能被網(wǎng)絡(luò)中指定做驗(yàn)證組員調(diào)用。訪問受控賬鏈代碼:經(jīng)過內(nèi)置令牌機(jī)密交易來布署賬鏈代碼,這些代碼能被網(wǎng)絡(luò)中持有對應(yīng)令牌組員調(diào)用(即使這些組員不是校驗(yàn)者)。賬鏈代碼操作類型:布署賬鏈代碼:經(jīng)過交易布署新賬鏈代碼。調(diào)用賬鏈代碼:經(jīng)過交易調(diào)用已經(jīng)布署賬鏈代碼,也能夠在賬鏈代碼中調(diào)用其它賬鏈代碼。調(diào)用操作能夠修改賬鏈代碼中變量信息。查詢賬鏈代碼:經(jīng)過交易查詢已經(jīng)布署賬鏈代碼,也
24、能夠在賬鏈代碼中查詢其它賬鏈代碼。查詢操作不能修改賬鏈代碼中變量信息。賬鏈代碼數(shù)據(jù)存放 賬鏈代碼中需要持久化狀態(tài)(State),能夠存放在世界狀態(tài)(World State)中。第35頁36VM & Chaincodetype VM interface build(ctxt context.Context, id string, args string, env string, attachstdin bool, attachstdout bool, reader io.Reader) error/ 建立 chaincode image start(ctxt context.Context, i
25、d string, args string, env string, attachstdin bool, attachstdout bool) error/ 開啟 chaincode stop(ctxt context.Context, id string, timeout uint, dontkill bool, dontremove bool) error/ 停頓 chaincodetype Chaincode interface Invoke(stub *ChaincodeStub, function string, args string) (error)/ 調(diào)用 chaincode
26、Query(stub *ChaincodeStub, function string, args string) (byte, error)/ 查詢 chaincodemessage ChaincodeMessage enum Type 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; INV
27、OKE_QUERY = 12; RESPONSE = 13; QUERY = 14; QUERY_COMPLETED = 15; QUERY_ERROR = 16; RANGE_QUERY_STATE = 17; Type type = 1;/ 消息類型 谷歌.protobuf.Timestamp timestamp = 2; bytes payload = 3;/ 消息體 string uuid = 4;/ 消息 ID首先,Validating Peer在執(zhí)行Deploy交易時(shí),OBC框架會(huì)自動(dòng)創(chuàng)建VM(Docker),為其加載(build)賬鏈代碼( Chaincode),依據(jù)情況開啟(s
28、tart)或停頓(stop)賬鏈代碼接著,Chaincode shim會(huì)與Validating Peer建立反向連接,接收ChaincodeMessage指令第36頁37Chaincode操作第37頁38State操作message PutStateInfo / 存數(shù)據(jù) string key = 1; bytes value = 2;message RangeQueryState / 批量取數(shù)據(jù) string startKey = 1;/ 開始key(含),字母次序 string endKey = 2;/ 結(jié)束key(含),字母次序message RangeQueryStateResponse
29、 repeated RangeQueryStateKeyValue keysAndValues = 1; bool hasMore = 2;/ 是否還有后續(xù)數(shù)據(jù) string ID = 3;message RangeQueryStateKeyValue string key = 1;/ key bytes value = 2;/ valuemessage RangeQueryStateNext / 分批取回 string ID = 1;message RangeQueryStateClose / 結(jié)束 string ID = 1;第38頁39賬鏈代碼示例(Go)賬戶A和B之間相互轉(zhuǎn)賬主函數(shù)(源
30、代碼鏈接:G)/ Run callback representing the invocation of a chaincode/ This chaincode will manage two accounts A and B and will transfer X units from / A to B upon invokefunc (t *SimpleChaincode) Run(stub *shim.ChaincodeStub, function string, args string) (byte, error) / Handle different functions if fun
31、ction = “init” / 初始化 return t.init(stub, args) else if function = “invoke” / 調(diào)用賬鏈代碼,從賬戶A轉(zhuǎn)X元到賬戶 return t.invoke(stub, args) else if function = delete / Deletes an entity from its state return t.delete(stub, args) return nil, errors.New(Received unknown function invocation)第39頁40賬鏈代碼示例(Go)初始化函數(shù):func (
32、t *SimpleChaincode) init(stub *shim.ChaincodeStub, args string) (byte, error) var A, B string / 賬戶地址 var Aval, Bval int / 賬戶金額 var err error . . . / 初始化 A = args0 / 獲取賬戶A地址 Aval, err = strconv.Atoi(args1) / 獲取賬戶A初始余額 if err != nil return nil, errors.New(“Expecting integer value for asset holding”) B = args2 . . . fmt.Printf(“Aval = %d, Bval = %dn”, Aval, Bval) / 將變量信息寫入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年貨架品牌代理合同
- 2024月餅節(jié)活動(dòng)策劃與月餅采購服務(wù)合同范本3篇
- 2024招商引資合同書范本
- 2024年豪華專車租賃協(xié)議精簡版樣本版B版
- 2024標(biāo)準(zhǔn)版建筑工程施工協(xié)議范本版B版
- 2024年食堂承包及特色餐飲服務(wù)合同3篇
- 2024年設(shè)備維修保養(yǎng)合同協(xié)議
- 2024年版分店承包管理合同3篇
- 2024年特種大件物品運(yùn)輸及拆裝合同3篇
- 2024年標(biāo)準(zhǔn)電機(jī)采購合同范本版B版
- 窗簾采購?fù)稑?biāo)方案(技術(shù)方案)
- 2024-2030年串番茄行業(yè)市場發(fā)展分析及前景趨勢與投資研究報(bào)告
- 城市燃?xì)夤芫W(wǎng)改造合同
- 2024-2025學(xué)年廣東省東莞市高三思想政治上冊期末試卷及答案
- 《水電站建筑物》課件
- 9-XX人民醫(yī)院樣本外送檢測管理制度(試行)
- 場地硬化合同范文
- 智力殘疾送教上門教案
- 計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)教程資料
- 刑事訴訟法綜合實(shí)訓(xùn)報(bào)告
- 部編版五年級上冊語文第七單元《-即景》作文500字【9篇】
評論
0/150
提交評論