時(shí)間:2023-06-16|瀏覽:277
鏈碼支持多種語(yǔ)言編寫,包括Nodejs、golang和java。每個(gè)鏈碼程序都必須實(shí)現(xiàn)Chaincode接口,包含Init、Invoke和Query三個(gè)基本操作:
- Init方法:鏈碼初始化的方法,在鏈碼實(shí)例化或升級(jí)時(shí)調(diào)用,以便鏈碼可以執(zhí)行必要的初始化,包括應(yīng)用程序狀態(tài)的初始化。 - Invoke方法:接收和處理鏈下業(yè)務(wù)系統(tǒng)的調(diào)用事務(wù)處理提案,其參數(shù)包含調(diào)用的鏈碼程序中函數(shù)的名稱和具體業(yè)務(wù)處理數(shù)據(jù)參數(shù)。在Invoke中根據(jù)不同的方法參數(shù)調(diào)用其他分支處理響應(yīng)的業(yè)務(wù)。Invoke可以簡(jiǎn)單理解為鏈碼方法的入口。 - Query方法:提供查詢鏈碼數(shù)據(jù)的方法,該方法只用于查詢,不提供對(duì)鏈上數(shù)據(jù)的操作??稍赒uery操作時(shí)調(diào)用,也可在Invoke方法中以及在BSN中對(duì)智能合約開發(fā)的規(guī)范和建議。
如何開發(fā)智能合約:
編寫鏈碼關(guān)鍵是實(shí)現(xiàn)Init和Invoke兩個(gè)方法。
- Init方法:在鏈碼實(shí)例化或升級(jí)時(shí)調(diào)用一次,完成初始化數(shù)據(jù)的工作。建議處理一些簡(jiǎn)單的處理,禁止使用該方法去初始化大量基礎(chǔ)數(shù)據(jù),如果需要初始化數(shù)據(jù),建議在Invoke中處理。 - Invoke方法:更新或查詢提案事務(wù)中的賬本數(shù)據(jù)狀態(tài)時(shí),Invoke方法被調(diào)用。因此響應(yīng)調(diào)用或查詢的業(yè)務(wù)邏輯都需要在此方法中編寫實(shí)現(xiàn)。
在實(shí)際開發(fā)中,開發(fā)人員可以自定義一個(gè)結(jié)構(gòu)體,然后重寫Chaincode接口的Init和Invoke方法,并將這兩個(gè)方法指定為自定義結(jié)構(gòu)體的成員方法。這兩個(gè)方法被調(diào)用時(shí)都會(huì)傳入一個(gè)存根對(duì)象(stub),鏈碼可以利用該對(duì)象來獲取請(qǐng)求的相關(guān)信息,例如調(diào)用者身份、目標(biāo)通道、參數(shù)等等。下面具體說一下如何開發(fā)智能合約。
目錄說明:
- main.js:程序入口; - bsnchaincode:鏈碼文件夾; - models:數(shù)據(jù)轉(zhuǎn)換包; - utils:通用工具包。
chaincode.js代碼示例,依賴包包括:
- "fabric-shim":"~1.4.0":fabric-shim包提供了鏈碼訪問/操作數(shù)據(jù)狀態(tài)、事務(wù)上下文以及調(diào)用其他鏈代碼的API。
鏈碼方法介紹:
- getFunctionAndParameters:返回一個(gè)方法調(diào)用描述對(duì)象,第一個(gè)值是調(diào)用的鏈碼方法名,第二個(gè)值是要傳入目標(biāo)方法的參數(shù)對(duì)象。 - getArgs:從鏈碼調(diào)用請(qǐng)求中返回參數(shù)字符串?dāng)?shù)組,等價(jià)于getStringArgs方法。 - getStringArgs:返回鏈碼調(diào)用請(qǐng)求中的參數(shù)字符串?dāng)?shù)組。 - getTxID:返回當(dāng)前鏈碼調(diào)用
熱點(diǎn):區(qū)塊鏈 區(qū)塊鏈應(yīng)用 智能合約 計(jì)算機(jī)