Ошибка подтверждения Hyperledger при вызове цепного кода - ошибка: набор подписей не удовлетворяет политике
Я использую приложение перевода баланса с пользовательским цепочечным кодом, когда я использую политику одобрения '1-of':[{ 'signed-by': 0 }, { 'signed-by': 1 }]
тогда все работает нормально, однако, если я использую '2-of':[{ 'signed-by': 0 }, { 'signed-by': 1 }]
вызвать транзакцию не удалось с ошибкой ниже:
Журнал ошибок одноранговой сети:
Проверить -> ERRO 078 Ошибка VSCC: stateBasedValidator.Validate не удалось, ошибка проверки политики подтверждения для цепочечного кода mycc в tx 4:0 завершилась неудачно: набор подписей не удовлетворяет политике 2019-01-02 07:24:40.782 UTC [committer.txvalidator] validateTx -> ERRO 079 VSCCValidateTx для транзакции txId = 815553b7cabb383f59d4abd3c2bdc3deda5b74169048e3b3b837f46adbd85099 вернула ошибку: проверка политики подтверждения для цепочечного кода mycc в tx 4 не выполнена: 0 не выполнено: 0 не выполнено: не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: 0 не выполнено: не выполнено
Журналы Node-SDK показывают следующее
[2019-01-02 02:24:40.826] [ОШИБКА] invoke-chaincode - Недопустимая транзакция цепочки кода вызова, код:ENDORSEMENT_POLICY_FAILURE [2019-01-02 02:24:40.827] [ERROR] invoke-chaincode - Ошибка: Транзакция цепочки кодов вызова недействительна, код: ENDORSEMENT_POLICY_FAILURE
Любая помощь в решении этого будет очень полезна
0 ответов
Я запустил среду в своей собственной системе и определил, что это не проблема с цепным кодом, а проблема с отправляемыми запросами на вызов.
Таким образом, запрос вызова, сделанный в 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-of не говорит о том, что ей нужны 2 подписи от любых партнеров в организации 1 и организации 2, а вместо этого что ему нужна подпись от одноранговых узлов в организации 1 и организации 2. Мы можем видеть это из документации по политикам поддержки, https://hyperledger-fabric.readthedocs.io/en/latest/endorsement-policies.html.
Точно так же 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"]
}')
это сработает.