Hyperledger Fabric智能合约

栏目: 编程工具 · 发布时间: 5年前

内容简介:Hyperledger Fabric的智能合约叫做Chaincode,是业务的成载体,负责具体的业务逻辑Fabric的Chaincode运行在容器中,可以使用Go,Java,Node.js语言开发,Golang是目前为主比较成熟稳定的。Chaincode主要由下面几个组成:

Hyperledger Fabric的智能合约叫做Chaincode,是业务的成载体,负责具体的业务逻辑

Chaincode代码

Fabric的Chaincode运行在容器中,可以使用Go,Java,Node.js语言开发,Golang是目前为主比较成熟稳定的。

Chaincode组成

Chaincode主要由下面几个组成:

  • 必须在main包下
  • 引用必要的依赖
  • 定义一个结构体,并为结构体绑定Init和Invoke方法
  • shim.ChaincodeStubInterface和pb.Response
  • main方法

下面以一个例子进行说明

// 1.在main包下
package main
// 2.引入必要的依赖
import(
   "fmt"
   "github.com/hyperledger/fabric/core/chaincode/shim"
   pb "github.com/hyperledger/fabric/protos/peer"
)
// 3.定义一个结构体
type mychaincode struct {
}
// 4.为结构体绑定init和invoke方法
func (t *mychaincode) Init(stub shim.ChaincodeStubInterface) pb.Response{
    fmt.Println(" << ====[Init] success init it is view in docker ======")
    return shim.Success([]byte("success init"))
}

func (t *mychaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response{
    fmt.Println(" << ====[Invoke] success init it is view in docker ======")
    return shim.Success([]byte("success init"))
}
// 5.主方法
func main(){
    err := shim.Start(new(mychaincode))
    if err != nil{
        fmt.Println("Error starting Simple chaincode : %s",err)
    }
}

Chaincode部署

Chaincode的运行分为:install,instantiate和invoke三步

编写以上的代码后,我们将其放入一个文件夹,例如: /home/ssj234/fabricwksp/05-chaincode/下,在部署的时候,会去$GOPATH的src下面寻找文件夹,因此,我们在如下路径编写Chaincode

cd /home/ssj234/fabricwksp/05-chaincode/
mkdir -p src/firstchaincode
cd src/firstchaincode
# 编写代码
vim firstchaincode.go
go build

安装

# 设置GOPATH,让其能够找到Chaincode代码
# 设置要链接的Peer节点和Peer的Admin证书
export set GOPATH=/home/ssj234/fabricwksp/05-chaincode
export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.cmbc.com:7051
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp

# 部署chaincode 代码,-n后面是名字 -v 是Chaincode的版本  -p后面是在$GOPAT/src下的相对路径
peer chaincode install -n hellochaincode -v 1.1 -p hellochaincode

实例化

实例化的时候会调用init方法

# 设置GOPATH
# 设置要连接的Peer节点和其Admin证书
export set GOPATH=/home/ssj234/fabricwksp/05-chaincode
export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.cmbc.com:7051
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp

# 初始化chaincode 代码,需要指定channel的名字,-c是传入的参数
peer chaincode instantiate -o orderer.cmbc.com:7050 -C cmbcchannel666 -n firstchaincode -v 1.1 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

instantiate 实例化命令运行的时间较长,银行会启动一个 docker 容器来执行chaincode,我们可以通过 docker ps 命令观察,会看到下面的一个容器正在运行

STATUS                  PORTS                       NAMES
bee440516894        dev-peer0.org1.cmbc.com-firstchaincode-1.2-876a5b6466d4eeac14cf940b95e3538a8ace73b133fad7c70041ea17d7cf4b8e   "chaincode -peer.a..."   2 minutes ago       Up 2 minutes

使用 docker logs bee440516894 查看日志,会输出Init方法中打印的内容

<< ====[Init] success init it is view in docker ======

调用

使用 peer chaincode invoke 可以调用chaincode的invoke方法

# 设置$GOPATH
# 设置要连接的Peer和Peer的Admin证书
export set GOPATH=/home/ssj234/fabricwksp/05-chaincode
export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.cmbc.com:7051
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp

# 调用chaincode 代码,需要制定orderer服务器,channel的名称和Chaincode的名称和版本号
peer chaincode invoke -o orderer.cmbc.com:7050 -C cmbcchannel666 -n firstchaincode -v 1.1 -c '{"Args":["invoke","a","100","b","200"]}'

执行完成,通过 docker logs 命令可以查看到Invoke方法的打印内容。


以上所述就是小编给大家介绍的《Hyperledger Fabric智能合约》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Redis设计与实现

Redis设计与实现

黄健宏 / 机械工业出版社 / 2014-6 / 79.00

【官方网站】 本书的官方网站 www.RedisBook.com 提供了书本试读、相关源码下载和勘误回报等服务,欢迎读者浏览和使用。 【编辑推荐】 系统而全面地描述了 Redis 内部运行机制 图示丰富,描述清晰,并给出大量参考信息,是NoSQL数据库开发人员案头必备 包括大部分Redis单机特征,以及所有多机特性 【读者评价】 这本书描述的知识点很丰富,......一起来看看 《Redis设计与实现》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具