600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Hyperledger Fabric无系统通道启动及通道的创建和删除

Hyperledger Fabric无系统通道启动及通道的创建和删除

时间:2021-06-07 08:20:38

相关推荐

Hyperledger Fabric无系统通道启动及通道的创建和删除

前言

在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织,但目前为止,我们启动 orderer 节点的方式都是通过系统通道的方式,这样自带系统通道的网络很不简洁优雅。好在 Fabric 2.3 以上就开始支持无系统通道创建应用通道的功能,本文将对此功能进行详细解释和介绍,然后通过无系统通道的方式启动联盟链网络并在此基础上完成通道的添加和删除。本实验必要的准备工作和 DNS 配置请参考 准备工作。

背景介绍

实验准备

本文网络结构直接将 Hyperledger Fabric定制联盟链网络工程实践 中创建的1_3Org2Peer1Orderer1TLS复制为3_RunWithNoSystemChannel(建议直接将本案例仓库 FabricLearn 下的3_RunWithNoSystemChannel目录拷贝到本地运行)。默认情况下,所有命令皆在3_RunWithNoSystemChannel根目录下执行,在开始后面的实验前按照以下命令启动基础实验网络:

设置环境变量source envpeer1soft启动CA网络./0_Restart.sh注册用户./1_RegisterUser.sh构造证书./2_EnrollUser.sh

本实验初始 docker 网络为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wMhydOH2-1649654432912)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-17-06-21.png “初始 docker 网络”)]

本文工作

以无系统通道的方式启动 Hyperledger Fabric 网络,然后先用configtxgen工具创建新通道mychanneltestchannel,并使用osnadmin工具通过ordereradmin服务使orderer加入这两条通道(实验代码已上传至:/wefantasy/FabricLearn 的3_RunWithNoSystemChannel下)1:

无系统通道启动

修改compose/docker-base.yamlorderer-base内容为:

orderer-base:image: hyperledger/fabric-orderer:${FABRIC_BASE_VERSION}environment:- ORDERER_HOME=${DOCKER_CA_PATH}/orderer- ORDERER_GENERAL_LISTENPORT=7777- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0- ORDERER_GENERAL_BOOTSTRAPMETHOD=none- ORDERER_CHANNELPARTICIPATION_ENABLED=true# - ORDERER_GENERAL_GENESISMETHOD=file# - ORDERER_GENERAL_GENESISFILE=${DOCKER_CA_PATH}/orderer/genesis.block- ORDERER_GENERAL_LOCALMSPDIR=${DOCKER_CA_PATH}/orderer/msp- ORDERER_GENERAL_LOGLEVEL=debug- ORDERER_GENERAL_TLS_ENABLED=true- ORDERER_GENERAL_TLS_CERTIFICATE=${DOCKER_CA_PATH}/orderer/tls-msp/signcerts/cert.pem- ORDERER_GENERAL_TLS_PRIVATEKEY=${DOCKER_CA_PATH}/orderer/tls-msp/keystore/key.pem- ORDERER_GENERAL_TLS_ROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]- ORDERER_ADMIN_TLS_ENABLED=true- ORDERER_ADMIN_TLS_CERTIFICATE=${DOCKER_CA_PATH}/orderer/tls-msp/signcerts/cert.pem- ORDERER_ADMIN_TLS_PRIVATEKEY=${DOCKER_CA_PATH}/orderer/tls-msp/keystore/key.pem- ORDERER_ADMIN_TLS_ROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]- ORDERER_ADMIN_TLS_CLIENTROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]- ORDERER_ADMIN_LISTENADDRESS=0.0.0.0:8888- ORDERER_METRICS_PROVIDER=prometheus- ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:9999- ORDERER_DEBUG_BROADCASTTRACEDIR=data/logsnetworks:- ${DOCKER_NETWORKS}

相比源文件主要修改如下:

ORDERER_GENERAL_GENESISMETHOD:将启动方式改为noneORDERER_CHANNELPARTICIPATION_ENABLED:无系统通道启动,该字段必须设置为 true添加ORDERER_ADMIN_TLS_*相关设置, 后续排序节点使用osnadmin加入通道依赖于配置, 它的服务和证书与ORDERER独立,可以选择其他的证书。 修改compose/docker-compose.yamlorderer-base内容为:

