区块链服务 BCS区块链服务 BCS

更新时间:2021/08/02 GMT+08:00
分享

链代码结构

本章以Go语言为例来介绍。链代码即一个Go文件,创建好文件后进行函数开发等操作。

由于外网无法访问华为内网go package,链代码开发过程中提供一个internal目录用于替换该package,将该目录放置在与链代码同级别下。用户可在其项目的go.mod中使用如下指令替换:

replace git.huawei.com/poissonsearch/wienerchain/contract/docker-container/contract-go/contractapi => ./internal

链代码接口

链代码启动必须通过调用contractapi包中的NewSmartContract函数。实际开发中, 您需要自行定义一个结构体,实现Chaincode接口。

type Contract interface {  
   Init(stub contractapi.ContractStub) ([]byte, error)  
   Invoke(stub contractapi.ContractStub) ([]byte, error)   
}
  • init方法:在链代码实例化或升级时被调用,完成初始化数据的工作。
  • Invoke方法:更新或查询帐本数据状态时被调用, 需要在此方法中实现响应调用或查询的业务逻辑。

链代码结构

package usercontract  

// 引入必要的包  
import (  
   "git.huawei.com/poissonsearch/wienerchain/contract/docker-container/contract-go/contractapi"  
)  

// 声明一个结构体  
type SimpleChaincode struct {}  

// 为结构体添加Init方法  
func (t *SimpleChaincode) Init(stub contractapi.ContractStub) ([]byte, error) {  
        // 在该方法中实现链代码初始化或升级时的处理逻辑  
    // 编写时可灵活使用stub中的API  
}  

// 为结构体添加Invoke方法  
func (t *SimpleChaincode) Invoke(stub contractapi.ContractStub) ([]byte, error) {  
        // 在该方法中实现链代码运行中被调用或查询时的处理逻辑  
    // 编写时可灵活使用stub中的API  
}  

// NewSmartContract主函数
func NewSmartContract() contractapi.Contract {
    return &SimpleChaincode {}
}
分享:

    相关文档

    相关产品