繁体   English   中英

Hyperledger Fabric:如何使用 JS/Node 中的链码捕获交易错误?

[英]Hyperledger Fabric: How to catch transaction errors with chaincode in JS/Node?

我在基于 JS/Node 的链代码中使用以下依赖项:

  • “面料合同 api”:“~1.4.0”,
  • “织物垫片”:“〜1.4.0”

查询我的分类帐。 代码看起来像:

'use strict';

const { Contract } = require('fabric-contract-api');
const shim = require('fabric-shim');

...

class ThingsChainCode extends Contract {

    async queryThing(ctx, id) {
        const thingAsBytes = await ctx.stub.getState(id);
        if (!thingAsBytes || thingAsBytes.length === 0) {
            throw new NotFoundError(`${id} does not exist`);
        }
        return thingAsBytes.toString('utf8');
    }

    async updateThing(ctx, id, jsonData) {

        await ctx.stub.putState(id, Buffer.from(jsonData));
        var succMesg = `${id} updated`;
        retVal = shim.success(succMesg);
    }
}

不幸的是,state 验证器不时(当一批中存在并发读/写时)事务被标记为无效。 原因代码状态为“MVCC_READ_CONFLICT”。 此时的问题不是这些错误的原因是什么。 相反,我想捕捉错误。 与基于 go 的链码一样,这似乎很简单: Hyperledger Fabric Chaincode throws MVCC_READ_CONFLICT

JS 中没有抛出异常或返回错误。 我没有发现任何代码示例是否有进一步的错误处理: https://fabric-shim.github.io/release-1.4/index.ZFC35FDC70D5FC69D269883A822C7A53

所以问题是如何使用基于 JS/Node 的链码来捕获交易错误?

非常感谢!

MVCC_READ_CONFLICT 发生在验证时,而不是在执行链代码的提案模拟期间。 所以在这方面,你用哪种语言编写你的链码实现并不重要。

要确定事务是否未通过验证并因此被标记为无效,您需要侦听事务事件并检查以查看尝试提交的该事务的 state。 我假设您在这里使用节点作为您的客户端语言,并建议使用结构网络 npm package,它为您内置了事务事件处理。 你什么时候在合约实例上提交事务,如果事务由于说 MVCC_READ_CONFLICT 而无法提交,那么它会抛出一个错误。

Would suggest you review the various hyperledger fabric documents (eg https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/application.html ) and hyperledger fabric samples which use the fabric-network api (sometimes referred to作为高级 api 而不是低级 api)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM