内容简介: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智能合约》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Concurrency in Practice
Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99
This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!