Это дополнительный вопрос к тому, который я задавал ранее ( здесь ), и я пытаюсь реализовать решение, предложенное @ david_k.
Я использую пример Fabcar в качестве базы и строю на этом.
Я запустил startFabric.sh, мне пришло сообщение «Успешно отправлено предложение присоединиться к каналу»
docker exec -e "CORE_PEER_LOCALMSPID = Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com равноправный канал create -o orderer. example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
2019-03-11 08: 54: 51.857 UTC [channelCmd] InitCmdFactory -> ИНФО 001
Инициализированные соединения с заказчиком и заказчиком
2019-03-11 08: 54: 52.076 UTC [cli.common] readBlock -> INFO 002
Полученный блок: 0
Присоедините peer0.org1.example.com к каналу.
docker exec -e "CORE_PEER_LOCALMSPID = Org1MSP" -e
"CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp"
peer0.org1.example.com присоединение к равноправному каналу -b mychannel.block
2019-03-11 08: 54: 52.387 UTC [channelCmd] InitCmdFactory -> INFO 001
Инициализированные соединения с заказчиком и заказчиком
2019-03-11 08: 54: 52.481 UTC [channelCmd] executeJoin -> INFO 002
Успешно отправлено предложение присоединиться к каналу
Затем я пытаюсь инициализировать channelEventHub из класса «Channel», используя Fabric Node SDK (fabric-client), чтобы подписаться на события, генерируемые моим цепным кодом.
const channel = new Channel('mychannel',ccp);
const channelEventHub = channel.getChannelEventHub('peer0.org1.example.com')
Я получаю следующую ошибку:
Не удалось отправить транзакцию: ошибка: не удалось обнаружить :: ошибка: узел
с именем "peer1.org1.example.com", не назначенным этому каналу
После этого я попытался использовать функцию getPeers () из Channel Object, но получил пустой массив, который в противном случае должен был бы вернуть массив пиров, зарегистрированных на канале.
const channel = new Channel('mychannel',ccp);
let peers = channel.getChannelPeers();
Консоль зарегистрировала одноранговые узлы, и она вернулась [].
Мой профиль подключения JSON выглядит следующим образом (это профиль в базовой сети, я его не менял).
{ "имя": "основной-сеть", "версия": "1.0.0",
"Клиент": { "организация": "Org1",
"Соединение": { "тайм-аут": { "равный": { "Индоссант": "300"}, "заказчик": "300"}}},
"каналы":
{"мой канал":
{
"" заказчики: [ "orderer.example.com"],
«коллеги»:
{
"Peer0.org1.example.com": {}
}
}
}, "Организации": { "Org1": { "mspid": "Org1MSP", "сверстники": [ "peer0.org1.example.com"], "certificateAuthorities": [ "ca.example.com"]} , "Org2": { "mspid": "Org2MSP", "коллеги": [ "peer0.org2.example.com"], "certificateAuthorities": [ "ca.example.com"]}} "" заказчики: { "orderer.example.com": { "URL": "КПГР: // локальный: 7050"}}, "сверстники": { "peer0.org1.example.com": { "URL": "КПГР: / /localhost:7051"},"peer0.org2.example.com":{"url":"grpc://localhost:7052"}},"certificateAuthorities":{"ca.example.com":{"url ":" http://localhost:7054","caName":"ca.example.com"}}}
Здесь вы можете ясно видеть, что в канале определен одноранговый узел.
Я не понимаю, почему я получаю эту ошибку. Любые указатели о том, как это исправить, будут очень благодарны.
Обновление:
Я создал класс StateStore, который реализует интерфейс fabric_client.IKeyValueStore
Обосновал это. Затем установите государственный магазин, используя
await fabric_client.setStateStore(stateStore);
После чего я создал пользователя и установил контекст пользователя с помощью следующих команд
let user = await fabric_client.createUser(userOpts);
// Set the userContext by passing the User Context
await fabric_client.setUserContext(user);
Затем я установил права подписи администратора (не уверен, если это необходимо). Затем сохранил пользователя в State Store.
ждут fabric_client.setAdminSigningIdentity(admin_pk,admin_cert,admin_mspid);
await fabric_client.saveUserToStateStore ();
Затем я консоль Logged EventHub, который ясно показывает, что есть clientContext.
{
"_last_block_seen": null,
"_starting_block_number": null,
"_ending_block_number": null,
"_ending_block_seen": false,
"_ending_block_newest": false,
"_allowRegistration": true,
"_start_stop_registration": null,
"_chaincodeRegistrants": {},
"_block_registrant_count": 0,
"_blockRegistrations": {},
"connectCallback": null,
"_transactionRegistrations": {},
"_event_client": null,
"_stream": null,
"_connected": false,
"_connect_running": false,
"_disconnect_running": false,
"_filtered_stream": true,
"_current_stream": 0,
"_clientContext": {
"name": "basic-network",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": {
"orderers": [
"orderer.example.com"
],
"peers": {
"peer0.org1.example.com": {}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com"
],
"certificateAuthorities": [
"ca.example.com"
]
},
"Org2": {
"mspid": "Org2MSP",
"peers": [
"peer0.org2.example.com"
],
"certificateAuthorities": [
"ca.example.com"
]
}
},
"orderers": {
"orderer.example.com": {
"url": "grpc://localhost:7050"
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpc://localhost:7051"
},
"peer0.org2.example.com": {
"url": "grpc://localhost:7052"
}
},
"certificateAuthorities": {
"ca.example.com": {
"url": "http://localhost:7054",
"caName": "ca.example.com"
}
}
},
"_channel": {
"_name": "mychannel",
"_channel_peers": {},
"_anchor_peers": [],
"_orderers": {},
"_kafka_brokers": [],
"_clientContext": {
"name": "basic-network",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": {
"orderers": [
"orderer.example.com"
],
"peers": {
"peer0.org1.example.com": {}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com"
],
"certificateAuthorities": [
"ca.example.com"
]
},
"Org2": {
"mspid": "Org2MSP",
"peers": [
"peer0.org2.example.com"
],
"certificateAuthorities": [
"ca.example.com"
]
}
},
"orderers": {
"orderer.example.com": {
"url": "grpc://localhost:7050"
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpc://localhost:7051"
},
"peer0.org2.example.com": {
"url": "grpc://localhost:7052"
}
},
"certificateAuthorities": {
"ca.example.com": {
"url": "http://localhost:7054",
"caName": "ca.example.com"
}
}
},
"_msp_manager": {
"_msps": {}
},
"_discovery_interests": {},
"_discovery_results": null,
"_last_discover_timestamp": null,
"_discovery_peer": null,
"_use_discovery": false,
"_as_localhost": true,
"_endorsement_handler": null,
"_commit_handler": null
},
"_peer": {
"_options": {
"grpc.max_receive_message_length": -1,
"grpc.max_send_message_length": -1
},
"_url": "grpc://localhost:7051",
"_endpoint": {
"addr": "localhost:7051",
"creds": {}
},
"_name": "localhost:7051",
"_request_timeout": 45000,
"_grpc_wait_for_ready_timeout": 3000,
"_endorserClient": {
"$interceptors": [],
"$interceptor_providers": [],
"$channel": {}
},
"_discoveryClient": {
"$interceptors": [],
"$interceptor_providers": [],
"$channel": {}
}
}
}
Но все же, когда я пытаюсь подключиться с помощью EventHub.connect(true)
, я получаю следующую ошибку.
Не удалось отправить транзакцию: Ошибка: Ошибка при подключении ChannelEventhub к одноранговому узлу, либо clientContext не был должным образом инициализирован, отсутствует идентификатор userContext или идентификация администратора, либо отсутствует подписанное событие