【发布时间】:2021-03-08 04:06:08
【问题描述】:
connection-profile.yaml
{
"name": "network",
"version": "1.0.0",
"client": {
"organization": "Freight",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
}
}
}
},
"organizations": {
"Freight": {
"mspid": "FreightMSP",
"peers": [
"peer0.freight.example.com",
"peer1.freight.example.com"
],
"certificateAuthorities": [
"ca.freight.example.com"
]
}
},
"peers": {
"peer0.freight.example.com":{
"url": "grpcs://peer0.freight.example.com:9051",
"grpcOption": {
"ssl-target-name-override": "peer0.freight.example.com",
"hostnameOverride": "peer0.freight.example.com"
},
"tlsCACerts": {
"path": "../../network/organizations/peerOrganizations/freight.example.com/tlsca/tlsca.freight.example.com-cert.pem"
}
},
"peer1.freight.example.com":{
"url": "grpcs://peer1.freight.example.com:10051",
"grpcOption": {
"ssl-target-name-override": "peer1.freight.example.com",
"hostnameOverride": "peer1.freight.example.com"
},
"tlsCACerts": {
"path": "../../network/organizations/peerOrganizations/freight.example.com/tlsca/tlsca.freight.example.com-cert.pem"
}
}
},
"certificateAuthorities": {
"ca.freight.example.com": {
"url": "https://ca.freight.example.com:9054",
"caName": "ca.freight.example.com",
"httpOptions": {
"verify": false
},
"tlsCACerts": {
"path": "../../network/organizations/peerOrganizations/freight.example.com/ca/ca.freight.example.com-cert.pem"
}
}
}
}
发现服务:
discovery: {
enabled: true,
asLocalhost: false
}
asLocalhost 为 false,因为所有组织都托管在不同的主机上,并且位于 docker swarm 网络中。但是在调用添加资产调用函数时出现此错误。
Wallet Path: /home/hlfabric/fabric/api/freight/wallet
2021-03-06T17:58:15.407Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Endorser- name: peer0.freight.example.com, url:grpcs://peer0.freight.example.com:9051, connected:false, connectAttempted:true
2021-03-06T17:58:15.408Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer0.freight.example.com url:grpcs://peer0.freight.example.com:9051 timeout:3000
2021-03-06T17:58:15.409Z - info: [NetworkConfig]: buildPeer - Unable to connect to the endorser peer0.freight.example.com due to Error: Failed to connect before the deadline on Endorser- name: peer0.freight.example.com, url:grpcs://peer0.freight.example.com:9051, connected:false, connectAttempted:true
2021-03-06T17:58:18.412Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Endorser- name: peer1.freight.example.com, url:grpcs://peer1.freight.example.com:10051, connected:false, connectAttempted:true
2021-03-06T17:58:18.412Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer1.freight.example.com url:grpcs://peer1.freight.example.com:10051 timeout:3000
2021-03-06T17:58:18.412Z - info: [NetworkConfig]: buildPeer - Unable to connect to the endorser peer1.freight.example.com due to Error: Failed to connect before the deadline on Endorser- name: peer1.freight.example.com, url:grpcs://peer1.freight.example.com:10051, connected:false, connectAttempted:true
2021-03-06T17:58:21.423Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Discoverer- name: peer0.freight.example.com, url:grpcs://peer0.freight.example.com:9051, connected:false, connectAttempted:true
2021-03-06T17:58:21.423Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer0.freight.example.com url:grpcs://peer0.freight.example.com:9051 timeout:3000
2021-03-06T17:58:21.423Z - error: [ServiceEndpoint]: ServiceEndpoint grpcs://peer0.freight.example.com:9051 reset connection failed :: Error: Failed to connect before the deadline on Discoverer- name: peer0.freight.example.com, url:grpcs://peer0.freight.example.com:9051, connected:false, connectAttempted:true
2021-03-06T17:58:24.425Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Discoverer- name: peer1.freight.example.com, url:grpcs://peer1.freight.example.com:10051, connected:false, connectAttempted:true
2021-03-06T17:58:24.425Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer1.freight.example.com url:grpcs://peer1.freight.example.com:10051 timeout:3000
2021-03-06T17:58:24.425Z - error: [ServiceEndpoint]: ServiceEndpoint grpcs://peer1.freight.example.com:10051 reset connection failed :: Error: Failed to connect before the deadline on Discoverer- name: peer1.freight.example.com, url:grpcs://peer1.freight.example.com:10051, connected:false, connectAttempted:true
2021-03-06T17:58:24.425Z - error: [DiscoveryService]: send[supplychain-channel] - no discovery results
Failed to evaluate transaction: function () Discovery Service has failed to return results
网络拓扑是 5 个 orgs 有 2 个 orgs 有 1 个 peer 没有 orderer 和 3 个 orgs 有 2 个 peer 有 orderer。 Orderers 是 peerOrganization 本身的一部分。每个组织都有自己的 CA。 此错误的原因可能是什么?
更新发现:
await gateway.connect(ccp, {
wallet,
identity: username,
discovery: {
enabled: true,
asLocalhost: true
},
clientTlsIdentity: 'freight'
})
const network = await gateway.getNetwork('supplychain-channel')
console.log(network)
控制台:
Wallet Path: /home/hlfabric/fabric/api/freight/wallet
2021-03-10T04:54:26.827Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Committer- name: orderer0.freight.example.com:9050, url:grpcs://localhost:9050, connected:false, connectAttempted:true
2021-03-10T04:54:26.828Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server orderer0.freight.example.com:9050 url:grpcs://localhost:9050 timeout:3000
2021-03-10T04:54:26.828Z - error: [DiscoveryService]: _buildOrderer[supplychain-channel] - Unable to connect to the discovered orderer orderer0.freight.example.com:9050 due to Error: Failed to connect before the deadline on Committer- name: orderer0.freight.example.com:9050, url:grpcs://localhost:9050, connected:false, connectAttempted:true
2021-03-10T04:54:29.830Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Committer- name: orderer1.carrier.example.com:11050, url:grpcs://localhost:11050, connected:false, connectAttempted:true .....
NetworkImpl {
contracts: Map {},
initialized: true,
commitListeners: Map {},
blockListeners: Map {},
gateway:
Gateway {
networks: Map { 'supplychain-channel' => [Circular] },
options:
{ queryHandlerOptions: [Object],
eventHandlerOptions: [Object],
discovery: [Object],
wallet: [Wallet],
identity: 'sai',
clientTlsIdentity: 'freight' },
client:
Client {
type: 'Client',
name: 'gateway client',
mspid: null,
_tls_mutual: [Object],
endorsers: [Map],
committers: [Map],
channels: [Map],
centralizedOptions: null },
identity:
{ credentials: [Object], mspId: 'FreightMSP', type: 'X.509' },
identityContext:
IdentityContext {
type: 'IdentityContext',
client: [Client],
user: [User],
name: 'sai',
mspid: 'FreightMSP',
transactionId: null,
nonce: null } },
channel:
Channel {
type: 'Channel',
name: 'supplychain-channel',
client:
Client {
type: 'Client',
name: 'gateway client',
mspid: null,
_tls_mutual: [Object],
endorsers: [Map],
committers: [Map],
channels: [Map],
centralizedOptions: null },
endorsers:
Map {
'peer0.freight.example.com:9051' => [Endorser],
'peer1.freight.example.com:10051' => [Endorser] },
committers: Map { 'orderer0.freight.example.com:9050' => [Committer] },
msps:
Map {
'FreightMSP' => [Object],
'ConsigneeMSP' => [Object],
'ShipperMSP' => [Object],
'CarrierMSP' => [Object],
'CustomMSP' => [Object] } },
eventServiceManager:
EventServiceManager {
eventServices: Map {},
network: [Circular],
channel:
Channel {
type: 'Channel',
name: 'supplychain-channel',
client: [Client],
endorsers: [Map],
committers: [Map],
msps: [Map] },
mspId: 'FreightMSP',
identityContext:
IdentityContext {
type: 'IdentityContext',
client: [Client],
user: [User],
name: 'sai',
mspid: 'FreightMSP',
transactionId: null,
nonce: null } },
realtimeFilteredBlockEventSource:
BlockEventSource {
listeners: Set {},
started: false,
eventServiceManager:
EventServiceManager {
eventServices: Map {},
network: [Circular],
channel: [Channel],
mspId: 'FreightMSP',
identityContext: [IdentityContext] },
blockQueue:
OrderedBlockQueue { queue: Map {}, nextBlockNumber: undefined },
asyncNotifier:
AsyncNotifier {
running: false,
readCallback: [Function: bound getNextBlock],
notifyCallback: [AsyncFunction: bound notifyListeners] },
blockType: 'filtered' },
realtimeFullBlockEventSource:
BlockEventSource {
listeners: Set {},
started: false,
eventServiceManager:
EventServiceManager {
eventServices: Map {},
network: [Circular],
channel: [Channel],
mspId: 'FreightMSP',
identityContext: [IdentityContext] },
blockQueue:
OrderedBlockQueue { queue: Map {}, nextBlockNumber: undefined },
asyncNotifier:
AsyncNotifier {
running: false,
readCallback: [Function: bound getNextBlock],
notifyCallback: [AsyncFunction: bound notifyListeners] },
blockType: 'full' },
realtimePrivateBlockEventSource:
BlockEventSource {
listeners: Set {},
started: false,
eventServiceManager:
EventServiceManager {
eventServices: Map {},
network: [Circular],
channel: [Channel],
mspId: 'FreightMSP',
identityContext: [IdentityContext] },
blockQueue:
OrderedBlockQueue { queue: Map {}, nextBlockNumber: undefined },
asyncNotifier:
AsyncNotifier {
running: false,
readCallback: [Function: bound getNextBlock],
notifyCallback: [AsyncFunction: bound notifyListeners] },
blockType: 'private' },
discoveryService:
DiscoveryService {
type: 'DiscoveryService',
name: 'supplychain-channel',
channel:
Channel {
type: 'Channel',
name: 'supplychain-channel',
client: [Client],
endorsers: [Map],
committers: [Map],
msps: [Map] },
client:
Client {
type: 'Client',
name: 'gateway client',
mspid: null,
_tls_mutual: [Object],
endorsers: [Map],
committers: [Map],
channels: [Map],
centralizedOptions: null },
refreshAge: undefined,
discoveryResults:
{ msps: [Object],
orderers: [Object],
peers_by_org: [Object],
timestamp: 1615352105872 },
asLocalhost: true,
currentTarget:
Discoverer {
name: 'peer0.freight.example.com',
mspid: 'FreightMSP',
client: [Client],
connected: true,
connectAttempted: true,
endpoint: [Endpoint],
service: [ServiceClientImpl],
serviceClass: [Function],
type: 'Discoverer',
options: [Object] },
targets: [ [Discoverer], [Discoverer] ],
_action: { init: false, request: [Request] },
_payload:
<Buffer 0a c4 07 0a 9f 07 0a 0a 46 72 65 69 67 68 74 4d 53 50 12 90 07 2d 2d 2d 2d 2d 42 45 47 49 4e 20 43 45 52 54 49 46 49 43 41 54 45 2d 2d 2d 2d 2d 0a 4d ... >,
_signature:
<Buffer 30 44 02 20 18 dc 09 b5 2c 95 5d 98 14 c8 ee a0 47 48 f9 95 ae 74 1d b0 a9 d3 0e 21 cc dd 06 40 18 bc f4 f9 02 20 21 49 01 65 0b 2d 67 23 35 51 a8 dc ... >,
requestTimeout: undefined },
queryHandler:
SingleQueryHandler { currentPeerIndex: 0, peers: [ [Endorser], [Endorser] ] } }
【问题讨论】:
-
您在哪里运行您的客户端应用程序?
-
@GariSingh 与货运组织同行和订购者正在运行的相同。
-
那么在连接到同一个 Docker Swarm 网络的 Docker 容器中?
-
@GariSingh 所以实际上我在本地有完整的网络设置,我的意思是,正如我所说,我有 5 个组织托管在 5 个不同的虚拟机上,这些虚拟机位于使用 Virtualbox 的主机上。这 5 个虚拟机是 docker swarm 的一部分。这里的观点是,包括结构文档和各种媒体文章在内的大多数示例都有不同的排序组织,这在分布式网络方面没有意义。因此,在 KC Tam 的一篇 Medium 文章之后,我有 3 个对等组织在他们的机器上托管订购者。所以我启动的所有docker容器都在使用网络:ab:external:name:ab
-
@GariSingh 是的,所有 docker 容器都连接到 docker swarm 覆盖网络。我尝试了不同的 grpc 选项,但没有任何效果。但是我更改了上面的发现对象并添加了这个
await gateway.connect(ccp, { wallet, identity: username, discovery: { enabled: true, asLocalhost: false }, clientTlsIdentity: 'tlsid' }),我现在得到了这个Failed to evaluate transaction: function () { [native code] }不确定我在哪里犯了错误。
标签: hyperledger-fabric hyperledger-chaincode hyperledger-fabric-sdk-js