您的位置:首页 > 大数据 > 人工智能

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

2017-11-29 17:46 579 查看

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)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  区块链技术