![](/img/trans.png)
[英]Error in Channel Creation in Hyperledger Fabric using Node.js
[英]Error when Creating Channel Using Hyperledger Fabric Node JS
我正在嘗試使用Fabric SDK node.js創建一個頻道。 當我通過bash命令創建通道時,沒有任何問題(您可以看到下面的代碼),但是當我使用node.js SDK時,出現了一些錯誤。 我正在使用TLS和客戶端身份驗證。 我不知道該錯誤意味着什么以及如何解決。 任何幫助將不勝感激。
Node JS代碼創建Channel,它在主機上執行:
var Fabric_Client = require('fabric-client');
var fs=require('fs');
var fabric_client = new Fabric_Client();
// Obtain tls cert and key from client.
let clientcert = fs.readFileSync('/home/rosalva40/Documentos/Own2/Own/data/tls/peer1-org1-cli-client.crt');
let clientkey = fs.readFileSync('/home/rosalva40/Documentos/Own2/Own/data/tls/peer1-org1-cli-client.key');
fabric_client.setTlsClientCertAndKey(clientcert.toString(),clientkey.toString())
//Orderer configuration
let pem1 = fs.readFileSync('/home/rosalva40/Documentos/Own2/Own/data/org0-ca-chain.pem');
const connectionopts = {
pem: pem1.toString()
};
var order = fabric_client.newOrderer('grpcs://localhost:9101', connectionopts)
//setup identity admin
let cert = fs.readFileSync('/home/rosalva40/Documentos/Own2/Own/data/orgs/org1/admin/msp/signcerts/cert.pem');
let pk = fs.readFileSync('/home/rosalva40/Documentos/Own2/Own/data/orgs/org1/admin/msp/keystore/b17b8a06b4928a037e621cc784cac4f8a4913087c95c68162ecae6189993a1fa_sk');
const mspid = 'org1MSP';
fabric_client.setAdminSigningIdentity(pk, cert, mspid);
// Setup create channel
var chanelName = 'mychannel';
const envelope = fs.readFileSync('/home/rosalva40/Documentos/Own2/Own/data/channel.tx');
channelConfig = fabric_client.extractChannelConfig(envelope);
signature = fabric_client.signChannelConfig(channelConfig);
const request = {
name: chanelName,
orderer: order,
config: channelConfig,
signatures : [signature],
txId : fabric_client.newTransactionID(true)
};
//Create chanel
fabric_client.createChannel(request);
當我運行createChannel.js時,在控制台中出現以下錯誤:
2019-01-17T14:30:42.278Z-錯誤:[Remote.js]:錯誤:在截止期限URL:grpcs:// localhost:9101之前無法連接-2019-01-17T14:30:42.283Z-錯誤:[ Orderer.js]:訂購者grpcs:// localhost:9101出現錯誤錯誤:在截止日期URL之前無法連接:grpcs:// localhost:9101(node:31051)UnhandledPromiseRejectionWarning:錯誤:在截止日期URL之前無法連接: grpcs:// localhost:9101位於checkState(/home/rosalva40/fabric-samples/vote/node_modules/fabric-client/node_modules/grpc/src/client.js:720:16)(node:31051)UnhandledPromiseRejectionWarning:未處理的承諾拒絕。 引發此錯誤的原因可能是拋出了一個沒有catch塊的異步函數,或者是拒絕了一個.catch()無法處理的承諾。 (拒絕標識:2)(節點:31051)[DEP0018] DeprecationWarning:已棄用未處理的承諾拒絕。 將來,未處理的承諾拒絕將以非零退出代碼終止Node.js進程。
這是訂購者節點日志:
2019-01-17 16:08:40.977 UTC [grpc] Println-> DEBU 13a grpc:Server.Serve無法創建ServerTransport:連接錯誤:desc =“ transport:http2Server.HandleStreams無法從客戶端接收序言:EOF” 2019-01-17 16:08:41.987 UTC [grpc] Println-> DEBU 13b grpc:Server.Serve無法創建ServerTransport:連接錯誤:desc =“ transport:http2Server.HandleStreams無法從客戶端接收序言:EOF” 2019-01-17 16:08:43.572 UTC [grpc] Println-> DEBU 13c grpc:Server.Serve無法創建ServerTransport:連接錯誤:desc =“ transport:http2Server.HandleStreams無法從客戶端接收序言:EOF”
這是在容器中執行的bash代碼:
DATA=data
CHANNEL_TX_FILE=/$DATA/channel.tx
CHANNEL_NAME=mychannel
# ORDERER CONNECTION ARGUMENTS
ORDERER_HOST=orderer1-org0
ORDERER_PORT_INT=7050
INT_CA_CHAINFILE=/${DATA}/org0-ca-chain.pem
ORDERER_PORT_ARGS="-o $ORDERER_HOST:$ORDERER_PORT_INT --tls --cafile $INT_CA_CHAINFILE --clientauth"
export CORE_PEER_TLS_CLIENTCERT_FILE=/$DATA/tls/peer1-org1-cli-client.crt
export CORE_PEER_TLS_CLIENTKEY_FILE=/$DATA/tls/peer1-org1-cli-client.key
ORDERER_CONN_ARGS="$ORDERER_PORT_ARGS --keyfile $CORE_PEER_TLS_CLIENTKEY_FILE --certfile $CORE_PEER_TLS_CLIENTCERT_FILE"
#ORGANIZATION ADMIN ENVIROMENT ARGUMENTS
ORG_ADMIN_HOME=/${DATA}/orgs/org1/admin
export CORE_PEER_MSPCONFIGPATH=$ORG_ADMIN_HOME/msp
export CORE_PEER_LOCALMSPID=org1MSP
#CHANNEL CREATE COMMAND
peer channel create --logging-level=DEBUG -c $CHANNEL_NAME -f $CHANNEL_TX_FILE $ORDERER_CONN_ARGS
該應用似乎無法連接到訂購者。 嘗試使用此方法:
var Client = require('fabric-client');
var Channel = require('fabric-client').Channel;
const fs = require('fs');
var client = Client.loadFromConfig("config/configfile.yaml");
/**
* @param {String} channelName Channel name used in configtxgen to create the channel transaction (mychannel)
* @param {String} channelConfigPath Path of the channel transaction (/home/root/channel-artifacts/channel.tx)
* @param {String} orderer Orderer name (orderer.example.com)
* @description Create channel
*/
async createChannel(channelName,orderer, channelConfigPath) {
var envelope = fs.readFileSync(channelConfigPath);
var channelConfig = client.extractChannelConfig(envelope);
let signature = client.signChannelConfig(channelConfig);
let request = {
config: channelConfig,
orderer: client.getOrderer(orderer),
signatures: [signature],
name: channelName,
txId: client.newTransactionID(true)
};
const result = await client.createChannel(request)
return result;
}
您可以在此鏈接中檢查configfile.yaml的結構。 不要忘記在configfile.yaml中設置客戶端頭
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.