内容简介: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智能合约》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Making Things See
Greg Borenstein / Make / 2012-2-3 / USD 39.99
Welcome to the Vision Revolution. With Microsoft's Kinect leading the way, you can now use 3D computer vision technology to build digital 3D models of people and objects that you can manipulate with g......一起来看看 《Making Things See》 这本书的介绍吧!