Я установил свою политику одобрения как " AND ('Org1MSP.peer', 'OrgMainMSP.peer') ", что означает, что мне нужны сертификаты обеих организаций для успешного выполнения транзакций.
Транзакция выполняется следующим образом:
вызов однорангового цепного кода -o orderer0.org.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer /crypto/ordererOrganizations/org.com/orderers/orderer0.org.com/msp/tlscacerts/tlsca.org.com-cert.pem -n accessControl --peerAddresses peer0.org-main.com:7051 --tlsRootCertFiles / opt /gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org-main.com/peers/peer0.org-main.com/tls/ca.crt --peerAddresses peer0.org1.com:10051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.com/peers/peer0.org1.com/tls/ca.crt - c '{"Args" : []} '
Все работало нормально. Успешно зафиксирован новый блок, и его можно увидеть и на диване. Но когда я отправляю транзакцию, удаляя один из сертификатов, как показано ниже:
"код одноранговой сети вызывает -o orderer0.org.com:7050 --tls --cafile / opt / gopath / src / github.com / hyperledger / fabric / peer / crypto / ordererOrganizations / org.com / orderers / orderer0.org.com / msp / tlscacerts / tlsca.org.com-cert.pem -n accessControl --peerAddresses peer0.org -main.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org-main.com/peers/peer0.org-main.com/tls/ca. crt - c '{"Args": []}' "
Новый блок фиксируется транзакцией, но коммитер помечает ее как недействительную со следующим сообщением об ошибке в журналах
peer0.org-main.com | 2020-03-20 07: 59: 30.868 UT C [vscc] Validate -> ERRO 094 VS CC ошибка: сбой stateBasedValidator.Validate, ошибка проверки политики подтверждения для доступа с цепочкой кода AccessControl в tx 7: 0 завершилась неудачей: подпись установлена не соответствует политике
peer0.org-main.com | 2020-03-20 07: 59: 30.868 UT C [valimpl] preprocessProtoBlock -> WARN 097 Канал [myc]: блок [7] Индекс транзакции [0] TxId [01246b27c11f94124aee3c4ac84a011be51a26aaa50fc28f1d6f57979a как недействительный). Код причины [ENDORSEMENT_POLICY_FAILURE]
peer0.org-main.com | 2020-03-20 07: 59: 31.156 UT C [kvledger] CommitWithPvtData -> ИНФОРМАЦИЯ 098 [myc] Зафиксированный блок [7] с 1 транзакцией (ами) в 287 мс (state_validation = 0 мс block_and_pvtdata_commit = 220 мс state_commit = 17 мс) commitHash = [9d52225ddbc8f6f98edd37388cbcf369fea22666b9ec1cff1a91debdebc2d2a1]
И когда я снова отправляю транзакцию, проходящую оба сертификата, выдается ошибка:
* 1036: 1036 * 1036: транзакция: ProposalResponsePayloads не совпадают - ответ на предложение: версия: 1 статус ответа: 200 полезная нагрузка: ...>
Проблема в том, что если я по ошибке вызываю функцию вызова, передавая только один сертификат организации (ошибка политики одобрения), то я не могу дальнейших транзакций.