调用链码时,Hyperledger认可失败-失败:签名集不符合策略

时间:2019-01-04 04:50:57

标签: hyperledger-fabric hyperledger-fabric-sdk-js

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

Fabric Peer错误日志:

  

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

Node-SDK日志显示以下内容

  

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

任何解决此问题的帮助都将非常有用

1 个答案:

答案 0 :(得分:1)

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

因此在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"]
}')

它将起作用。