Hyperledger Fabric遇到的那些坑
1.生成起始区块出错
错误代码:Error on outputBlock: Error writing genesis block: open ./channel-artifacts/genesis.block: no such file or director
错误原因:
路径中目录如果不存在,需提前创建
解决方案:
mkdir channel-artifacts
2.启动容器时出错
错误代码:ERROR: no such image: hyperledger/fabric-orderer:: invalid reference format
错误原因:
没有这样的图像:hyperledger/fabric orderer::引用格式无效
解决方案:
打开docker-compose-cli.yaml,把cli下面的image后面的:$IMAGE_TAG删掉,再打开peer-base.yaml,把peer-base和orderer-base的image后面的:$IMAGE_TAG删掉。
cli:
container_name: cli
image: hyperledger/fabric-tools:$IMAGE_TAG(把:$IMAGE_TAG删掉)
tty: true
stdin_open: true
environment:
- SYS_CHANNEL=$SYS_CHANNEL
services:
peer-base:
image: hyperledger/fabric-peer:$IMAGE_TAG (把:$IMAGE_TAG删掉)
environment:
orderer-base:
image: hyperledger/fabric-orderer:$IMAGE_TAG (把:$IMAGE_TAG删掉)
environment:
3.更新锚节点时出错
- 在更新锚节点时,输入export CORE_PEER_ADDRESS=peer0.org2.example.com:7051时出现下面错误
Error: got unexpected status: BAD_REQUEST -- error applying config update to existing channel 'mychannel': error authorizing update: error validating ReadSet: proposed update requires that key [Group] /Channel/Application/Org2MSP be at version 0, but it is currently at version 1
错误原因:
创建通道的时候,报这个错!! 已经存在通道了,就不要再添加了,可以通过 peer channel list来查看通道.
- 将节点加入通道时,输入CORE_PEER_ADDRESS=peer0.org2.example.com:7051出现错误
Error: error getting endorser client for channel: endorser client failed to connect to peer0.org2.example.com:7051: failed to create new connection: connection error: desc = "transport: error while dialing: dial tcp 172.28.0.3:7051: connect: connection refused"
解决方案:
解决:
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
同理:如果是peer0.org1就改为peer0.org1.example.com:7051
如果是peer1.org1就改为peer0.org1.example.com:8051
如果是peer1.org2就改为peer0.org1.example.com:1005
4.在实例化链码时出错
Error: could not assemble transaction, err proposal response was not successful, error code 500, msg error starting container: error starting container: Failed to generate platform-specific docker build: Error executing build: API error (404): network _byfn not found ""
解决方案:
刚开始,我在peer-base.yaml里面修改CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=test_byfn发现还是出现同样的问题,然后我退出网络,删掉容器,然后在启动网络前添加export SYS_CHANNEL=“byfn-sys-channel”,然后启动网络,后面就可以了。不知道是不是凑巧。
当我再试一次时,发现启动时有两个WARNING,需要解决掉才能实例化成功
第一个在peer-base.yaml
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
把${COMPOSE_PROJECT_NAME}_byfn 改为 文件名_byfn(不要有大写字母和符号)
我的文件名为test3,所以我得改为test3_byfn
第二个我是在启动容器前加export SYS_CHANNEL="byfn-sys-channel"
5.在将节点加入通道时出错
- 当我创建通道后,再将节点加入通道,发现没有mychannel.block
Error on outputBlock: Error writing genesis block: open ./channel-artifacts/genesis.block: no such file or director
错误原因:
发现是我关掉docker时没有删干净
解决方案:
然后我就执行docker-compose -f docker-compose-cli.yaml down --volumes --remove-orphans,后面就解决了。如果docker ps -a 发现还有未删的容器,可以执行docker stop $(sudo docker ps -a -q) 再执行docker rm $(sudo docker ps -a -q)
6.在链码交互时出错
错误代码:Error: error getting endorser client for invoke: endorser client failed to connect to peer0.Org2.example.com:7051: failed to create new connection: connection error: desc = "transport: error while dialing: dial tcp 172.27.0.5:7051: connect: connection refused"director
错误原因:
是因为我输入错误了
解决方案:
把–peerAddresses peer0.Org2.example.com:7051修改为–peerAddresses peer0.Org2.example.com:9051
peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mycc \
--peerAddresses peer0.Org1.example.com:7051 \
--peerAddresses peer0.Org2.example.com:7051(修改为9051) \
-c '{"Args":["invoke","a","b","10"]}'
7.在创建通道时出错
Error: rpc error: code = Unavailable desc = transport is closing
错误原因:
是因为打开了TLS但是创建时是输入未打开TLS模式的命令的
解决方案:
可以关掉TLS验证,或者输入打开TLS模式的命令
2. 创建通道时犯的幼稚的错误 错误代码:
Fatal error when initializing core config : Could not find config file. Please make sure that FABRIC_CFG_PATH is set to a path which contains core.yaml
错误原因:
未进入容器(自己还思考十多分钟快二十分钟,顿时对自己无语。。。)
的
解决方案:
进入容器 docker exec -it cli bash
3. 通道名称不匹配 错误代码:
Error: Invalid channel create transaction : mismatched channel ID channelname != cannelname
解决方案:
查看一下你的通道名称是否正确
8.
错误代码:Error: error getting endorser client for channel: endorser client failed to connect to node2.org3.example.com:12051: failed to create new connection: connection error: desc = "transport: error while dialing: dial tcp 192.168.208.8:12051: connect: connection refused"
错误原因:
大概是配置节点的时候出错
解决方案:
检查docker-compose-cli.yaml 和 docker-compose-base.yaml
9.
错误代码:Error: error endorsing invoke: rpc error: code = Unknown desc = access denied: channel [mychannel] creator org [OrgXP] - proposal response: <nil>
错误原因:
大概是通道名称或链码名称写错了
解决方案:
执行命令时检查一下通道名称或链码名称
10.
错误代码:Error: got unexpected status: BAD_REQUEST -- Consortium config value missing
错误原因:
这个原因还不清楚,不过我从头到尾部署一次后,问题解决了。可以尝试重新部署一次。
由于我时刚学的,可能有些专业名词说不出来,也可能有错误的地方,欢迎大家批评指教