问题描述
我正在尝试通过 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"}
解决方法
我发现了这个问题。这是因为您的 peer1 已关闭,请使用 docker ps -a 检查。如果它启动然后检查它的日志有时由于内存问题它会崩溃。
此外,您的交易将毫无问题地推送到区块链。请在区块链中验证您的交易。