Hyperledger Fabric 入门笔记(十九)Fabric V2.5 杂项 - 在开发模式下运行链码
文章目录
- 一、说明
- 二、流程
- 2.1. 环境准备
- 2.2. 排序服务
- 2.3. 在DevMode模式下启动Peer节点
- 2.4. 创建通道并加入Peer节点到通道中
- 2.5. 构建链码
- 2.6. 启动链码
- 2.7. 批准和提交链码定义
- 2.8. 调用链码
- 总结
一、说明
在智能合约的开发过程中,开发人员需要一种快速迭代测试链码包而不必为每次修改运行链码生命周期命令的方法。本教程使用Fabric二进制文件,以开发模式(“DevMode”)启动对等体,然后将链码连接到对等体。它允许启动链码而无需在对等体上安装链码,并且在链码最初提交到通道后,可以绕过peer lifecycle chaincode
命令。这允许快速部署、调试和更新,而无需每次更新时带来peer lifecycle chaincode
命令的开销。
注:为了以开发模式启动对等体,必须在网络中的所有节点上禁用TLS通信。由于强烈建议生产网络使用TLS通信,因此永远不应该在生产网络中使用开发模式。
本节所有命令均在fabric/文件夹中执行。它会使用所有默认的配置设置(针对节点和通道),并根据需要通过命令行中的环境变量覆盖配置。无需对默认的core.yaml或orderer.yaml文件进行任何编辑。
二、流程
2.1. 环境准备
进入指定目录:
cd ~/hyfa/fabric/
将二进制文件和配置文件的目录加入环境变量:
export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig
创建/var/hyperledger
目录并更改其属主:
sudo mkdir /var/hyperledger
sudo chown $USER /var/hyperledger
这是在orderer.yaml 和core.yaml 文件中定义的、默认的、存储区块的位置。
2.2. 排序服务
为排序服务生成创世区块:
configtxgen -profile SampleDevModeSolo -channelID syschannel -outputBlock genesisblock -configPath $FABRIC_CFG_PATH -outputBlock "${PWD}/sampleconfig/genesisblock"
启动排序节点:
ORDERER_GENERAL_GENESISPROFILE=SampleDevModeSolo orderer
2.3. 在DevMode模式下启动Peer节点
打开第二个终端窗口。
进入指定目录:
cd ~/hyfa/fabric/
将二进制文件和配置文件的目录加入环境变量:
export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig
设置环境变量CORE_OPERATIONS_LISTENADDRESS
,避免与排序节点冲突。
export CORE_OPERATIONS_LISTENADDRESS=127.0.0.1:9444
使用--peer-chaincodedev=true
标志启动Peer节点以使其进入DevMode模式:
FABRIC_LOGGING_SPEC=chaincode=debug CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 peer node start --peer-chaincodedev=true
2.4. 创建通道并加入Peer节点到通道中
打开第三个终端窗口。
进入指定目录:
cd ~/hyfa/fabric/
将二进制文件和配置文件的目录加入环境变量:
export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig
生成应用通道创建交易:
configtxgen -channelID ch1 -outputCreateChannelTx ch1.tx -profile SampleSingleMSPChannel -configPath $FABRIC_CFG_PATH
创建通道:
peer channel create -o 127.0.0.1:7050 -c ch1 -f ch1.tx
将Peer节点加入到通道中:
peer channel join -b ch1.block
2.5. 构建链码
构建fabric/integration/chaincode
目录下的simple链码:
go build -o simpleChaincode ./integration/chaincode/simple/cmd
2.6. 启动链码
启动链码并连接到Peer节点:
CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=mycc:1.0 ./simpleChaincode -peer.address 127.0.0.1:7052
观察启动Peer节点的终端,可以看到如下信息:
2.7. 批准和提交链码定义
打开第四个终端窗口。
进入指定目录:
cd ~/hyfa/fabric/
将二进制文件和配置文件的目录加入环境变量:
export PATH=$PATH:${PWD}/../fabric-samples/bin/
export FABRIC_CFG_PATH=${PWD}/sampleconfig
批准链码定义:
peer lifecycle chaincode approveformyorg -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --package-id mycc:1.0
检查批准情况:
peer lifecycle chaincode checkcommitreadiness -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')"
提交链码定义到通道:
peer lifecycle chaincode commit -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --peerAddresses 127.0.0.1:7051
2.8. 调用链码
初始化智能合约:
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["init","a","100","b","200"]}' --isInit
从a转账10到b:
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["invoke","a","b","10"]}'
查询:
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["query","a"]}'
总结
在 DevMode 环境下运行Peer节点的好处在于可以迭代地对链码源代码进行更新。保存改动后,构建链码(2.5),然后再次启动它(2.6)即可,而无需每次更改时都运行peer lifecycle
命令来更新链码。