首页 > 其他 > 详细

fabric go链码编写实战

时间:2021-01-27 14:26:32      阅读:142      评论:0      收藏:0      [点我收藏+]

链码接口:

链码启动必须通过调用 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,包括事件设置、调用其他链码操作

 

fabric go链码编写实战

原文:https://www.cnblogs.com/ezgod/p/14334107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!