Hyperledger Fabric 2.0 无法解析 evaluateTransaction 的结果

Hyperledger Fabric 2.0 Unable to parse results from evaluateTransaction

从 Hyperledger Fabric 2.0 开始,我正在尝试评估交易结果,如下所示:

        const network = await gateway.getNetwork('evm');

        // Get the contract from the network.
        const contract = network.getContract('cc');

        const result = await contract.evaluateTransaction('getEVMAddress') ;

而getEVMAddress函数定义如下:

  async getEVMAddress(stub) {
    console.info('============= START : getEVMAddress ===========');


    const evmAsBytes = await stub.getState('EVMADDRESS'); 
    if (!evmAsBytes || evmAsBytes.length === 0) {
        throw new Error(`EVMADDRESS does not exist`);
    }

    var evmAddress = JSON.parse(evmAsBytes);

    console.info('============= END : getEVMAddress ===========');

    return JSON.stringify(evmAddress);


  }

它正在存储一个简单的字符串。我不知道发生了什么,我已经尝试使用 BlockDecoder 进行解码,但我似乎无法在分类账之外查询结果。请注意,如果我们从链码内部 brint 字符串没有错误,它的结果很好,但在链码之外我只收到一个带有无关数据的缓冲区,我无法在其中正确解析。

提前致谢。

从分类帐中检索数据时,您将默认接收缓冲数据,您必须将其转换为字符串。

尝试使用 toString() 方法将输出转换为字符串。

var s=result.toString()。 // 将缓冲区转换为字符串。

之后使用 var object = JSON.parse(s)。 //将您的字符串转换为 JSON 对象。

最后,您可以使用

查看 EVM table 的特定列

var c= s['coulmn_name']; //column name 是您想要在 EVM table.

中记录的列的名称

解决方案是使用 Buffer.from(string)

从缓冲区发回字符串