Этот вопрос поднимается из моего предыдущего вопроса о добавлении новой организации в существующий канал с использованием fabri c node sdk .
Gari помог решить мои проблемы с помощью Node SDK и я смог успешно добавить Org в канал mychannel, который является частью byfn. sh.
Теперь, следуя оригинальному учебнику , который я адаптировал, я хочу добавьте новых участников организации, чтобы присоединиться к каналу mychannel. Я застрял здесь в данный момент и не смог найти решение, несмотря на то, что смотрю на Stackoverflow, HL Lists и HL Jira.
На высоком уровне я следую следующим шагам:
- Добавить новую организацию в канал (использует Client.updateChannel API). Я могу сделать это успешно.
- Затем я поднимаю одноранговый узел и контейнеры couchdb docker для одноранговых узлов, связанных с новой организацией. Новая организация - Org3, а вот профиль подключения
{
"name": "first-network-org3",
"version": "1.0.0",
"client": {
"organization": "Org3",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
}
}
}
},
"organizations": {
"Org3": {
"mspid": "Org3MSP",
"peers": [
"peer0.org3.example.com"
]
}
},
"peers": {
"peer0.org3.example.com": {
"url": "grpcs://localhost:11051",
"tlsCACerts": {
"path": "/usr/local/fabric/fabric-samples/first-network/crypto-config/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem"
},
"grpcOptions": {
"ssl-target-name-override": "peer0.org3.example.com"
}
}
}
}
Я использую клиент, указывающий на профиль соединения Org1, и извлекаю объекты Network и Channel, а затем извлекаю блок происхождения канала. Затем я создаю новый профиль соединения, чтобы указать на одноранговые узлы Org3 и подключиться к и получить новую (Org3) ссылку на клиента. Используя этот клиент Org3, я создаю новый объект Peer (
Client.newPeer
) , а затем выдает
channel.joinChannel(request)
.
Каждый раз из клиентского приложения я получаю следующую ошибку
Ошибка: 2 НЕИЗВЕСТНО: доступ запрещен: создатель канала [] org [Org1MSP]
Docker Журналы для Peer 3 говорят следующее:
2020-01-24 19: 46: 47.774 UT C [protoutils] ValidateProposalMessage -> WARN 039 канал [] : Ошибка MSP: ожидаемый идентификатор MSP Org3MSP, получено Org1MSP
2020-01-24 19: 46: 47.774 UT C [comm.grp c .server] 1 -> INFO 03a унарный вызов завершен, grp c .service = protos.Endorser grp c .method = ProcessProposal grp c .peer_address = 192.168.240.1: 49860 error = "доступ запрещен: создатель канала [] org [Org1MSP]" grp c .code = Неизвестный grp c .call_duration = 329,567 мкс
Я знаю, что эта ошибка связана с тем, что MSP ID, отправляемый с запросом Channel.joinChannel
, - это Org1MSP, но я не уверен, почему. Я отправляю одноранговый узел, созданный с помощью клиента Org3, и идентификатор транзакции также является идентификатором транзакции администратора Org3.
Вот мой код:
public async addPeerToChannel(orgJSON) {
try {
let json = JSON.parse(JSON.stringify(orgJSON));
if (json.name === undefined || json.msp === undefined || json.domain === undefined || json.peer === undefined
||
json.peerport === undefined || json.channel === undefined || json.peerurl === undefined) {
throw new Error("Invalid org info provided to addPeerToChannel method");
}
let client = this.loanGateway.getClient(); // get the client reference for Org1 ccp
let cMSP = client.getMspid(); // confirms MSP ID is Org1MSP
let network = await this.loanGateway.getNetwork(json.channel); // mychannel
let channel = network.getChannel();
if (client === undefined || network === undefined || channel === undefined) {
throw new Error(`Invalid network, orderer, channel or client handle in function addPeerToChannel. Error.`);
}
let data = fs.readFileSync(SyndLoanConfig.chainconfig.networkpath + `/crypto-config/peerOrganizations/${json.domain}/peers/${json.peer}/tls/ca.crt`).toString();
// load a new client for Org3
const gateway = new Gateway();
const wallet = this.localWallet;
const ccpFile = fs.readFileSync(path.join(SyndLoanConfig.chainconfig.networkpath,'connection-org3_ac.json'));
const ccp = JSON.parse(ccpFile.toString());
await this.importWalletIdentityFromCryptoConfig('Admin@org3.example.com','Org3MSP');
await gateway.connect(ccp, {
identity: 'Admin@org3.example.com',
wallet: wallet
});
let newClient = gateway.getClient();
let peer = newClient.newPeer(json.peerurl,
{
'pem': Buffer.from(data).toString(),
'ssl-target-name-override': json.peer,
'name': json.peer,
'grpc.keepalive_timeout_ms': 10000
})
if (peer === undefined) {
throw new Error(`Could not create the peer for URL ${json.peerurl}. Error.`)
}
channel.addPeer(peer, json.msp);
let request = {
txId: client.newTransactionID() //the generated transaction id
};
let gBlock = await channel.getGenesisBlock(request);
// for(let p of ccp.peers)
// {
// ccp.peers[p].tlsCACerts.path = path.join(SyndLoanConfig.chainconfig.networkpath,ccp.peers[p].tlsCACerts.path);
// }
// let newNetwork = await gateway.getNetwork("mychannel");
// let newChannel = newNetwork.getChannel();
let channel_request = {
targets: [peer],
block: gBlock,
txId: newClient.newTransactionID(true)
}
let proposal_response = {};
proposal_response = await channel.joinChannel(channel_request);
if (proposal_response[0].code !== 200)
{
throw new Error(`Could not make the peer ${json.peer} join channel ${json.channel}. Error: ${proposal_response[0].message}`);
}
}
catch (err) {
throw new Error(err.message);
}
}
Я уверен, что что-то упустил, но Я не могу выяснить, что и почему отправляется запрос joinChannel с MSP, установленным в Org1MSP (кстати, где этот набор?)
Ценю любые советы о том, как поступить. Спасибо.