天天看點

Fabric系列 - 鍊碼 ChainCode

鍊碼(chaincode)是 Hyperledger Fabric 提供的智能合約,是上層應用與底層區塊鍊平台互動的媒介。現階段,Fabric 提供 Go、Java、Node.js 等語言編寫的鍊碼

Fabric 智能合約鍊碼開發的基礎,一句話總結起來就是:一個基類,兩個查詢,一個寫入。

所有的鍊碼都實作兩個接口,init 和 invoke。

  • Init(stubshim.ChaincodeStubInterface) :init用于合約初始化及更新初始化動作;
  • Invoke(stubshim.ChaincodeStubInterface):Invoke是peer調用鍊碼的入口函數;

init 接口

用于初始化合約,在整個鍊碼的生命周期裡,該接口僅僅執行一次。

invoke 接口

是編寫業務邏輯的唯一入口,雖然隻有一個入口,但是可以根據參數傳遞的不同自由區分不同業務邏輯,靈活性很高。比如應用開發者規定 Invoke 接口的第一個參數是合約方法名,剩餘的 Invoke 參數清單是傳遞給該方法的參數,那麼就可以在 Invoke 接口方法體中根據方法名的不同分流不同業務了。

編寫鍊碼還有一個非常重要的原則:不要出現任何本地化和随機邏輯。

fabric預設的狀态資料庫是個k-v庫,常用到的方法

  • 兩個查詢
    • getState(k)擷取單獨的key對應的value值。
    • rangeQueryState(k1,k2),擷取k1開始,k2結束的所有k-v對象, 傳回的是個Map<String,String>對象, 其中k1,k2按字典序排序
  • 一個寫入
    • putState(k,v), 寫入資料,此處要注意下,putState資料并不會馬上落到賬本上, 要等到第二段交易送出共識達成後,資料才會落地。
往期精彩回顧:
區塊鍊知識系列
密碼學系列
共識系列
公鍊調研系列
以太坊系列
EOS系列
智能合約系列
Token系列

繼續閱讀