如何使用 txID Hyperledger fabric 获取数据(状态)

How to get data (state) using txID Hyperledger fabric

async createEntity(ctx, entityNumber, entityType, data) {
  const entity = {
    data,
  };
  await ctx.stub.putState(entityType + entityNumber, Buffer.from(JSON.stringify(entity)));
  return ctx.stub.getTxID();
}

chaincode中有这样的代码,例如我得到的响应

612d6a6b5919fbc511e7a7b691cd349eb932f4e8d84ab9394885d3220f2e169a

在那里写下了一些信息,问题是,我如何使用收到的 txId 取回这些数据?

使用 getState,如您所料:https://hyperledger.github.io/fabric-chaincode-node/release-2.0/api/fabric-shim.ChaincodeStub.html#getState__anchor

一种解决方法是将您作为 ctx.stub.getTxID() 的 return 值获得的交易 ID 与您使用 getHistoryForKey(entityType + entityNumber) 获得的所有交易 ID 进行比较。而 txnid 中的 match 显然是你想要的数据(状态)。

但这仍然是一个繁琐的过程。如果您找到仅使用 txnId 获取数据的直接方法,请 post。如果有这样的东西,那将是一种享受。

ctx.stub.GetState 和 ctx.stub.PutState 这些函数将状态写入 levelDB。如果您想通过 txID 访问您的数据,我使用的一种解决方法是针对该 txID 存储数据。即

let txID =  ctx.stub.getTxID();
await ctx.stub.putState(txID, Buffer.from(JSON.stringify(entity)));