2022-09-21T11:36:52.296Z - error: [Channel.js]: Error: 14 UNAVAILABLE: failed to connect to all addresses

208 Views Asked by At

Help me please! I have hyperledger fabric network with configuration:

  • ca-tls
  • rca-org0
  • rca-org1
  • rca-org2
  • orderer1-org0 (solo)
  • peer1-org1
  • peer2-org1
  • peer1-org2
  • peer2-org2

I have this config.yaml file:

name: "Network"
version: "1.0"

channels:
  mychannel:
    orderers:
      - orderer1-org0
    peers:
      peer1-org1:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: true
      peer2-org1:
        endorsingPeer: false
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: false
      peer1-org2:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: true
      peer2-org2:
        endorsingPeer: false
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: false

organizations:
  org0: 
    mspid: org0MSP
    orderers:
      - orderer1-org0
    certificateAuthorities:
      - rca-org0
    adminPrivateKey:
      path: path/to/org0/admin/msp/keystore/key.pem
    signCert:
      path: path/to/org0/admin/msp/signcerts/cert.pem

  org1:
    mspid: org1MSP
    peers:
      - peer1-org1
      # - peer2-org1
    certificateAuthorities:
      - rca-org1
    adminPrivateKey:
      path: path/to/org1/admin/msp/keystore/key.pem
    signedCert:
      path: path/to/org1/admin/msp/signcerts/cert.pem

  org2:
    mspid: org2MSP
    peers:
      - peer1-org2
      # - peer2-org2
    certificateAuthorities:
      - rca-org2
    adminPrivateKey:
      path: path/to/org2/admin/msp/keystore/key.pem
    signedCert:
      path: path/to/org2/admin/msp/signcerts/cert.pem

orderers:
  orderer1-org0:
    url: grpcs://orderer1-org0:7050
    grpcOptions:
      ssl-target-name-override: orderer1-org0
      grpc-max-send-message-length: 4194304
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem

peers:
  peer1-org1:
    url: grpcs://172.19.0.9:7051
    grpcOptions:
      ssl-target-name-override: peer1-org1
      grpc.keepalive_time_ms: 600000
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem

  peer2-org1:
    url: grpcs://172.19.0.9:7051
    grpcOptions:
      ssl-target-name-override: peer2-org1
      grpc.keepalive_time_ms: 600000 
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem

  peer1-org2:
    url: grpcs://172.19.0.9:7051
    grpcOptions:
      ssl-target-name-override: peer1-org2
      grpc.keepalive_time_ms: 600000 
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem

  peer2-org2:
    url: grpcs://172.19.0.9:7051
    grpcOptions:
      ssl-target-name-override: peer2-org2
      grpc.keepalive_time_ms: 600000
    tlsCACerts: path/to/org0/msp/tlscacerts/tls-ca-cert.pem


certificateAuthorities:
  ca-tls:
    url: https://0.0.0.0:7062
    httpOptions:
      verify: false
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem
    registrar:
      - enrollId: tls-ca-admin
        enrollSecret: tls-ca-adminpw
    caName: ca-tls

  rca-org0:
    url: https://0.0.0.0:7063
    httpOptions:
      verify: false
    tlsCACerts: 
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem
    registrar:
      - enrollId: rca-org0-admin
        enrollSecret: rca-org0-adminpw
    caName: rca-org0
  
  rca-org1:
    url: https://0.0.0.0:7064
    httpOptions: 
      verify: false
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem
    registrar:
      - enrollId: rca-org1-admin
        enrollSecret: rca-org1-adminpw
    caName: rca-org1
  
  rca-org2:
    url: https://0.0.0.0:7065
    httpOptions:
      verify: false
    tlsCACerts:
      path: path/to/org0/msp/tlscacerts/tls-ca-cert.pem
    registrar:
      - enrollId: rca-org2-admin
        enrollSecret: rca-org2-adminpw
    caName: rca-org2

