Hyperledger Fabric更新分类帐失败

时间:2018-10-08 14:04:09

标签: hyperledger-fabric hyperledger grpc

我试图通过Hyperledger Fabric中的第一个演示“编写您的第一个应用程序” https://hyperledger-fabric.readthedocs.io/en/release-1.2/write_first_app.html。我成功运行了查询部分(queryAllCars和queryCar方法)。 我在更新分类帐部分时遇到问题。那就是我要做的:

  1. 将值放入invoke.js文件中:

    var request = {
    //targets: let default to the peer assigned to the client
    chaincodeId: 'fabcar',
    fcn: 'createCar',
    args: ['CAR10', 'Chevy', 'Volt', 'Red', 'Nick'],
    chainId: 'mychannel',
    txId: tx_id};
    
  2. 运行节点invoke.js并进入终端:

  

商店   路径:/ home / krystian / hyperledger-test / fabric-samples / fabcar / hfc-key-store

     

从持久性成功加载了user1

     

分配transaction_id:0dfca05d6f19187275c6a31febc81429ddca3a284fd590c631961a10f8da5aee

     

交易建议很好

     

成功发送提案并收到   ProposalResponse:状态-200,消息-“”

     

无法调用   成功::错误:eventhub :: 14出现问题   不可用:TCP写入失败

at createStatusError (/home/krystian/hyperledger-test/fabric-samples/fabcar/node_modules/fabric-client/node_modules/grpc/src/client.js:64:15)
at ClientDuplexStream._emitStatusIfDone (/home/krystian/hyperledger-test/fabric-samples/fabcar/node_modules/fabric-client/node_modules/grpc/src/client.js:270:19)
at ClientDuplexStream._receiveStatus (/home/krystian/hyperledger-test/fabric-samples/fabcar/node_modules/fabric-client/node_modules/grpc/src/client.js:248:8)
at /home/krystian/hyperledger-test/fabric-samples/fabcar/node_modules/fabric-client/node_modules/grpc/src/client.js:804:12

这是我的package.json

{
"name": "fabcar",
"version": "1.0.0",
"description": "Hyperledger Fabric Car Sample Application",
"main": "fabcar.js",
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
    "fabric-ca-client": "^1.2.1",
    "fabric-client": "^1.2.1",
    "grpc": "^1.15.1"
},
"author": "Anthony O'Dowd",
"license": "Apache-2.0",
"keywords": [
    "Hyperledger",
    "Fabric",
    "Car",
    "Sample",
    "Application"
]

}

这是invoke.js崩溃的一部分:

        let event_hub = fabric_client.newEventHub();

    event_hub.setPeerAddr('grpc://localhost:7053');

    // using resolve the promise so that result status may be processed
    // under the then clause rather than having the catch clause process
    // the status
    let txPromise = new Promise((resolve, reject) => {
        let handle = setTimeout(() => {
            event_hub.disconnect();
            resolve({event_status : 'TIMEOUT'}); //we could use reject(new Error('Trnasaction did not complete within 30 seconds'));
        }, 3000);
        **event_hub.connect();
        event_hub.registerTxEvent(transaction_id_string, (tx, code) => {
            // this is the callback for transaction event status
            // first some clean up of event listener
            clearTimeout(handle);
            event_hub.unregisterTxEvent(transaction_id_string);**
            event_hub.disconnect();

我尝试删除fabcar / node_modules并再次运行npm install。 我也尝试过运行sudo节点invoke.js。 我完成了《建立您的第一个网络》教程,一切正常。

节点版本v8.9.0

NPM版本5.5.1

我正在使用Linux Mint

当initLedger方法和查询正常进行时,更新分类帐可能会出现问题?

1 个答案:

答案 0 :(得分:0)

我再次遇到该错误,终于解决了。 在grpc版本上不匹配。我以前有Hyperledger Fabric网络v1.3.0,该网络使用grpc@1.14.2,我的客户端应用程序已在package.json文件中设置了fabric-client v.1.1.0和grpc 1.6.6。

在我修复了另一个错误之后:

  

无法成功调用:: TypeError:fabric_client.newEventHub不是函数

但是该错误已在此处解决: unable to find newEventHub function

因此,如果您遇到相同的问题,则必须在网络和客户端应用程序中使用相同版本的软件包。