Я пытаюсь добавить новую Org в существующую сеть Hyperledger fabri c.
Начальная сеть создается сценарием byfn. sh, который поддерживает Orderer и Org1 & Org2.
Я следовал этому примеру на Medium.com, чтобы создать файл protobuf для обновления. Все, что требует configtxgen, cryptogen и configtxlator, выполняется в соответствии с этим примером. Однако, когда дело доходит до выполнения команды peer channel signconfigtx -f org3_update_in_envelope.pb
, я хотел бы сделать это, используя Fabri c Node SDK.
Здесь следует отметить, что если я выполню команды peer channel ...
из В командной строке контейнера cli происходит обновление канала, поэтому я знаю, что файл org3_update_in_envelope.pb не поврежден.
Использование этого учебного пособия и некоторых рекомендаций из этого вопроса , у меня есть следующий код:
let envelope_pb_file_name = '/tmp/' + json.msp + '_update_in_envelope.pb'; // the pb file we create using command line
let envelope_bytes = fs.readFileSync(envelope_pb_file_name);
if (envelope_bytes === undefined) {
throw new Error(`Could not read the protobuffer file ${envelope_pb_file_name}. Error`);
}
// have the nodeSDK extract out the config update
let config_update = client.extractChannelConfig(envelope_bytes);
let signature = client.signChannelConfig(config_update);
let signatures = [];
signatures.push(signature);
//let orderers = this.loanNetwork.getChannel().getOrderers();
let orderer, ordererName = "orderer.example.com:7050";
const ORDERER_URL = 'grpcs://localhost:7050';
const data = fs.readFileSync(SyndLoanConfig.chainconfig.networkpath + '/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem').toString();
orderer = client.newOrderer(ORDERER_URL,
{
'pem': Buffer.from(data).toString(),
'ssl-target-name-override': 'orderer.example.com'
});
let mspId = client.getMspid(); // mspId shows "OrdererMSP" after this call is executed
const keyPath = SyndLoanConfig.chainconfig.networkpath + '/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore';
let keyFile, keyFileAry = fs.readdirSync(keyPath).filter(fn => fn.endsWith('_sk'));
for (let f of keyFileAry) {
keyFile = f;
break;
}
keyFile = path.join(keyPath,keyFile);
const keyPEM = fs.readFileSync(keyFile).toString();
const certPath = SyndLoanConfig.chainconfig.networkpath + '/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts';
let certFile, certFileAry = fs.readdirSync(certPath).filter(fn => fn.endsWith('.pem'));
for (let f of certFileAry) {
certFile = f;
break;
}
certFile = path.join(certPath,certFile);
const certPEM = fs.readFileSync(certFile).toString();
client.setAdminSigningIdentity(keyPEM, certPEM, "OrdererMSP");
if (orderer === undefined) {
throw new Error(`Could not find an orderer associated with channel ${orgJSON.channel}. Error.`)
}
let tx_id = client.newTransactionID();
let request = {
config: config_update, //the binary config
// envelope: envelope_bytes,
signatures: signatures, // the collected signatures
name: orgJSON.channel, // the channel name
orderer: orderer, //the orderer from above
txId: tx_id //the generated transaction id
};
let addOrgResult = await client.updateChannel(request);
Переменная addOrgResult показывает следующую ошибку:
info: implicit policy evaluation failed - 0 sub-policies were satisfied, but this policy requires 1 of the 'Writers' sub-policies to be satisfied: permission denied
status: FORBIDDEN
Журналы заказов показывают это:
2020-01-17 21:49:21.620 UTC [cauthdsl] deduplicate -> ERRO 057 Principal deserialization failure (MSP is unknown) for identity 0
2020-01-17 21:49:21.621 UTC [cauthdsl] deduplicate -> ERRO 058 Principal deserialization failure (MSP is unknown) for identity 0
2020-01-17 21:49:21.621 UTC [cauthdsl] deduplicate -> ERRO 059 Principal deserialization failure (MSP is unknown) for identity 0
2020-01-17 21:49:21.621 UTC [orderer.common.broadcast] ProcessMessage -> WARN 05a [channel: mychannel] Rejecting broadcast of config message from 192.168.208.1:56556 because of error: implicit policy evaluation failed - 0 sub-policies were satisfied, but this policy requires 1 of the 'Writers' sub-policies to be satisfied: permission denied
Проходя Полезный ответ Нихила Гупты на этот вопрос , похоже, что эта ошибка связана с
Ошибка перед предупреждением политики, ERRO 021 Ошибка основной десериализации (MSP SampleOrg неизвестен) для идентификатор 0 указывает, что идентификатор MSP, который был передан в качестве параметра с запросом, не был распознан службой заказа. Это может быть результатом передачи неверного идентификатора MSP в команду. Эта ошибка также может указывать на то, что ваша организация не присоединилась к консорциуму, размещенному на канале системы заказов. Если вы обновляете канал приложения, эта ошибка может возникнуть, если ваша организация еще не является участником канала, который вы пытаетесь обновить.
Однако я не уверен, как действовать, потому что у меня есть подключен к сети (Gateway.connect) с помощью Admin@example.com identity
. Кроме того, я также звоню client.setAdminSigningIdentity(keyPEM, certPEM, "OrdererMSP");
перед обновлением.
Любая помощь будет принята с благодарностью. Спасибо.