Эта проблема связана с уровнем доступа учетных данных, которые вы используете.
Вы должны быть администратором, чтобы добавить одноранговый узел в канал, чтобы иметь доступ к системному кодовому каналу cscc.
Другая возможная проблема заключается в том, что в конфигурации сети (обычно это файл configtx.yaml) существует некоторая политика, ограничивающая ваш доступ для присоединения однорангового узла к каналу, если вы хотите, чтобы я взглянул в ваш файл configtx и посмотрим, смогу ли я помочь.
Поскольку вы используете пример Fabcar и он вызывается с Node SDK, вы можете добавить одноранговый узел также с помощью SDK.
Пожалуйста, попробуйте:
Создание объекта клиента Fabric и регистрация пользователя с правами администратора. Вы можете сделать это в своем скрипте на основе enrollAdmin.js от Fabcar, как я объясню
В строке 72 Fabcar enrollAdmin.js вы можете видеть эту строку:
console.log('Assigned the admin user to the fabric client ::' + admin_user.toString());
Начните отсюда, внутри «тогда», которое начинается в строке 71.
Вы должны зарегистрировать личность как администратор, используя метод
fabric_client.setAdminSigningIdentity(pk, cert, MSPID);
Параметр pk - это закрытый ключ администратора, cert - это его сертификат, а MSPID - это тот, который вы указали для его организации в файле configtx.yaml.
вы можете получить pk и cert, используя модуль файловой системы из Node, и добавляет следующее:
let fs = require('fs');
let cert = fs.readFileSync(path.join(__dirname, 'PATH_TO_CERT/CERT_NAME.pem'))
let pk = fs.readFileSync(path.join(__dirname, 'PATH_TO_PK','PK_NAME'))
Обычный путь к сертификату администратора:
/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts
А к секретному ключу есть:
/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore
Теперь вы только что добавили учетную запись администратора в экземпляр ваших клиентов, если все в порядке, вам нужно создать экземпляр однорангового узла с адресом вашего партнера в следующем примере:
peer=fabric_client.newPeer(grpc://localhost:7051);
Не забудьте использовать протокол grpc, и если tls включен, вы должны использовать grpcs.
Теперь создайте экземпляр канала вашего канала, используя идентификатор канала в качестве параметра:
let channel_i=fabric_client.newChannel('mychannel')
Затем создайте запрос для блока genesis (config) канала:
let orderer = fabric_client.newOrderer(ORDERER_URL);//the urlalso with grpc protocol
let tx_id=fabric.client.newTransactionID(true); //true means it's an administrative request
let g_request={
txId: tx_id,
orderer : orderer
}
Наконец, сделайте запрос на блокировку, затем используйте его для присоединения к каналу:
channel_i.getGenesisBlock(g_request).then((block) =>{
tx_id = fabric.client.newTransactionID(true);
let j_request = {
targets : peer,
block : block,
txId : tx_id,
};
// send genesis block to the peer
return channel_i.joinChannel(j_request, 10000).then((results) =>{
if(results[0].response.status == 200) {
// join successful
console.log("Join successful!!!");
} else {
// not good
console.log("Error:: "+ results);
throw results;
}
})