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

  原文標題:

  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

  來源:簡書

  著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章