My API code below:

   // create mychannel instance
    let channel = new Channel('mychannel', client1);

    // get certificates from couchdb wallet
    let couchdbWallet = await Wallets.newCouchDBWallet("http://xxxxx:xxxxxxx@localhost:5984");
    let user5 = await couchdbWallet.get('user5');

    if (user5) {
        let user5Cert = user5.credentials.certificate;
        let user5Key = user5.credentials.privateKey;
        let mspId = 'org1MSP';
        
        await client1.initCredentialStores();

        let cryptoSuite = client1.getCryptoSuite();
        let keyObj = await cryptoSuite.importKey(user5Key);

        let user5PubKey = keyObj._key.pubKeyHex;
        let user5PrvKeyHex = keyObj._key.prvKeyHex;

        let signer = new Signer(cryptoSuite, keyObj);
        
        // create instance of signing identity
        let signingIdentity = new SigningIdentity(
            user5Cert,
            user5PubKey,
            'org1MSP',
            cryptoSuite,
            signer
        );
        // 1. generate unsigned transaction proposal
        let transactionProposal = {
            fcn: 'Mint',
            args: ['1000'],
            chaincodeId: 'token-erc-20',
            channelId: 'mychannel'
        }

        let { proposal, txId } = await channel.generateUnsignedProposal(
            transactionProposal,
            mspId,
            user5Cert,
            true
        );
        console.log('*******proposal*****:\n', proposal);
        console.log('*******Tx Id******\n', txId);
        // now we have the 'unsigned proposal' for this tx
        // 2. calculate the hash of the tx proposal bytes
        let proposalBytes = proposal.toBuffer(); // the proposal comes from step 1
        
        // 3. calculate the signature for this tx proposal
        let signedProposal = signingIdentity.sign(proposalBytes);
        console.log('********signedProposal********\n:', signedProposal);

        // 4. send the signed tx proposal to peer(s)
        let tlscaRootCert = readFileSync(tlscaRootCertPATH, { encoding: 'utf-8' });
        console.log('tlscaRootCert: ', typeof tlscaRootCert);
        let peer1org1 = client1.newPeer('grpcs://172.19.0.9:7051',
            {
                pem: tlscaRootCert,
            }
        );

        let targets = new Array();
        targets.push(peer1org1);
      
        let sendSignedProposalReq = { signedProposal, targets };
        let proposalResponses = await channel.sendSignedProposal(sendSignedProposalReq);
        // check the proposal responces, if all good, commit the tx

        // 5. similar to step 1, generate an unsigned tx
        let commitReq = {
            proposalResponses,
            proposal,
        };
        let commitProposal = await channel.generateUnsignedTransaction(commitReq);

        /// 6. similar to step 3, sign the unsigned tx with the user's private key
        let commitProposalBytes = commitProposal.toBuffer();
        
        let signedCommitProposal = signingIdentity.sign(commitProposalBytes);

        // 7. commit the signed tx
        let response = await channel.sendSignedTransaction({
            signedTransaction: signedCommitProposal,
            request: commitReq,
        });
        console.log('**********response from orderer after commit signed tx********\n', response);

        // response.status should be 'SUCCESS' if the commit succeed
        if (response.status === 'SUCCESS') {
            // connect to event channel hub
            let eventChannelHub = new ChannelEventHub(channel);
            // 8. similar to step 1, generate an unsigned eventHub registration for the ChannelEventHub
            let unsigneEvent = eventChannelHub.generateUnsignedRegistration({
                certificate: user5Cert,
                mspId
            });

            // 9. similar to step 3, sign the unsigned eventhub registration with the user's private key
            let unsignEventBytes = unsigneEvent.toBuffer();
            let signedEvent = signingIdentity.sign(unsignEventBytes);

            // 10. register this ChannelEventHub at peer
            let connectEventChannel = eventChannelHub.connect({ signedEvent });
            console.log('***********connectEventChannel*********\n', connectEventChannel);
        }

    }

I try to submit transaction. But every time I receive this error:

  • docker-compose.yaml logs
2022-09-21T11:36:52.296Z - error: [Channel.js]: Error: 14 UNAVAILABLE: failed to connect to all addresses
  • peer1-org1 container logs:
2022-09-21 11:25:08.606 UTC 0062 WARN [endorser] ProcessProposal -> Failed to preProcess proposal error="error validating proposal: access denied: channel [mychannel] creator org [org1MSP]"
2022-09-21 11:25:08.606 UTC 0063 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.19.0.1:59086 error="error validating proposal: access denied: channel [mychannel] creator org [org1MSP]" grpc.code=Unknown grpc.call_duration=15.47295ms

Also I receive this error now:

2022-09-21T13:01:10.858Z - error: [Channel.js]: sendTransaction - no valid endorsements found

How can I resolve this problem?

1

There are 1 best solutions below

0
On BEST ANSWER

From peer logs, it seems like transaction submitter is not having access to the channel. Make sure the user identify is valid and the user's organization joined the channel. This error may come also if the MSP name given is wrong. MSP name is case sensitive.