Использование Idemix от Hyperledger Fabric - PullRequest
0 голосов
/ 18 октября 2019

Я хочу попробовать функцию idemix, представленную версией Fabric 1.3. на основе репо . Я сделал некоторые изменения, чтобы поддержать idemix. Но когда я запускаю java -cp blockchain-client.jar org.example.chaincode.invocation.InvokeChaincode , между прочим, я пропустил шаг 5 для регистрации и регистрации пользователей, я наткнулся на

2019-10-18 03:20:10.312 UTC [protoutils] ValidateProposalMessage -> WARN 049 channel [mychannel]: creator certificate is not valid: Failed verifing with opts [&{<nil> <nil> [] [{1 [111 114 103 49]} {2 1} {0 <nil>} {0 <nil>}] 3 [] 0 0xc00000fab8 0}]: signature invalid: APrime and ABar don't have the expected structure
2019-10-18 03:20:10.312 UTC [comm.grpc.server] 1 -> INFO 04a unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.22.0.1:33960 error="access denied: channel [mychannel] creator org [idemixMSPID1]" grpc.code=Unknown grpc.call_duration=82.6484ms` from peer container.

Я настроил фабричную сеть с минимальными компонентами. Две организации, каждая имеет двух пиров и ЦС. Демоверсия из репо . Сеть демо без поддержки функции idemix работает хорошо. Когда я добавляю раздел idemix в configtx.yaml, регенерирую криптографический материал, создаю канал и т. Д. И сеть, наконец, работает. Все контейнеры работают хорошо. Но я взаимодействую с потрясающим автомобильным цепным кодом, используя java-sdk, вышеприведенная информация об ошибке была выдана.

Ниже приведены данные из файла configtx.yaml (просто покажите ключевые части здесь):

Организации:

- &OrdererOrg

    Name: OrdererOrg

    ID: OrdererMSP

    MSPDir: crypto-config/ordererOrganizations/example.com/msp

- &Org1
    Name: Org1MSP
    ID: Org1MSP

    MSPDir: crypto-config/peerOrganizations/org1.example.com/msp

- &Org2
    Name: Org2MSP

    ID: Org2MSP

    MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
- &Org1Idemix
    Name: idemixMSP1

    ID: idemixMSPID1

    msptype: idemix
    MSPDir: crypto-config/peerOrganizations/org3.example.com

- &Org2Idemix
    Name: idemixMSP2

    ID: idemixMSPID2

    msptype: idemix
    MSPDir: crypto-config/peerOrganizations/org4.example.com

Возможности: Channel: & ChannelCapabilities V1_3: true

Orderer: &OrdererCapabilities
    V1_1: true

Application: &ApplicationCapabilities
    V1_3: true
    #V1_2: false
    #V1_1: false

Application: & ApplicationDefaults Организации: Channel: & ChannelDefaults Политики: Читатели: Тип: ImplicitMeta Правило: "ANY Readers"

    Writers:
        Type: ImplicitMeta
        Rule: "ANY Writers"
    Admins:
        Type: ImplicitMeta
        Rule: "MAJORITY Admins"
Capabilities:
    <<: *ChannelCapabilities

Профили: TwoOrgsOrdererGenesis: Возможности: <<: * ChannelCapabilities Orderer: <<: * OrdererDefaults Организации: - * OrdererOrg Возможности: <<: * Консорциумы OrdererCapabilities: SampleConsortium: Организации: - * Org1 - * Org2 - * Org2 - *- * Org2Idemix Приложение: <<: * Организации ApplicationDefaults: - * Возможности OrdererOrg: <<: * ApplicationCapabilities TwoOrgsChannel: Консорциум: SampleConsortium Приложение: <<: * Организации ApplicationDefaults: - * Org1 - * Org2 - * Org1Idemix - * Org2: * Org2:<<: * ApplicationCapabilities </p>

Код, который я добавляю в InvokeChaincode.java перед созданием клиента канала, выглядит следующим образом:

 // org/example/chaincode/invocation.java
 UserContext normalUserContext = new UserContext();
String name = "user"+System.currentTimeMillis();
normalUserContext.setName(name);
normalUserContext.setAffiliation(Config.ORG1);
normalUserContext.setMspId(Config.ORG3_IDEMIX_MSP);
String enrollmentSecret = caClient.registerUser(name, Config.ORG1);
normalUserContext = caClient.idemixEnrollUser(normalUserContext, enrollmentSecret,normalUserContext.getMspId());


FabricClient fabClient = new FabricClient(normalUserContext);

В файле конфигурации добавлен код:

// org/example/config/Config.java
 public static final String ORG3 = "org3";
 public static final String ORG3_IDEMIX_MSP = "idemixMSPID1";

И файл docker-composer.yaml остаетсябез изменений. Все используемые изображения - 1.4.1

Я ожидаю, что индоссант-индоссант сможет проверить предложение tx от клиента с включенным idemix. Но теперь отчет со стороны сверстников 2019-10-18 03:20:10.312 UTC [protoutils] ValidateProposalMessage -> WARN 049 channel [mychannel]: creator certificate is not valid: Failed verifing with opts [&{<nil> <nil> [] [{1 [111 114 103 49]} {2 1} {0 <nil>} {0 <nil>}] 3 [] 0 0xc00000fab8 0}]: signature invalid: APrime and ABar don't have the expected structure 2019-10-18 03:20:10.312 UTC [comm.grpc.server] 1 -> INFO 04a unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.22.0.1:33960 error="access denied: channel [mychannel] creator org [idemixMSPID1]" grpc.code=Unknown grpc.call_duration=82.6484ms

Я не знаю почему. Я предполагаю, что, если узел не поддерживает проверку idemix tx. Есть ли какие-то переключатели, не открытые на пирах? Помогите. Любые ответы будут благодарны.

...