【问题标题】:Hyperledger Fabric NodeJS Chaincode - Retrieve caller identifierHyperledger Fabric NodeJS 链码 - 检索调用者标识符
【发布时间】:2018-09-05 20:34:36
【问题描述】:

我正在尝试开发一个链码,它必须创建和存储汽车对象并允许转移汽车的所有权。

当调用“createCar”时,我想将车主设置为提交交易的标识符/证书。

我还在开发一种允许转让汽车所有权的方法。在这种方法中,我想插入一个条件,如果当前用户(调用交易的人)不是汽车的当前所有者,则会引发异常。

//arg[0]=identifier - arg[1]=model
async createCar(stub, args) {
  console.info('============= START : Create Car ===========');
  if (args.length != 2) {
    throw new Error('Incorrect number of arguments. Expecting 2');
  }

  console.info("Creator",stub.getCreator());

  var car = {
    model: arg[1],
    owner: //.... - Here store the id of who invoked the transaction
  };

  await stub.putState(args[0], Buffer.from(JSON.stringify(car)));

  console.info('============= END : Create Car ===========');

  return true;
}

//arg[0]=identfier - arg[1] = New owner
async transferCar(stub,args){
    let carAsBytes = await stub.getState(arg[0]);
    let car = JSON.parse(carAsBytes);

    if (car.owner != /*... - new user that invoked the transaction*/) {
        throw new Error('Invalid owner');
    }

    car.owner = arg[1];

    await stub.putState(args[0], Buffer.from(JSON.stringify(car)));

    return true;
}

有人知道我能做什么吗?

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    您可以使用 getCreator() 来返回链码调用提交者的身份对象。

    【讨论】:

    • 谢谢。如何使用 getCreator() 比较存储后的所有者? if (car.owner != /*... - 调用事务的新用户*/) { throw new Error('Invalid owner'); }
    • [*.com/questions/46591996/… 这可能会对您有所帮助,类似于您的要求。在您的情况下,您只需要检查提交者并且当前所有者是否相同。