orderer1.:container_name: orderer1.extends:file: docker-base.yamlservice: orderer-baseenvironment:- ORDERER_HOST=orderer1.- ORDERER_GENERAL_LOCALMSPID=ordererMSPvolumes:- ${LOCAL_CA_PATH}//registers/orderer1:${DOCKER_CA_PATH}/orderer# - ${LOCAL_ROOT_PATH}/data/genesis.block:${DOCKER_CA_PATH}/orderer/genesis.blockports:- 7151:7777- 7152:8888- 7153:9999

相比源文件,主要添加了ADMINORDERER_OPERATIONS_LISTENADDRESS的端口监听。

envpeer1soft中添加ORDERER ADMIN的环境变量:

export ORDERER_CA=$LOCAL_CA_PATH//registers/orderer1/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pemexport ORDERER_ADMIN_TLS_SIGN_CERT=$LOCAL_CA_PATH//registers/orderer1/tls-msp/signcerts/cert.pemexport ORDERER_ADMIN_TLS_PRIVATE_KEY=$LOCAL_CA_PATH//registers/orderer1/tls-msp/keystore/key.pem

无系统通道启动ordererpeer节点:

docker-compose -f $LOCAL_ROOT_PATH/compose/docker-compose.yaml up -d peer1. peer1. orderer1.

无系统通道启动成功后的容器环境:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbWmxkUR-1649654432913)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-17-22-09.png “启动成功后的容器环境:”)]

新建通道

新建通道文件

接下来我们将创建两个通道,它们分别是mychanneltestchannel

configtxgen -profile OrgsChannel -outputCreateChannelTx $LOCAL_ROOT_PATH/data/mychannel.tx -channelID mychannelconfigtxgen -profile OrgsChannel -outputBlock $LOCAL_ROOT_PATH/data/mychannel.block -channelID mychannelconfigtxgen -profile OrgsChannel -outputCreateChannelTx $LOCAL_ROOT_PATH/data/testchannel.tx -channelID testchannelconfigtxgen -profile OrgsChannel -outputBlock $LOCAL_ROOT_PATH/data/testchannel.block -channelID testchannel

在上面我们同时使用了-outputCreateChannelTx-outputBlock参数创建了两个通道的tx文件和block文件,其中block文件为加入通道时所使用的创世区块文件,可以由对应的tx文件计算而来。

排序节点加入通道

在排序节点加入通道前,我们可以使用以下命令查看当前的通道:

source envpeer1softosnadmin channel list -o orderer1.:7152 --ca-file $ORDERER_CA --client-cert $ORDERER_ADMIN_TLS_SIGN_CERT --client-key $ORDERER_ADMIN_TLS_PRIVATE_KEY

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HzMztx25-1649654432914)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-20-33-53.png “osnadmin channel list 1”)]

这里的参数ORDERER_CAORDERER_ADMIN_TLS_SIGN_CERTORDERER_ADMIN_TLS_PRIVATE_KEY必须与上面compose/docker-base.yaml中的ORDERER_ADMIN_TLS_*相关证书文件一致。端口必须与ORDERER_ADMIN_LISTENADDRESS一致,否则可能会出现以下错误:

error: Get "https://orderer1.:7151/participation/v1/channels": net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00"

如果没有报错,可以使用osnadmin channel join根据创世区块加入通道:

osnadmin channel join --channelID mychannel --config-block $LOCAL_ROOT_PATH/data/mychannel.block -o orderer1.:7152 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY"osnadmin channel join --channelID testchannel --config-block $LOCAL_ROOT_PATH/data/testchannel.block -o orderer1.:7152 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-axeAOyTr-1649654432914)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-20-36-32.png “osnadmin channel join”)]

这里--config-block指向的文件必须为block文件,否则可能会出现错误:

osnadmin: error: parsing arguments: failed to retrieve channel id - block is empty. Try --help

所有工作完成后,可以再次使用osnadmin channel list命令查看已加入的通道:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMacFYMq-1649654432915)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-20-39-19.png “osnadmin channel list 2”)]

节点加入通道

节点加入通道只需要能访问通道对应的block创世区块文件即可,为了方便管理,我们先将创世区块复制到各组织的公共资产目录下:

cp $LOCAL_ROOT_PATH/data/mychannel.block $LOCAL_CA_PATH//assets/cp $LOCAL_ROOT_PATH/data/mychannel.block $LOCAL_CA_PATH//assets/cp $LOCAL_ROOT_PATH/data/testchannel.block $LOCAL_CA_PATH//assets/cp $LOCAL_ROOT_PATH/data/testchannel.block $LOCAL_CA_PATH//assets/

