【问题标题】:Hyperledger-fabric-node Error: 14 UNAVAILABLE: failed to connect to all addressesHyperledger-fabric-node 错误:14 不可用:无法连接到所有地址
【发布时间】:2021-07-19 13:23:51
【问题描述】:

我正在尝试通过 fabric-sdk-node 为我的 fabirc 网络构建一个前端,但出现了一些错误。 这是我的错误信息。

root@oyu-virtual-machine:~/hyperledger-fabric/test/webapp# node get.js
Load privateKey and signedCert
Get History
Assigning transaction_id:  467c10baa2720435fc664ebecc8e2e8dc2dc833277c1494ffd0b9cf6dbeb99cf
returned from gethistory
Gethistory result count =  1
error from gethistory =  Error: 14 UNAVAILABLE: failed to connect to all addresses
at Object.exports.createStatusError (/root/hyperledger-fabric/test/webapp/node_modules/fabric-client/node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (/root/hyperledger-fabric/test/webapp/node_modules/fabric-client/node_modules/grpc/src/client_interceptors.js:1209:28)
at InterceptingListener._callNext (/root/hyperledger-fabric/test/webapp/node_modules/fabric-client/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/root/hyperledger-fabric/test/webapp/node_modules/fabric-client/node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/root/hyperledger-fabric/test/webapp/node_modules/fabric-client/node_modules/grpc/src/client_interceptors.js:847:24) {
  code: 14,
  metadata: Metadata { _internal_repr: {}, flags: 0 },
  details: 'failed to connect to all addresses'
}
Response is  Error: 14 UNAVAILABLE: failed to connect to all addresses

这是我的 js 代码,它尝试发送请求以调用链码消息。我从织物样本中复制了它,只做了一点修改。

'use strict';

var hfc = require('fabric-client'); 
var path = require('path'); 
var util = require('util'); 
var sdkUtils = require('fabric-client/lib/utils') 
const fs = require('fs'); 
var options = { 
    user_id: 'Admin@sell.trace.com', 
    msp_id:'OrgSellMSP', 
    channel_id: 'mychannel', 
    chaincode_id: 'sellcc', 
    peer_url: 'grpcs://192.168.1.2:7051',
    privateKeyFolder:'/root/hyperledger-fabric/test/basic-network/crypto-config/peerOrganizations/sell.trace.com/users/Admin@sell.trace.com/msp/keystore', 
    signedCert:'/root/hyperledger-fabric/test/basic-network/crypto-config/peerOrganizations/sell.trace.com/users/Admin@sell.trace.com/msp/signcerts/Admin@sell.trace.com-cert.pem', 
    peer_tls_cacerts:'/root/hyperledger-fabric/test/basic-network/crypto-config/peerOrganizations/sell.trace.com/peers/peer0.sell.trace.com/tls/ca.crt', 
    server_hostname: "peer0.sell.trace.com" 
};

var channel = {}; 
var client = null; 
var targets = []; 
var tx_id = null; 
const getKeyFilesInDir = (dir) => { 
        const files = fs.readdirSync(dir) 
        const keyFiles = [] 
        files.forEach((file_name) => { 
                let filePath = path.join(dir, file_name) 
                if (file_name.endsWith('_sk')) { 
                        keyFiles.push(filePath) 
                } 
        }) 
        return keyFiles 
} 
Promise.resolve().then(() => { 
    console.log("Load privateKey and signedCert"); 
    client = new hfc(); 
    var    createUserOpt = { 
                username: options.user_id, 
                mspid: options.msp_id, 
                cryptoContent: { privateKey: getKeyFilesInDir(options.privateKeyFolder)[0], 
  signedCert: options.signedCert } 
         } 
return sdkUtils.newKeyValueStore({ 
                        path: "/tmp/fabric-client-stateStore/" 
                }).then((store) => { 
                        client.setStateStore(store) 
                         return client.createUser(createUserOpt) 
                 }) 
}).then((user) => { 
    channel = client.newChannel(options.channel_id); 
    
    let data = fs.readFileSync(options.peer_tls_cacerts); 
    let peer = client.newPeer(options.peer_url, 
         { 
            pem: Buffer.from(data).toString(), 
             'ssl-target-name-override': options.server_hostname 
        } 
    ); 
    peer.setName("peer0"); 
    channel.addPeer(peer); 
    return; 
}).then(() => { 
    console.log("Get History"); 
    var transaction_id = client.newTransactionID(); 
    console.log("Assigning transaction_id: ", transaction_id._transaction_id); 
    const request = { 
        chaincodeId: options.chaincode_id, 
        txId: transaction_id, 
        fcn: 'githistory', 
        args: 's-001'
    }; 
     return channel.queryByChaincode(request); 
}).then((query_responses) => { 
    console.log("returned from gethistory"); 
    if (!query_responses.length) { 
        console.log("No payloads were returned from gethistory"); 
    } else { 
        console.log("Gethistory result count = ", query_responses.length) 
    } 
    if (query_responses[0] instanceof Error) { 
        console.error("error from gethistory = ", query_responses[0]); 
    } 
    console.log("Response is ", query_responses[0].toString()); 
}).catch((err) => { 
    console.error("Caught Error", err); 
});

我是nodejs的新手,之前没学过nodejs。提前致谢。


新编辑

这是我在 peer0.sell.trace.com 中的错误消息,它是组织的锚。

2021-04-27 06:24:12.960 UTC [ConnProducer] NewConnection -> ERRO 035 Failed connecting to orderer.trace.com:7050 , error: context deadline exceeded
2021-04-27 06:24:12.960 UTC [deliveryClient] connect -> ERRO 036 Failed obtaining connection: Could not connect to any of the endpoints: [orderer.trace.com:7050]
2021-04-27 06:24:12.960 UTC [deliveryClient] try -> WARN 037 Got error: Could not connect to any of the endpoints: [orderer.trace.com:7050] , at 1 attempt. Retrying in 1s

这是我在 orderer.trace.com 中的错误消息

2021-04-27 06:24:19.576 UTC [core.comm] ServerHandshake -> ERRO 008 TLS handshake failed with error EOF {"server": "Orderer", "remote address": "172.21.0.7:33714"}

【问题讨论】:

    标签: node.js hyperledger-fabric-ca hyperledger-fabric-sdk-js


    【解决方案1】:

    我发现了这个问题。这是因为您的 peer1 已关闭,请使用 docker ps -a 检查。如果它启动然后检查它的日志,有时由于内存问题它会崩溃。

    此外,您的交易将毫无问题地推送到区块链。请在区块链中验证您的交易。

    【讨论】:

    • 是的,我的同行中的一些错误消息似乎以前被忽略了!但这很奇怪,因为我可以在 cli 中使用 InvokeChaincode API,而且效果很好。无论如何,非常感谢你!
    • 抱歉,yaml中的CORE_PEER_TLS_CLIENTAUTHREQUIRED是否需要设置为true才能运行js?
    • 这并不奇怪,因为您的对等方已启动并接受请求并将数据推送到区块链。还有第二个对等点,它是锚点对等点。谁与其他组织同行保持联系。问题似乎与那个同行有关。它无法连接到其他组织。
    • 您仍然可以使用 API 调用Chaincode,唯一的问题是会出现错误,但您的交易将被执行,数据将被推送到区块链
    • 对不起,请您给我进一步的指示。我不明白你的意思,因为 InvokeChaincode API 需要调用来自其他组织的数据,并且它可以工作,所以我认为锚节点没有错。我发布了 docker 日志的错误消息,你能看看它们吗?
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多