卡尺错误:事务返回失败密钥已经存在

问题描述

我仍在第一次配置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