【问题标题】:FABRIC returns Error: Got unexpected status: BAD_REQUESTFABRIC 返回错误:出现意外状态:BAD_REQUEST
【发布时间】:2023-04-03 09:51:01
【问题描述】:

来自fabric document create-join-channel,当我执行命令时

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

它返回错误sn-p以下消息:

2017-08-16 01:34:13.902 UTC [msp] GetLocalMSP -> DEBU 00c 返回现有的本地 MSP 2017-08-16 01:34:13.902 UTC [msp] GetDefaultSigningIdentity -> DEBU 00d 获取默认签名身份 2017-08-16 01:34:13.902 UTC [msp/identity] 符号 -> DEBU 00e 符号:明文:0AC3060A1508021A060895C2CECC0522...7E2E59E3CFD14AC765C92FBF36614E79 2017-08-16 01:34:13.902 UTC [msp/identity] 符号 -> DEBU 00f 符号:摘要:FA75790826EF23E1A7C46AD3B9AE0DB7321DC271B8BE93A29BAC2F6EEACBB8B0 错误:出现意外状态:BAD_REQUEST 用法: 对等通道创建 [标志]

标志:

命令如下:

cryptogen generate --config=./crypto-config.yaml

export FABRIC_CFG_PATH=$PWD

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

export CHANNEL_NAME=mychannel

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=10000 docker-compose -f docker-compose-cli.yaml up -d

docker exec -it cli bash

export CHANNEL_NAME=mychannel

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

【问题讨论】:

  • 能否删除所有容器并再次运行?!您是否正在执行“./byfn.sh -m up”命令?如果您手动生成工件,则不得执行“./byfn.sh -m up”命令。

标签: hyperledger hyperledger-fabric


【解决方案1】:

出现意外状态:BAD_REQUEST

不幸的是,此错误消息可能意味着很多事情。仅供参考,在即将发布的 fabric v1.1 版本中,此消息已得到增强,包含更多文本。

最常见的是,对于频道创建,此状态表明提交者没有频道创建权限(通常等同于组织的管理员权限)。但是,正如 mac 所指出的,如果通道已经存在,您也可能会收到此错误。

对等通道创建 -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger /fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

这个命令让我觉得可能是罪魁祸首。此命令通常应与以下行配对:

export CORE_PEER_MSPCONFIGPATH=`pwd`/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 
export CORE_PEER_LOCALMSPID=PeerOrg1 

它告诉 peer 命令频道创建请求应该使用特定管理员的证书进行签名。 peer 命令证书材料的默认路径通常会导致使用标准用户证书进行签名。

【讨论】:

  • 我收到与 Jim 相同的错误消息。我运行了与他相同的步骤以及您对pwd 的建议-它们都不起作用,我每次都得到BAD_REQUEST。我尝试了不同的频道名称(包括以前从未创建过的频道名称),并确保在尝试命令之前运行byfn.sh -m down。还有其他想法吗?
【解决方案2】:

请确保频道名称是新频道,并且网络中没有使用该名称的现有频道。

例如,如果您已经使用CHANNEL_NAME=mychannel 创建了一个频道,请在创建另一个频道之前更改变量,方法是运行export CHANNEL_NAME=mychannelanother 之类的东西

【讨论】:

  • 嗯,不知道你的意思。如果您在创建频道之前执行了 byfn down 命令,则它应该使用相同的频道名称。也许您可以列出您执行的命令以及哪些命令不起作用(带有错误消息),然后人们可以查看并提供帮助。
  • 应该,你之间有什么变化?
  • 我尝试使用不同的频道名称(以前从未创建过)并始终得到相同的结果(BAD_REQUEST
【解决方案3】:

您收到此问题的原因可能是因为docker-compose-cli.yaml 文件仍在运行script.sh 脚本。注释掉调用脚本的行,它将运行良好。示例:

# Comment out the line like the example below by adding a #
# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME} ${DELAY} ${LANG}; sleep $TIMEOUT'```

我建议更改文档以解决此问题。

【讨论】:

    【解决方案4】:

    我有类似的错误。在 docker-compose 中设置 CHANNEL_NAME 变量的方式似乎存在问题(我猜?)。我运行了这个命令,稍作修改如下 [将标志 '-c $CHANNEL_NAME' 更改为 '-c mychannel']:

    对等通道创建 -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/ peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

    这行得通。

    【讨论】:

      【解决方案5】:

      正如@Phil 所说,您应该在启动网络之前注释掉该行。正如文档所说:

      如果不加注释,该脚本将在网络启动时执行所有 CLI 命令,正如我们在幕后发生了什么中所描述的那样?部分。但是,我们希望手动执行这些命令,以便公开每个调用的语法和功能。

      see the doc

      【讨论】:

        【解决方案6】:

        同样的事情发生在我身上,但我只是关闭了网络,然后再次完成了所有程序,比如再次生成创世块,然后在我的网络上,我建立了一个网络。

        【讨论】:

          【解决方案7】:

          尝试在 /etc/hosts 中为正在使用的域(通常是 example.com)添加一个条目

          进入终端:输入“sudo /etc/hosts” 在顶部添加“127.0.0.1 example.com” 按 ctrl+o 保存,按 'y' 确认,按 ctrl+x 退出。

          再试一次..应该可以了。

          【讨论】:

            【解决方案8】:
            ./byfn.sh -m restart -c mychannel
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-09-19
              • 2019-11-27
              • 1970-01-01
              • 2020-10-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-29
              相关资源
              最近更新 更多