Ошибка подтверждения 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"]
}')

это сработает.

Другие вопросы по тегам