Когда я пытаюсь обновить канал для узлов привязки с помощью 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 в качестве входных данных.