原文標題:
Hyperledger Fabric開發實戰-03編寫智能合約
Hyperledger Fabric開發實戰-04編寫智能合約
本文是在閱讀《區塊鏈開發實戰-Hyperledger Fabric關鍵技術與案例分析》一書的同時,在實踐中記錄的一些實踐步驟與經驗分享。
Hyperledger Fabric的智能合約叫做Chaincode,是業務的成載體,負責具體的業務邏輯
Chaincode代碼
Fabric的Chaincode運行在容器中,可以使用Go,Java,Node.js語言開發,Golang是目前爲主比較成熟穩定的。
Chaincode組成
Chaincode主要由下面幾個組成:
必須在main包下
引用必要的依賴
定義一個結構體,併爲結構體綁定Init和Invoke方法
shim.ChaincodeStubInterface和pb.Response
main方法
下面以一個例子進行說明
Chaincode部署
Chaincode的運行分爲:install,instantiate和invoke三步
編寫以上的代碼後,我們將其放入一個文件夾,例如:/home/ssj234/fabricwksp/05-chaincode/下,在部署的時候,會去$GOPATH的src下面尋找文件夾,因此,我們在如下路徑編寫Chaincode
安裝
實例化
實例化的時候會調用init方法
instantiate實例化命令運行的時間較長,銀行會啓動一個docker容器來執行chaincode,我們可以通過docker ps命令觀察,會看到下面的一個容器正在運行
使用docker logs bee440516894查看日誌,會輸出Init方法中打印的內容
調用
使用peer chaincode invoke可以調用chaincode的invoke方法
執行完成,通過docker logs命令可以查看到Invoke方法的打印內容。
在上一節演示了一個簡單的Chaincode示例,可以看到,Chaincode中主要是Init和Invoke方法的實現。兩個方法的原型如下:
可以看到,主要是對shim.ChaincodeStubInterface的使用。
shim接口
shim.ChaincodeStubInterface
pb.Response
shim提供了一組方法,用來包裝返回的信息
返回成功
返回失敗
Chaincode存取數據
通過上面的shim接口,我們可以看到如何將數據存放到賬本中,如何從賬本取出,下面編寫一個例子來演示,對上一節的代碼進行改動。
Init方法中,接收兩個名字和金額,如["init","Alice","100","Bob","200"]
Invoke方法中,接受A到B的轉賬,如["invoke","Alice","Bob","10"]
編寫完成後,還需要編寫main方法
之後,使用go build構建,再按照上一節的方法,安裝,實例化,調用測試,使用docker logs查詢日誌
編寫完成Chaincode後,可以執行gobuild查看是否編譯成功,如果安裝和實例化之後更改了Chaincode程序,需要重新build,然後使用peerchaincodeupgrade命令,設置最新的版本號,更新chaincode
作者:史聖傑
鏈接:https://www.jianshu.com/p/2e389823f556
https://www.jianshu.com/p/6b7049b4bdba
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。