BSN智能合約開發培訓-Hyperledger Fabric(一)

摘要: BSN智能合約開發培訓-Hyperledger Fabric(一)

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方法

下面以一個例子進行說明

BSN智能合约开发培训-Hyperledger Fabric(一)

Chaincode部署

Chaincode的運行分為:install,instantiate和invoke三步

編寫以上的代碼後,我們將其放入一個文件夾,例如:/home/ssj234/fabricwksp/05-chaincode/下,在部署的時候,會去$GOPATH的src下面尋找文件夾,因此,我們在如下路徑編寫Chaincode

安裝

BSN智能合约开发培训-Hyperledger Fabric(一)

實例化

實例化的時候會調用init方法

BSN智能合约开发培训-Hyperledger Fabric(一)

instantiate實例化命令運行的時間較長,銀行會啟動一個docker容器來執行chaincode,我們可以通過docker ps命令觀察,會看到下面的一個容器正在運行

使用docker logs bee440516894查看日誌,會輸出Init方法中打印的內容

調用

使用peer chaincode invoke可以調用chaincode的invoke方法

BSN智能合约开发培训-Hyperledger Fabric(一)

執行完成,通過docker logs命令可以查看到Invoke方法的打印內容。

在上一節演示了一個簡單的Chaincode示例,可以看到,Chaincode中主要是Init和Invoke方法的實現。兩個方法的原型如下:

可以看到,主要是對shim.ChaincodeStubInterface的使用。

shim接口

shim.ChaincodeStubInterface

BSN智能合约开发培训-Hyperledger Fabric(一)

pb.Response

shim提供了一組方法,用來包裝返回的信息

返回成功

返回失敗

Chaincode存取數據

通過上面的shim接口,我們可以看到如何將數據存放到賬本中,如何從賬本取出,下面編寫一個例子來演示,對上一節的代碼進行改動。

Init方法中,接收兩個名字和金額,如["init","Alice","100","Bob","200"]

BSN智能合约开发培训-Hyperledger Fabric(一)

Invoke方法中,接受A到B的轉賬,如["invoke","Alice","Bob","10"]

BSN智能合约开发培训-Hyperledger Fabric(一)

編寫完成後,還需要編寫main方法

之後,使用go build構建,再按照上一節的方法,安裝,實例化,調用測試,使用docker logs查詢日誌

BSN智能合约开发培训-Hyperledger Fabric(一)

編寫完成Chaincode後,可以執行gobuild查看是否編譯成功,如果安裝和實例化之後更改了Chaincode程序,需要重新build,然後使用peerchaincodeupgrade命令,設置最新的版本號,更新chaincode


分享到:


相關文章: