欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hyperledger Fabric2.0 链码部署

程序员文章站 2022-07-14 16:23:28
...

翻译官方文档https://hyperledger-fabric.readthedocs.io/en/latest/deploy_chaincode.html#install-the-chaincode-package

向Channel中部署链码

终端用户通过调用智能合约与区块链分类账交互,Hyperledger Fabric的智能合约被称为链代码。想要验证或查询数据的组织需要在他们的peer中安装链代码。在加入channel的peer上安装链代码后,channel成员可以调用链代码并更改账本数据。

Fabric使用lifecycle进程来部署链代码,多个组织之间使用lifecrycle来决定chaincode的部署。例如,各组织之间使用lifecrycle来讨论决定链代码采用何种背书策略。更多关于部署和操作链码的信息,可查看https://hyperledger-fabric.readthedocs.io/en/latest/chaincode_lifecycle.html

本文讲述如何使用lifecrycle的命令工具,来部署链码。理解了lifecrycle的各项参数后,你可以按本文的步骤部署自己的链码。
注意:本文使用Fabric 2.0版本。

开始环境

首先部署一个Farbic的测试网络。开始之前,确保你已经安装了依赖包,实例代码,执行脚本和docker镜像。使用如下的命令,切换到测试代码目录(fabric-samples)

cd fabric-samples/test-network

从统一的初始状态开始,执行下面代码,删除运行中的docker和之前遗留的影响

./network.sh down

执行下述代码开始测试网络

./network.sh up createChannel

上述命令会创建一个通道mychannel和两个组织Org1,Org2.每个组织有一个peer且已经加入通道中。如果成功执行了,会显示如下logs

========= Channel successfully joined ===========

现在可以使用Peer CLI来向通道中部署链代码:

  • 第一步,打包链码
  • 第二步,安装打包的链码
  • 第三步,各组织对链码内容和定义达成一致
  • 第四步,向channel中提交链码

Log设置(可选,回头补)

打包链码

在安装链码之前我们需要对链码打包。下面仅翻译Go部分。

在打包链码之前,我们需要安装链码的依赖包,切换到包含链码的目录中

cd fabric-samples/chaincode/fabcar/go

本例使用 Go module来安装链码的依赖包,查看go.mod文件。

$ cat go.mod
module github.com/hyperledger/fabric-samples/chaincode/fabcar/go

go 1.13

require github.com/hyperledger/fabric-contract-api-go v0.0.0-20191118113407-4c6ff12b4f96

go.mod文件将Fabric contract API引入到链码包中,在fabcar.go中定义的合约接口SmartContract在链码的开头。

// SmartContract provides functions for managing a car
type SmartContract struct {
    contractapi.Contract
}

SmartContract为函数中操作账本数据构建context。

// CreateCar adds a new car to the world state with given details
func (s *SmartContract) CreateCar(ctx contractapi.TransactionContextInterface, carNumber string, make string, model string, colour string, owner string) error {
    car := Car{
        Make:   make,
        Model:  model,
        Colour: colour,
        Owner:  owner,
    }

    carAsBytes, _ := json.Marshal(car)

    return ctx.GetStub().PutState(carNumber, carAsBytes)
}

链码API更多信息https://github.com/hyperledger/fabric-contract-api-gohttps://hyperledger-fabric.readthedocs.io/en/latest/developapps/smartcontract.html

安装链码依赖包,在fabcar/go目录中运行下面命令

GO111MODULE=on go mod vendor

如果执行成功,go包会安装在vendor文件夹中

现在依赖包安装完毕,可以打包链码了。切换回test-network,打包所有相关内容。

cd ../../../test-network

使用peer CLI来打包链码,peer的可执行二级制文件在fabric-sample的bin文件夹中。使用如下命令添加Peer到CLI命令路径中

export PATH=${PWD}/../bin:$PATH

还需要设置指向fabric-samples中core.yaml的FABRIC_CFG_PATH

export FABRIC_CFG_PATH=$PWD/../config/

查看peer版本来确认是否安装成功

peer version

打包链代码

peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/go/ --lang golang --label fabcar_1

此命令会在当前目录下创建fabcar.tar.gz文件,--lang标识链码的编程语言,--path链码路径,--label链码安装后的标签,建议包含链码名称和版本。

我们已经打包了链码,现在可以在peer上安装链码。

安装打包的链码

打包完链码后,就可以在peer上安装。链码需要再所有参与背书的peer上安装。因为我们将要设置的背书策略是,Org1和Org2同时背书,所以Org1和Org2上都要安装链码

  • peer0.org1.example.com
  • peer0.org2.example.com

首先在Org1的peer上安装,通过设置环境变量来指定peer操作的是Org1,CORE_PEER_ADDRESS会设置peer为peer0.org1.example.com

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

运行下面代码在peer上安装链码

peer lifecycle chaincode install fabcar.tar.gz

如果执行成功,会返回链码的标识符package ID,此ID会再下一步审议链码的环节用到。类似于下方的输出

2020-02-12 11:40:02.923 EST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nIfabcar_1:69de748301770f6ef64b42aa6bb6cb291df20aa39542c3ef94008615704007f3\022\010fabcar_1" >
2020-02-12 11:40:02.925 EST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: fabcar_1:69de748301770f6ef64b42aa6bb6cb291df20aa39542c3ef94008615704007f3

下面安装Org2的peer

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

peer lifecycle chaincode install fabcar.tar.gz

在安装时会编译链码,如果链码有bug会在此时返回错误。

审议链码

 

相关标签: 区块链