Hyperledger Fabric - 如何在每次区块链网络测试后清除 DEV 环境?

Hyperledger Fabric - How to clear out the DEV environment after each blockchain network test?

Fabric 1.4.3 版本。具有 1 个 Oderer(单独)+ 1 个组织的区块链网络,运行 on Docker.

由于 PEER0 上的 PANIC 错误和对等崩溃,正在尝试实例化链代码。

无法实例化链代码,因为 PEER0 在执行该过程时崩溃。

在 CLI docker 提示符下,我执行了以下命令序列:

1) $> peer channel create -o $ORDERERNAME -c $CHANNELNAME -f $CONFIGTXFOLDER/devchannel.tx --tls --cafile=$ORDERER_TLSCACERT

CLI 结果:UTC [cli.common] readBlock -> INFO 04e Received block: 0

2) $> peer channel join -o $ORDERERNAME -b $CONFIGTXFOLDER/devgenesis.block --tls --cafile=$ORDERER_TLSCACERT

CLI 结果:UTC [channelCmd] executeJoin -> INFO 03e Successfully submitted proposal to join channel

3) $> peer chaincode install -n $CHCODENAME -p $CHCODEPATH -v $CHCODEVERSION -l node --tls --cafile $ADMIN_PEER_TLSCACERT

CLI 中的结果:UTC [chaincodeCmd] install -> INFO 04a Installed remotely response:<status:200 payload:"OK" >

4) $> peer chaincode instantiate -C $CHANNELNAME -n $CHCODENAME -v $CHCODEVERSION -o $ORDERERNAME -c '{"Args":["init","a","100","b","200"]}' -P "AND ('GuaraniMSP.admin')" --tls --cafile $ORDERER_TLSCACERT --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE

PEER0 崩溃前的结果:

UTC [gossip.state] commitBlock -> ERRO 87e Got error while committing(unexpected Previous block hash. Expected PreviousHash = [c87a4b77e4c790f78b0c2e3c97d97de9907a09daf5dc2f039c7e3b3e1440f5d1], PreviousHash referred in the latest block= [953e31164a84d6d1b9b446130d1e7d5af8ede818284e8fa7c315b2125b519e38]
github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage.(*blockfileMgr).addBlock

[...]

UTC [gossip.state] deliverPayloads -> PANI 87f Cannot commit block to the ledger due to unexpected Previous block hash. Expected PreviousHash = [c87a4b77e4c790f78b0c2e3c97d97de9907a09daf5dc2f039c7e3b3e1440f5d1], PreviousHash referred in the latest block= [953e31164a84d6d1b9b446130d1e7d5af8ede818284e8fa7c315b2125b519e38]
github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage.(*blockfileMgr).addBlock

[...]

/opt/go/src/runtime/asm_amd64.s:1333
panic: Cannot commit block to the ledger due to unexpected Previous block hash. Expected PreviousHash = [c87a4b77e4c790f78b0c2e3c97d97de9907a09daf5dc2f039c7e3b3e1440f5d1], PreviousHash referred in the latest block= [953e31164a84d6d1b9b446130d1e7d5af8ede818284e8fa7c315b2125b519e38]
github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage.(*blockfileMgr).addBlock

[...]

我在 Hyperledger Fabric JIRA 上提出了一个关于这种情况的问题,我收到了我需要清理环境以确保没有来自先前试验的工件的信息。 Issue FABB-147 at Hyperledger Fabric(我的日志在那里)。

我在 peers get crash after anchor peer update

看到了一个与我的记录相近但有所不同的问题

现在我必须证明我的 Hyperledger Fabric 环境是干净的。但是怎么办?

是否有任何记录的程序或清单来验证是否没有来自 Hyperledger Fabric 先前试验的工件?

如果我抑制 orderer.yaml 和 docker-compose.yaml 的 ORDERER_GENERAL_GENESISFILE 和 ORDERER_GENERAL_GENESISPROFILE 设置,orderer 元素是否会正常启动,然后网络会理解它应该使用 genesis.block 在创建新频道时通知?

在此先感谢您的帮助。

  1. 运行 这个命令 docker system prune
  2. 启动您的网络 再次

希望这对你有所帮助,因为它对我有帮助

虽然这不是清洁您的环境的答案,但这是您潜在问题的可能解决方案。

peer channel create 命令将在其当前工作目录中生成一个 $CHANNELNAME.block 文件。当运行 peer channel join不是创世块

时,这是你需要使用的块
$> peer channel create  ... -c $CHANNELNAME 
$> peer channel join ... -b $CONFIGTXFOLDER/devgenesis.block

会导致你的同行大部分时间崩溃,毁掉你的一天,并且在从新的创世块重新创建分类帐后很少工作。试试这个:

$> peer channel create  ... -c $CHANNELNAME 
$> peer channel join ... -b $CHANNELNAME.block

我使用来自系统结构网络的创世块,加载到 Ordener(来自 orderer.yamldocker-compose.yaml),加入频道,但这是错误的。

我的错误来源是我使用的是系统创世块,而不是使用 peer channel create 命令中生成的创世块。

我知道 peer channel create 命令使用交易块模型 (.tx) 作为输入,作为输出它生成一个创世块 (.block),必须在 peer channel join命令。

正确的顺序是:

步骤 1) $> peer channel create -o $ORDERERNAME -c $CHANNELNAME -f $CONFIGTXFOLDER/devchanneltrack.tx --outputBlock $CHANNELFOLDER/devchannelgen.block --tls --cafile=$ORDERER_TLSCACERT

步骤 2) $> peer channel join -o $ORDERERNAME -b $CHANNELFOLDER/devchannelgen.block --tls --cafile=$ORDERER_TLSCACERT

我修改了脚本,现在可以加入频道了。然后我在频道上安装和实例化了新的链码,它们运行得很好。