Hyperledger fabric 从核心hyperledger命令调用chaincode.js时如何获取控制台信息

Hyperledger fabric 从核心hyperledger命令调用chaincode.js时如何获取控制台信息,hyperledger-fabric,blockchain,hyperledger,hyperledger-composer,peer,Hyperledger Fabric,Blockchain,Hyperledger,Hyperledger Composer,Peer,您好,我已经创建了一个区块链网络,我正在尝试将数据保存到对等网络中,为此,我将其保存到data.json文件中,该文件包含一些已经存在的数据对象,但我的代码不起作用: > peer chaincode instantiate -o orderer.tech.com:7050 --tls --cafile > /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/tech.com/o

您好,我已经创建了一个区块链网络,我正在尝试将数据保存到对等网络中,为此,我将其保存到data.json文件中,该文件包含一些已经存在的数据对象,但我的代码不起作用:

> peer chaincode instantiate -o orderer.tech.com:7050 --tls --cafile
> /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/tech.com/orderers/orderer.tech.com/msp/tlscacerts/tlsca.tech.com-cert.pem
> -C mychannel -n mychain -l node -v 1.0 -c '{"Args":["init","SBIN0000607", "ramji", "10000007","20500"]}' -P "OR
> ('Org1MSP.peer','Org2MSP.peer')"
这是我的chaincode.js页面代码

const shim = require('fabric-shim'); 
const util = require('util'); 
var db = require('data.json'); 
var fs = require('fs');


var Chaincode = class {

  // Initialize the chaincode   async Init(stub) {
    console.info('========= example02 Init =========');
    let ret = stub.getFunctionAndParameters();
    console.info(ret);
    let args = ret.params;
    // initialise only if 4 parameters passed.
    if (args.length != 4) {
      return shim.error('Incorrect number of arguments. Expecting 4');
    }

    let Ifsc = args[0];
    let AccountHolder = args[2];
    let AccountNumber = args[1];
    let Amount = args[3];
    console.info("step2");


      console.info("step3");
      db.push({"Ifsc":Ifsc,"AccountHolder":AccountHolder,"AccountNumber":AccountNumber,"Amount":Amount})
      fs.writeFile('data.json', JSON.stringify(db));
      return shim.success();

    //return shim.success();

  }

  async Invoke(stub) {
    let ret = stub.getFunctionAndParameters();
    console.info(ret);
    let method = this[ret.fcn];
    if (!method) {
      console.log('no method of name:' + ret.fcn + ' found');
      return shim.success();
    }
    try {
      let payload = await method(stub, ret.params);
      return shim.success(payload);
    } catch (err) {
      console.log(err);
      return shim.error(err);
    }   }

  async invoke(stub, args) {
    if (args.length != 3) {
      throw new Error('Incorrect number of arguments. Expecting 3');
    }

    let A = args[0];
    let B = args[1];
    if (!A || !B) {
      throw new Error('asset holding must not be empty');
    }

    // Get the state from the ledger
    let Avalbytes = await stub.getState(A);
    if (!Avalbytes) {
      throw new Error('Failed to get state of asset holder A');
    }
    let Aval = parseInt(Avalbytes.toString());

    let Bvalbytes = await stub.getState(B);
    if (!Bvalbytes) {
      throw new Error('Failed to get state of asset holder B');
    }

    let Bval = parseInt(Bvalbytes.toString());
    // Perform the execution
    let amount = parseInt(args[2]);
    if (typeof amount !== 'number') {
      throw new Error('Expecting integer value for amount to be transaferred');
    }

    Aval = Aval - amount;
    Bval = Bval + amount;
    console.info(util.format('Aval = %d, Bval = %d\n', Aval, Bval));

    // Write the states back to the ledger
    await stub.putState(A, Buffer.from(Aval.toString()));
    await stub.putState(B, Buffer.from(Bval.toString()));

  }

  // Deletes an entity from state   async delete(stub, args) {
    if (args.length != 1) {
      throw new Error('Incorrect number of arguments. Expecting 1');
    }

    let A = args[0];

    // Delete the key from the state in ledger
    await stub.deleteState(A);   }

  // query callback representing the query of a chaincode   async query(stub, args) {
    if (args.length != 1) {
      throw new Error('Incorrect number of arguments. Expecting name of the person to query')
    }

    let jsonResp = {};
    let A = args[0];

    // Get the state from the ledger
    let Avalbytes = await stub.getState(A);
    if (!Avalbytes) {
      jsonResp.error = 'Failed to get state for ' + A;
      throw new Error(JSON.stringify(jsonResp));
    }

    jsonResp.name = A;
    jsonResp.amount = Avalbytes.toString();
    console.info('Query Response:');
    console.info(jsonResp);
    return Avalbytes;   } };

shim.start(new Chaincode());
我正在尝试将数据存储到data.json文件中,但它不起作用,而且我也无法访问chaincode.js页面的控制台信息以便进行调试。 有人能帮我吗 谢谢

使用

docker logs -f <container-name>
使用


您是否使用docker logs命令查看chaincode容器的stdout/stderr?如果console.info没有输出任何内容,您是否尝试过console.log?作为进一步的建议,我想说,出于许多原因,编写将数据保存到对等文件系统上的文件的链码不是一个好主意。也许使用hyperledger fabric 1.2中的私有数据工具会是一个更好的解决方案。您是否使用docker logs命令查看chaincode容器的stdout/stderr?如果console.info没有输出任何内容,您是否尝试过console.log?作为进一步的建议,我想说,出于许多原因,编写将数据保存到对等文件系统上的文件的链码不是一个好主意。也许使用hyperledger fabric 1.2中的私有数据工具是更好的解决方案。
docker ps --format "{{.Names}}"