ENDORSEMENT_POLICY_FAILURE 调用链代码函数时出错
ENDORSEMENT_POLICY_FAILURE error on on invocation of chaincode functions
在没有指定背书策略的情况下实例化链码时,链码中的函数调用工作正常,并且可以在 couchdb 数据库上看到存储的数据。但是在链码实例化期间明确指定背书策略为 "AND ('mohaMSP.peer','ecMSP.peer')" 时,链码函数的调用不会显示任何错误,但不会更新 couchdb 状态数据库。所以我检查了 peer0.moha.nid.com 上的日志,它显示了以下错误:
2019-01-29 09:46:00.851 UTC [valimpl] preprocessProtoBlock -> WARN cac6 Channel [nid-channel]: Block [7] Transaction index [0] TxId [bfed301afcaae5ad2ee8885c3cdbd39521827b25cabe92d6cf03f931da4ea391] marked as invalid by committer. Reason code [ENDORSEMENT_POLICY_FAILURE]
我已经在 peer0.ec.nid.com 和 peer0.moha.nid.com 上(即在两个组织中)安装了链码并验证了安装。如 peer channel list
命令所示,有三个节点加入了 nid-channel - peer0.moha.nid.com、peer1.moha.nid.com、peer0.ec.nid.com。
here is docker-compose.yaml file to start the network
here is docker-compose-base.yaml file
我是 运行 fabric 1.2.1 容器并将它们标记为最新。
Chaincode实例化命令:
peer chaincode instantiate -o orderer.nid.com:7050 -n car_reg -v 1 -C nid-channel -c '{"Args":[]}' -P "AND ('ecMSP.peer','mohaMSP.peer')"
如果在实例化时没有指定背书策略,背书策略默认为“频道内组织的任何成员”。即)"OR ('mohaMSP.member','ecMSP.member')"
当您明确指定背书策略 "AND ('mohaMSP.peer','ecMSP.peer')" 时,它会从每个 Org(mohaMSP、ecMSP)节点请求一个签名。
所以检查两个 Org 是否有认可的同行..
试试这个:
-P "AND ('ecMSP.member','mohaMSP.member')"
也许您的同行没有 "peer" 角色。
我在调用链代码函数期间缺少 --peerAddresses 参数。现在解决了。感谢@Harshit 的评论
peer chaincode invoke -o orderer.nid.com:7050 -C nid-channel -n car_reg --peerAddresses peer0.moha.nid.com:7051 --peerAddresses peer0.ec.nid.com:7051 -c '{"Args":["createCar","1","bmw","tx","blue","me"]}'
在没有指定背书策略的情况下实例化链码时,链码中的函数调用工作正常,并且可以在 couchdb 数据库上看到存储的数据。但是在链码实例化期间明确指定背书策略为 "AND ('mohaMSP.peer','ecMSP.peer')" 时,链码函数的调用不会显示任何错误,但不会更新 couchdb 状态数据库。所以我检查了 peer0.moha.nid.com 上的日志,它显示了以下错误:
2019-01-29 09:46:00.851 UTC [valimpl] preprocessProtoBlock -> WARN cac6 Channel [nid-channel]: Block [7] Transaction index [0] TxId [bfed301afcaae5ad2ee8885c3cdbd39521827b25cabe92d6cf03f931da4ea391] marked as invalid by committer. Reason code [ENDORSEMENT_POLICY_FAILURE]
我已经在 peer0.ec.nid.com 和 peer0.moha.nid.com 上(即在两个组织中)安装了链码并验证了安装。如 peer channel list
命令所示,有三个节点加入了 nid-channel - peer0.moha.nid.com、peer1.moha.nid.com、peer0.ec.nid.com。
here is docker-compose.yaml file to start the network
here is docker-compose-base.yaml file
我是 运行 fabric 1.2.1 容器并将它们标记为最新。
Chaincode实例化命令:
peer chaincode instantiate -o orderer.nid.com:7050 -n car_reg -v 1 -C nid-channel -c '{"Args":[]}' -P "AND ('ecMSP.peer','mohaMSP.peer')"
如果在实例化时没有指定背书策略,背书策略默认为“频道内组织的任何成员”。即)"OR ('mohaMSP.member','ecMSP.member')"
当您明确指定背书策略 "AND ('mohaMSP.peer','ecMSP.peer')" 时,它会从每个 Org(mohaMSP、ecMSP)节点请求一个签名。 所以检查两个 Org 是否有认可的同行..
试试这个:
-P "AND ('ecMSP.member','mohaMSP.member')"
也许您的同行没有 "peer" 角色。
我在调用链代码函数期间缺少 --peerAddresses 参数。现在解决了。感谢@Harshit 的评论
peer chaincode invoke -o orderer.nid.com:7050 -C nid-channel -n car_reg --peerAddresses peer0.moha.nid.com:7051 --peerAddresses peer0.ec.nid.com:7051 -c '{"Args":["createCar","1","bmw","tx","blue","me"]}'