Hyperledger Fabric 1.0 链码(chaincode)的原理、接口和结构

来源:互联网 发布:淘宝手机上购物支付 编辑:程序博客网 时间:2024/05/29 14:10

chaincode原理

在Hyperledger Fabric 1.0中,链码(chaincode)延伸自智能合约的概念,采用主流高级编程语言编写。链码会对fabric应用发出的交易做出响应,执行代码逻辑,与账本进行交互。区块链网络中的成员商定业务逻辑后,可将业务逻辑编程到链码中,大家遵循此合约执行。
链码会创建一些状态(state)并写入账本中。状态带有绑定到链码的命名空间,仅限于创建他的链码使用,不能被其他链码直接访问。不过,在合适的范围内,一个链码也可以调用另一个链码,间接访问其状态。
链码在fabric节点上的隔离沙盒(docker容器)中执行,并通过gRPC协议来与节点进行交互。必要的交互包括调用链码、读写账本、返回响应结果等。
Fabric中支持多种语言实现链码,包括golang、javascript、java等。下面例子为golong。

chaincode接口

每个链码都需要实现chaincode接口:

type Chaincode interface{   Init(stub ChaincodeStubInterface) pb.Response   Invoke(stub ChaincodeStubInterface) pb.Response   }

其中:
Init:当链码收到实例化(instantiate)或者升级(update)类型的交易时,Init被调用。
Invoke:当链码收到调用(invoke)或者查询(query)类型的交易时,invoke方法被调用。

chaincode结构

一个链码的必要结构如下所示:

package main//引入必要的包import("github.com/hyperledger/fabric/core/chaincode/shim"pb"github.com/hyperledger/fabric/protos/peer")//声明一个结构体type SimpleChaincode struct {}//为结构体添加Init方法func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response{  //在该方法中实现链码初始化或升级时的处理逻辑  //编写时可灵活使用stub中的API}//为结构体添加Invoke方法func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response{  //在该方法中实现链码运行中被调用或查询时的处理逻辑  //编写时可灵活使用stub中的API}//主函数,需要调用shim.Start( )方法func main() {  err:=shim.Start(new(SimpleChaincode))  if err != nil {     fmt.Printf("Error starting Simple chaincode: %s", err)    }}
阅读全文
0 0
原创粉丝点击