3

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

Fabric 对等错误日志:

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

Node-SDK 日志显示以下内容

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

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

4

1 回答 1

2

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

所以在 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"]
}')

我们可以看到,背书被发送到 org 1 中的两个对等方,而 org 2 中没有。但是,2-of 策略并不是说它需要来自 org 1 和 org 2 中的任何对等方的 2 个签名,而是它需要 org 1 和 org 2 中的同行的签名。我们可以从背书政策的文档中看到这一点,https://hyperledger-fabric.readthedocs.io/en/latest/endorsement-policies.html#endorsement-策略语法

同样,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"]
}')

它会起作用的。

于 2019-11-27T15:28:19.370 回答