链码接口:
链码启动必须通过调用 shim 包中的 Start 函数,传递一个类型为 Chaincode 的参数,该参数是一个接口类型,有两个重要的函数 Init 与 Invoke 。
type Chaincode interface{
Init(stub ChaincodeStubInterface) peer.Response
Invoke(stub ChaincodeStubInterface) peer.Response
}
Init:在链码实例化或升级时被调用, 完成初始化数据的工作
Invoke:更新或查询帐本数据状态时被调用, 需要在此方法中实现响应调用或查询的业务逻辑
实际开发中, 开发人员可以自行定义一个结构体,重写 Chaincode 接口的两个方法,并将两个方法指定为自定义结构体的成员方法。
链码结构:
package main // 引入必要的包 import( "fmt" "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) } }
shim: 用来访问/操作数据状态、事务上下文和调用其他链代码的 API, 链码通过 shim.ChaincodeStub 提供的方法来读取和修改账本的状态
peer: 提供了链码执行后的响应信息的 API,peer.Response 封装了响应信息
链码相关API:
shim 包提供了如下几种类型的接口:
参数解析 API:调用链码时需要给被调用的目标函数/方法传递参数,该 API 提供解析这些参数的方法
账本状态数据操作 API:该 API 提供了对账本数据状态进行操作的方法,包括对状态数据的查询及事务处理等
交易信息获取 API:获取提交的交易信息的相关 API
对 PrivateData 操作的 API: Hyperledger Fabric 在 1.2.0 版本中新增的对私有数据操作的相关 API
其他 API:其他的 API,包括事件设置、调用其他链码操作
原文:https://www.cnblogs.com/ezgod/p/14334107.html