Ошибка при создании канала с использованием Hyperledger Fabric Node JS

Я пытаюсь создать канал с помощью Fabric SDK node.js. Когда я создаю канал с помощью команд bash, у меня нет проблем (вы можете увидеть код ниже), но когда я использую SDK node.js, у меня возникают некоторые ошибки. Я использую TLS и аутентификацию клиента. Я не могу понять, что означает ошибка и как ее решить. Любая помощь будет оценена.

Код узла JS для создания канала, он был выполнен на хост-машине:

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 (узел: 31051) UnhandledPromiseRejectionWarning: Ошибка: не удалось подключиться до истечения крайнего срока URL: grpcs: // localhost: 9101 в checkState (/home/rosalva40/fabric-samples/vote/node_modules/fabric-client/node_modules/grpc/src/client.js:720:16) (узел: 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

person Gonzalo Vilches    schedule 17.01.2019    source источник


Ответы (1)


Похоже, у приложения проблемы с подключением к заказчику. Попробуйте воспользоваться этим методом:

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

person Alexander Yammine    schedule 19.01.2019
comment
Можете ли вы добавить немного дополнительной информации, например, параметры примера, местоположения - person iam batman; 16.01.2020