Ошибка: отсутствует параметр запроса "Заказчик" в Client.getTargetOrderer. - PullRequest
0 голосов
/ 26 мая 2020

Когда я пытаюсь обновить канал для узлов привязки с помощью fabri c nodesdk, возникает проблема «Ошибка: отсутствует параметр запроса« orderer »в Client.getTargetOrderer»

Ниже приведен код, который я Пытаюсь.

let envelope = fs.readFileSync('./Org1MSPanchors.tx');
let serverCertPeer = await storage_util.getFileContent(
      '/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem',
      'fabriccerts');
let serverCertOrderer = await storage_util.getFileContent(
      `/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem`,
      `fabriccerts`);
let adminKey = await storage_util.getFileContent(
      '/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/43c405d609851948a9a1ff698eff1ad6cc322bca31182e59a8135b73046d022d_sk',
      'fabriccerts');
let adminCert = await storage_util.getFileContent(
      '/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem',
      'fabriccerts');
  const client = new Client();
  client.setAdminSigningIdentity(
      adminKey.toString(), adminCert.toString(), `Org1MSP`);
  const channel = client.newChannel('channelnew1');
  let peer = client.newPeer('grpcs://PRIVATEIP:7051', {
    'pem': Buffer.from(serverCertPeer).toString(),
    'ssl-target-name-override': 'peer0.org1.example.com'
  });
  channel.addPeer(peer);
   let orderer = client.newOrderer('grpcs://PRIVATEIP:7050', {
    'pem': Buffer.from(serverCertOrderer).toString(),
    'ssl-target-name-override': 'orderer.example.com'
  });
  channel.addOrderer(orderer);
  const targets = [];
  targets.push(orderer);
  // extract the channel config bytes from the envelope to be signed
   var channelConfig = client.extractChannelConfig(envelope);

        //Acting as a client in the given organization provided with "orgName" param
        // sign the channel config bytes as "endorsement", this is required by
        // the orderer's channel creation policy
        // this will use the admin identity assigned to the client when the connection profile was loaded
        let signature = client.signChannelConfig(channelConfig);
    let request = {
      targets: targets,
            config: channelConfig,
            signatures: [signature],
            name: 'channelnew1',
            txId: client.newTransactionID(true) // get an admin based transactionID
        };

        var promises = [];
        let event_hubs = channel.getChannelEventHubsForOrg();
        console.log('found %s eventhubs for this organization',event_hubs.length);
        event_hubs.forEach((eh) => {
            let anchorUpdateEventPromise = new Promise((resolve, reject) => {
                console.log('anchorUpdateEventPromise - setting up event');
                const event_timeout = setTimeout(() => {
                    let message = 'REQUEST_TIMEOUT:' + eh.getPeerAddr();
                    console.log(message);
                    eh.disconnect();
                }, 60000);
                eh.registerBlockEvent((block) => {
                    console.log('The config update has been committed on peer %s',eh.getPeerAddr());
                    clearTimeout(event_timeout);
                    resolve();
                }, (err) => {
                    clearTimeout(event_timeout);
                    console.log(err);
                    reject(err);
                },
                    // the default for 'unregister' is true for block listeners
                    // so no real need to set here, however for 'disconnect'
                    // the default is false as most event hubs are long running
                    // in this use case we are using it only once
                    {unregister: true, disconnect: true}
                );
                eh.connect();
            });
            promises.push(anchorUpdateEventPromise);
        });

        var sendPromise = client.updateChannel(request);
        // put the send to the orderer last so that the events get registered and
        // are ready for the orderering and committing
        promises.push(sendPromise);
        let results = await Promise.all(promises);
        console.log(util.format('------->>> R E S P O N S E : %j', results));

Журналы ошибок:

Error: Missing "orderer" request parameter at Client.getTargetOrderer (/srv/node_modules/fabric-client/lib/Client.js:1809:10) at Client._createOrUpdateChannel (/srv/node_modules/fabric-client/lib/Client.js:792:24) at Client.updateChannel (/srv/node_modules/fabric-client/lib/Client.js:774:15) at Object.exports.updateAnchorPeers (/channelmanagement.js:200:28) at <anonymous> at process._tickDomainCallback (internal/process/next_tick.js:229:7)

Подобрал код с баланса-перевода. При переносе баланса они обновлялись из config. json, но здесь я жестко запрограммировал на данный момент, и infuture примет то же самое из api в качестве входных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...