hyperledger应用-fabcar的运行

hyperledger应用-fabcar的运行

一、启动网络

进入工作目录

cd fabric-samples

运行关闭网络脚本以关闭之前运行的容器和创建的内容

./network.sh down

运行脚本创建通道

./network.sh up createChannel

成功启动后会显示如下结果

创建通道

二、部署链码:打包智能合约

进入链码目录

cd fabric-samples/chaincode/fabcar/go

安装go依赖

GO111MODULE=on go mod vendor

成功后目录下出现vendor文件夹

安装go依赖

返回test-network目录

引入bin目录下的二进制文件

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

指明配置文件core.yaml文件路径

export FABRIC_CFG_PATH=$PWD/../config/

检查是否能运行peer CLI

peer version

显示peer版本信息,说明能够正常使用

检查运行peer

创建链码包

peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/java/build/install/fabcar --lang java --label fabcar_1

该命令会创建一个fabcar.tar.gz的压缩包

创建链码包

三、部署链码:安装链码

启动网络时创建了Org1和Org2两个组织和他们对应的节点

首先Org1管理员的身份操作CLI,引入Org1相关的环境变量

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/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

安装链码

peer lifecycle chaincode install fabcar.tar.gz

peer会编译链码并安装,安装成功后peer会生成并返回package identifier,其中的package ID需要保存,后续会用到。这里的ID是

fabcar_1:1146b4b491871bf18b23dd67dd8cc058655b36cc0e2274f165ed06b796a8f276
注意,不同电脑部署的链码ID可能不同,根据自己的实际情况来
安装链码

同理以Org2的身份进行操作

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/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

peer lifecycle chaincode install fabcar.tar.gz

三、部署链码:批准链码定义

链码安装后还需要各节点的认可才能正式部署到链上

可以通过以下命令查询已安装的链码

peer lifecycle chaincode queryinstalled

可以找到我们先前安装的链码ID

已安装链码查询

由于我们需要通过ID来找到对应的链码,因此需要将ID引入为环境变量

export CC_PACKAGE_ID=fabcar_1:1146b4b491871bf18b23dd67dd8cc058655b36cc0e2274f165ed06b796a8f276

上一步中我们以Org2的身份安装了链码,现在仍以该身份批准链码

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

再以Org1的身份批准

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

批准链码

四、部署链码:提交链码定义至通道

使用该命令查询链码批准情况

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

系统会返回同意成员的情况:

{
        "Approvals": {
                "Org1MSP": true,
                "Org2MSP": true
        }
}

将链码提交到通道

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

查询已提交到通道的链码

peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

查询已提交的链码

五、链码调用

创建一辆车至账本,由于数据上链需要满足背书策略的要求,因此需要两个组织的节点都同意

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"initLedger","Args":[]}'

系统显示调用成功

调用链码创建新车

使用链码的查询功能

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

调用后返回链上所有汽车的数据

查询链上数据

六、链码升级

这里假设Org1和Org2最初安装了Fabcar链码的GO版本,但使用JavaScript编写的链码会更方便。因此通过链码升级来安装Fabcar链码的JavaScript版本

进入链码目录安装JavaScript需要的依赖,再返回工作目录

cd ../chaincode/fabcar/javascript
npm install
cd ../../../test-network

与之前类似,先打包链码

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
peer lifecycle chaincode package fabcar_2.tar.gz --path ../chaincode/fabcar/javascript/ --lang node --label fabcar_2

引入Org1的环境变量,在Org1的节点上安装链码

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/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

peer lifecycle chaincode install fabcar_2.tar.gz

查询已安装的链码

peer lifecycle chaincode queryinstalled

fabcar_1是之前安装的go版本的链码,fabcar_2是现在安装的JavaScript版本的链码

链码升级安装查询

指明新版本链码的ID

export NEW_CC_PACKAGE_ID=fabcar_2:9482f7c1f9832d3fc8d9352d1cbbd526b928ee1a867defd3488aa5acc65093b3

继续以Org1的身份同意链码安装

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

再以Org2的身份进行相同的操作

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/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

peer lifecycle chaincode install fabcar_2.tar.gz

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

查询通道中的节点对新版本链码安装的同意情况

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

由于经过了上述操作,会显示Org1和Org2都同意

    {
            "Approvals": {
                    "Org1MSP": true,
                    "Org2MSP": true
            }
    }

使用下列命令升级链码

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

调用链码检查是否升级成功

创建一辆新车

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"createCar","Args":["CAR11","Honda","Accord","Black","Tom"]}'

查询链上所有车辆的信息

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

系统返回相应信息,证明链码被成功安装和调用

升级后链上数据查询

所有内容结束后及时关闭网络

./network.sh down

七、问题报错

Error: failed to normalize chaincode path: 'go list' failed with: : signal: killed Chaincode packaging has failed Deploying chaincode failed

缺乏go的依赖包,没有设置go代理而无法下载

解决方法:设置代理

go env -w GOPROXY=https://goproxy.io,direct

go env -w GO111MODULE=on

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Ubuntu 18.04操作系统上搭建Hyperledger Fabric环境的步骤: 1. 安装Docker 在Ubuntu上安装Docker的方法如下: ``` sudo apt-get update sudo apt-get install docker.io ``` 2. 安装Docker Compose 在Ubuntu上安装Docker Compose的方法如下: ``` sudo apt-get update sudo apt-get install docker-compose ``` 3. 安装Go语言 Hyperledger Fabric使用Go语言编写,因此需要安装Go语言环境。可以从官网下载安装包,或者使用以下命令安装: ``` sudo apt-get update sudo apt-get install golang-go ``` 4. 安装Node.js Hyperledger Fabric使用Node.js开发链码和SDK。可以从官网下载安装包,或者使用以下命令安装: ``` curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install -y nodejs ``` 5. 安装Fabric Samples Fabric Samples是一个包含示例应用程序和链码的代码库。可以从GitHub上克隆代码库,或者使用以下命令安装: ``` curl -sSL https://bit.ly/2ysbOFE | bash -s -- 1.4.3 ``` 6. 启动网络 进入Fabric Samples目录,执行以下命令启动网络: ``` cd fabric-samples/first-network ./byfn.sh up ``` 7. 部署链码 进入Fabric Samples目录,执行以下命令部署链码: ``` cd fabric-samples/chaincode/chaincode_example02/node npm install cd ../../../first-network ./byfn.sh up ``` 8. 运行示例应用程序 进入Fabric Samples目录,执行以下命令运行示例应用程序: ``` cd fabric-samples/fabcar/javascript npm install node enrollAdmin.js node registerUser.js node query.js node invoke.js ``` 至此,Hyperledger Fabric环境搭建完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值