现在使 soft 组织的 peer 节点加入创建的两个通道:

source envpeer1softpeer channel join -b $LOCAL_CA_PATH//assets/mychannel.blockpeer channel join -b $LOCAL_CA_PATH//assets/testchannel.blockpeer channel list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jso0gE9V-1649654432915)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-20-48-24.png “soft 加入通道”)]

然后使 soft 组织的 peer 节点加入创建的两个通道:

source envpeer1webpeer channel join -b $LOCAL_CA_PATH//assets/mychannel.blockpeer channel join -b $LOCAL_CA_PATH//assets/testchannel.blockpeer channel list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-22BvYHJC-1649654432916)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-20-49-08.png “web 加入通道”)]

安装链码到指定通道

现在我们的网络中有 soft 和 web 两个组织,每个组织有个peer1节点,每个节点都加入了mychanneltestchannel两个通道,如果想将链码安装到testchannel通道,只需要按以下流程:

两个组织分别安装链码:

source envpeer1soft# peer lifecycle chaincode package basic.tar.gz --path asset-transfer-basic/chaincode-go --label basic_1peer lifecycle chaincode install basic.tar.gzpeer lifecycle chaincode queryinstalledsource envpeer1webpeer lifecycle chaincode install basic.tar.gzpeer lifecycle chaincode queryinstalledexport CHAINCODE_ID=basic_1:06613e463ef6694805dd896ca79634a2de36fdf019fa7976467e6e632104d718

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B3Az9Ro8-1649654432916)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-21-06-41.png “安装链码”)]

由于本项目是从 Hyperledger Fabric定制联盟链网络工程实践 中复制而来,所以这里直接安装该实验中打包过的链码basic.tar.gz,并且设置CHAINCODE_ID为链码安装后的ID。在安装时不必指定具体通道,因为安装行为是针对节点而非通道,即 将节点安装到 peer 节点。

两个组织分别批准链码:

source envpeer1softpeer lifecycle chaincode approveformyorg -o orderer1.:7151 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_IDpeer lifecycle chaincode queryapproved -C testchannel -n basic --sequence 1source envpeer1webpeer lifecycle chaincode approveformyorg -o orderer1.:7151 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --version 1.0 --sequence 1 --waitForEvent --init-required --package-id $CHAINCODE_IDpeer lifecycle chaincode queryapproved -C testchannel -n basic --sequence 1

若想将链码安装到testchannel通道上,只需要在批准链码时指定--channelIDtestchannel即可。此时已可以在testchannel上查看到链码批准情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6V9DIhYP-1649654432917)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-21-09-49.png “批准链码”)]

web 组织提交链码:

source envpeer1webpeer lifecycle chaincode commit -o orderer1.:7151 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --init-required --version 1.0 --sequence 1 --peerAddresses peer1.:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILEpeer chaincode invoke --isInit -o orderer1.:7151 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --peerAddresses peer1.:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"Args":["InitLedger"]}'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVSStHTI-1649654432917)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-21-14-07.png “提交链码”)]

4. 初始化并调用链码:

peer chaincode invoke --isInit -o orderer1.:7151 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --peerAddresses peer1.:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"Args":["InitLedger"]}'sleep 5peer chaincode invoke -o orderer1.:7151 --tls --cafile $ORDERER_CA --channelID testchannel --name basic --peerAddresses peer1.:7251 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer1.:7351 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"Args":["GetAllAssets"]}'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GtqYjXEc-1649654432918)(/gh/wefantasy/FileCloud/img/hyperledger_fabric_4_run_with_no_system_channel_and_update_channel--04-07-21-15-51.png “初始化并调用链码”)]

删除通道

区块链的不可篡改性注定了我们无法从网络上删除通道,只能将新数据(正常事务或配置更新)附加到区块链网络2。到现在我们已经讨论过了组织、节点及通道的添加和删除方式,发现 Fabric 联盟链通常对删除操作并没有提供支持。

参考

yuan1028. fabric 2.3系统通道. 简书. [-01-21] ↩︎

JACOB WILSON. How do you delete a channel on Hyperledger fabric?. it-. [-04-05] ↩︎

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。