调用链码时的超级账本背书失败-失败:签名集不符合策略

问题描述 投票:1回答:1

我正在使用带有自定义链码的余额转账应用程序,当我使用背书策略'1-of':[{ 'signed-by': 0 }, { 'signed-by': 1 }]时,一切正常,但是,如果我使用'2-of':[{ 'signed-by': 0 }, { 'signed-by': 1 }],则调用交易失败,并出现以下错误:

Fabric Peer错误日志:

Validate-> ERRO 078 VSCC错误:stateBasedValidator.Validate失败,在TX 4:0中对链码mycc的背书策略的错误验证失败:签名集不符合策略2019-01-02 07:24:40.782UTC [committer.txvalidator] validateTx-> ERRO 079 VSCCValidateTx用于交易txId =815553b7cabb383f59d4abd3c2bdc3deda5b74169048e3b3b837f46adbd85099返回错误:验证链码mycc的背书策略tx 4:0失败:签名集不符合策略

Node-SDK日志显示以下内容

[[2019-01-02 02:24:40.826] [ERROR] invoke-chaincode-调用链码交易无效,代码:ENDORSEMENT_POLICY_FAILURE[2019-01-02 02:24:40.827] [错误] invoke-chaincode-错误:调用链码交易无效,代码:ENDORSEMENT_POLICY_FAILURE

解决该问题的任何帮助都会非常有帮助

hyperledger-fabric hyperledger-fabric-sdk-js
1个回答
0
投票

我在自己的系统上运行环境,并确定它不是链码问题,而是与发送的调用请求有关。

因此,在testAPI.sh和testInvoke.sh中发出的调用请求是

TRX_ID=$(curl -s -X POST \
  http://localhost:4000/channels/mychannel/chaincodes/mycc \
  -H "authorization: Bearer $ORG1_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers":  **["peer0.org1.example.com","peer1.org1.example.com"]**,
    "fcn":"invoke",
    "operation":"commit",
    "args": ["commitPrivate","uuid3","uuid2-Owner"]
}')

[我们可以看到,背书被发送给组织1中的两个对等方,而没有发送给组织2中的任何对等方。但是,2的策略并不是说它需要组织1和组织2中的任何对等方的2个签名。但是它需要组织1和组织2中的对等方签名。我们可以从支持策略的文档https://hyperledger-fabric.readthedocs.io/en/latest/endorsement-policies.html#endorsement-policy-syntax中看到这一点。

同样,OutOf(2,'Org1.member','Org2.member')等价于AND('Org1.member','Org2.member')

因此,如果您将请求更改为

TRX_ID=$(curl -s -X POST \
  http://localhost:4000/channels/mychannel/chaincodes/mycc \
  -H "authorization: Bearer $ORG1_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers":  **["peer0.org1.example.com","peer1.org2.example.com"]**,
    "fcn":"invoke",
    "operation":"commit",
    "args": ["commitPrivate","uuid3","uuid2-Owner"]
}')

它将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.