问题描述
我仍在第一次配置Caliper上。希望你能救我:)
正确知道我收到了错误:事务返回失败:用户1已经存在。 当我尝试启动卡尺基准测试时。
因为我不允许使用现有用户ID(已在我的链码上验证)注册用户。
这是我的测试文件:
'use strict';
module.exports.info = 'opening accounts';
const { v1: uuidv4 } = require('uuid')
let account_array = [];
let bc,contx;
var txnPerBatch = 1
let j;
module.exports.init = function (blockchain,context,args) {
if (!args.hasOwnProperty('txnPerBatch')) {
args.txnPerBatch = 1;
}
txnPerBatch = args.txnPerBatch;
bc = blockchain;
contx = context;
j = 0;
let workload = [];
workload.push({
chaincodefunction: 'instantiate',chaincodeArguments: [],});
bc.invokeSmartContract(contx,'loyalty','1',workload);
return Promise.resolve();
};
function generateWorkload() {
let workload = [];
for (let i = 0; i < txnPerBatch; i++) {
var random = (j+1).toString();
var gam_admin = {
userID: random
};
workload.push({
chaincodefunction: 'createGamificationAdmin',chaincodeArguments: [JSON.stringify(gam_admin)],});
}
return workload;
}
module.exports.run = function () {
let workload = [];
let args = generateWorkload();
return bc.invokeSmartContract(contx,args);
};
module.exports.end = function () {
return Promise.resolve();
};
module.exports.account_array = account_array;
您知道我该如何解决吗?非常感谢。
解决方法
查看您定义的回调文件,卡尺工作人员发送的所有交易的用户名将始终相同。
卡尺工作人员每次发出交易时,它将调用您定义的run
函数。在这种情况下,它每次形成相同的内容,因此您会看到冲突。
有几种解决方法:
- 钳工知道他们的索引(在所有工人中占0)
- 卡钳工人知道他们正在处理的交易(在整轮持续时间内发送的所有交易中,0为基准)
您似乎必须重构工作负载,以同时考虑卡尺工作程序索引和正在发送的事务号,以便每次run
的调用都为您提供唯一的用户ID