Hyperledger Fabric - 标识0不满足主体:标识是不同MSP的成员

时间:2017-10-09 07:11:23

标签: hyperledger-fabric hyperledger

我正在尝试使用节点sdk更新超级分层结构中的现有频道。我只是想将batchsize从10增加到11(可以在官方配置更新示例中找到)。我的配置更新如下所示:

{
  "channel_id": "mychannel",
  "read_set": {
    "groups": {
      "Orderer": {}
    }
  },
  "write_set": {
    "groups": {
      "Orderer": {
        "values": {
          "BatchSize": {
            "mod_policy": "Admins",
            "value": {
              "absolute_max_bytes": 102760448,
              "max_message_count": 11,
              "preferred_max_bytes": 524288
            },
            "version": "1"
          }
        }
      }
    }
  }
}

用户注册情况如下:

ORG1_TOKEN=$(curl -s -X POST \
  http://localhost:4000/users \
  -H "content-type: application/x-www-form-urlencoded" \
  -d 'username=jim&orgName=org1')

我在Docker容器上运行网络并使用所有图像和二进制文件的1.0.2版本。

我创建了一个update-channel.js函数,非常类似于余额转移示例的app文件夹中的create-channel.js函数。我使用configtxlator将json更新转换为二进制文件:

superagent.post('http://127.0.0.1:7059/protolator/encode/common.ConfigUpdate',
            configFile)
            .buffer()
            .end((error, res) => {
                error ? reject(error) : resolve(res.body);
            });

当我签署并将更新的配置推送到订货人时,我收到以下错误消息:

0xc42011e558 identity 0 does not satisfy principal: The identity is a
   member of a different MSP (expected OrdererMSP, got Org1MSP)
principal evaluation fails 
... 
Rejecting CONFIG_UPDATE because: Error
   authorizing update: Error validating DeltaSet: Policy for [Values]
   /Channel/Orderer/BatchSize not satisfied: Failed to reach implicit
   threshold of 1 sub-policies, required 1 remaining

我可以想象这个问题与我为Org1注册用户的事实有关。我的解决方案是将用户注册到OrdererOrg(甚至可能)吗?或者我是否需要更改配置更新json?

1 个答案:

答案 0 :(得分:0)

我们找到了解决方案。您确实需要orderer组织管理员签名。我们将network-config更改为还包括orderer的admin和mspid信息,然后使用admin来签署配置更新:

"orderer": {
            "mspid": "OrdererMSP",
            "url": "grpcs://orderer.example.com:7050",
            "server-hostname": "orderer.example.com",
            "tls_cacerts": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt",
            "admin": {
                "key": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore",
                "cert": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts"
            }
        } 

然后,签名对象包含orderer org admin infos:

client.signChannelConfig(channelConfig);

这会导致频道成功更新。

这是更新orderer部分下的任何频道配置项。如果它与应用程序部分相关,则需要提取参与组织的签名(通过其管理员)并将其提交给订购者。