[英]Hyperledger Fabric: How to catch transaction errors with chaincode in JS/Node?
我在基于 JS/Node 的链代码中使用以下依赖项:
查询我的分类帐。 代码看起来像:
'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.