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系列

Guess you like

Origin blog.csdn.net/wcc19840827/article/details/116225528