我正在使用带有自定义链码的余额转移应用程序,当我使用背书策略'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
任何解决此问题的帮助都将非常有用
答案 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"]
}')
它将起作用。