栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

超级账本(Hyperledger Fabric)—Jar方式安装合约

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

超级账本(Hyperledger Fabric)—Jar方式安装合约

Jar方式安装合约
    • 1 打包智能合约
      • 1.1上传jar
      • 1.2 返回到test-network所在目录, 启动测试网络
      • 1.3 将bin目录中二进制文件添加到CLI路径
      • 1.4 设置FABRIC_CFG_PATH为指向fabric-samples中的core.yaml文件
      • 1.5 创建链码包
    • 2 安装链码包
      • 2.1 Org1 peer节点安装链码
      • 2.2 Org2 peer节点安装链码
    • 3 通过链码定义
      • 3.1 查询包ID
      • 3.2 Org2 通过链码定义
      • 3.2 Org1 通过链码定义
    • 4 将链码定义提交给通道
    • 5 调用链码
      • 通用查询命令
      • 通用新增、更新、删除的命令
      • 查看合约的运行日志命令

1 打包智能合约 1.1上传jar

进入到/fabric-samples/chaincode/,目录下, 并将合约jar上传

cd /root/fabric-samples/chaincode
1.2 返回到test-network所在目录, 启动测试网络

进入/fabric-samples/test-network/目录下, 启动测试网络

cd /root/fabric-samples/test-network
# 启动测试网络
./network.sh up
# 创建一个通道, 默认通道名称是: mychannel
./network.sh createChannel
1.3 将bin目录中二进制文件添加到CLI路径

所需格式的链码包可以使用peer CLI创建,使用以下命令将这些二进制文件添加到你的CLI路径。

export PATH=${PWD}/../bin:$PATH
1.4 设置FABRIC_CFG_PATH为指向fabric-samples中的core.yaml文件
export FABRIC_CFG_PATH=$PWD/../config/
1.5 创建链码包

peer lifecycle chaincode package 命令

peer lifecycle chaincode package Cases8xAccident.tar.gz --path ../chaincode/Cases8xAccident --lang java --label Cases8xAccident

命令解释:此命令将在当前目录中创建一个名为 Cases8xAccident.tar.gz的软件包。
–lang标签用于指定链码语言,–path标签提供智能合约代码的位置,该路径必须是标准路径或相对于当前工作目录的路径,
–label标签用于指定一个链码标签,该标签将在安装链码后对其进行标识。建议您的标签包含链码名称和版本。

现在,我们已经创建了链码包,我们可以在测试网络的对等节点上安装链码。

2 安装链码包

打包 Cases8xAccident 智能合约后,我们可以在peer节点上安装链码。需要在将认可交易的每个peer节点上安装链码。因为我们将设置背书策略以要求来自Org1和Org2的背书,所以我们需要在两个组织的peer节点上安装链码:peer0.org1.example.com和peer0.org2.example.com

2.1 Org1 peer节点安装链码

设置以下环境变量,以Org1管理员的身份操作peer CLI。

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 命令
使用 peer lifecycle chaincode install 命令在peer节点上安装链码。

peer lifecycle chaincode install Cases8xAccident.tar.gz

看到如下信息说明链码安装成功

HyperledgerFabric 用 jar 包安装链码原理

2.2 Org2 peer节点安装链码

设置以下环境变量,以Org2管理员的身份操作peer CLI。

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 命令在peer节点上安装链码。

peer lifecycle chaincode install Cases8xAccident.tar.gz

注意:安装链码时,链码由peer节点构建。如果智能合约代码有问题,install命令将从链码中返回所有构建错误。 因为安装 java 链码的时候需要经过 maven 构建以及下载依赖包的过程这个过程有可能会较慢,所以 install 命令有可能会返回一个超时错误:。但是其实链码的 docker 容器内此时还在执行构建任务没有完成。等到构建成功了链码包也就安装成功了。 3 通过链码定义

安装链码包后,需要通过组织的链码定义。该定义包括链码管理的重要参数,例如名称,版本和链码认可策略。

如果组织已在其peer节点上安装了链码,则他们需要在其组织通过的链码定义中包括包ID。包ID用于将peer节点上安装的链码与通过的链码定义相关联,并允许组织使用链码来认可交易。

3.1 查询包ID
peer lifecycle chaincode queryinstalled

包ID是链码标签和链码二进制文件的哈希值的组合。每个peer节点将生成相同的包ID。你应该看到类似于以下内容的输出:

通过链码时,我们将使用包ID,因此,将包ID保存为环境变量。将返回的包ID粘贴到下面的命令中。


注意:包ID对于所有用户而言都不相同,因此需要使用上一步中从命令窗口返回的包ID来完成此步骤。而不是直接复制命令!!!

export CC_PACKAGE_ID=Cases8xAccident:442624a81dbb67eb594ef50b0bed8a6662ddcc8b848382f5d9d69c1471f5b695
3.2 Org2 通过链码定义

因为已经设置了环境变量为peer CLI作为Orig2管理员进行操作,所以我们可以以Org2组织级别将 Cases8xAccident 的链码定义通过。使用 peer lifecycle chaincode approveformyorg命令通过链码定义:
peer lifecycle chaincode approveformyorg 命令解析

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name Cases8xAccident --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
注意下图, 命令中有可能需要根据你自己链码修改的地方
  1. mychannel : 通道名称
  2. Cases8xAccident : peer lifecycle chaincode queryinstalled命令查询出来的链码包名称
  3. version 1.0 : 版本号(升级链码的时候必须要更改版本号)
  4. sequence 1 : 序列号(升级链码的时候必须要更改序列号)

3.2 Org1 通过链码定义

设置以下环境变量以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命令通过链码定义

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name Cases8xAccident --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

4 将链码定义提交给通道

使用peer lifecycle chaincode checkcommitreadiness命令来检查通道成员是否已批准相同的链码定义:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name Cases8xAccident --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

该命令将生成一个JSON映射,该映射显示通道成员是否批准了checkcommitreadiness命令中指定的参数:

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




由于作为通道成员的两个组织都同意了相同的参数,因此链码定义已准备好提交给通道。你可以使用peer lifecycle chaincode commit命令将链码定义提交到通道。commit命令还需要由组织管理员提交。

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name Cases8xAccident  --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命令来确认链码定义已提交给通道。

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




至此链码安装完成, 下面进行链码测试

5 调用链码

先进入test-network目录

cd /root/fabric-samples/test-network
通用查询命令

peer chaincode query -C 通道名-n 合约label名 -c ‘{“Args”:[“自己合约中的函数名” , “参数1”]}’

peer chaincode query -C mychannel -n Cases8xAccident   -c '{"Args":["query" , "1"]}'
通用新增、更新、删除的命令

对于Fabric2.3 peer chaincode invoke的详细解析

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 通道名-n 合约label名 --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”:“自己合约中的函数名”,“Args”:[“参数1” , “参数2” , “参数3”]}’

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 Cases8xAccident -java-demo --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":"create","Args":["cat-0"]}'
查看合约的运行日志命令
docker ps -a

docker logs -f dev-peer0.org1节点容器的CONTAINER ID

docker logs -f 28e6700307d0
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号