0

我仍在第一次设置 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, 'loyalty', '1', args);
};

module.exports.end = function () {
    return Promise.resolve();
};

module.exports.account_array = account_array;

你知道我该如何解决这个问题吗?非常感谢。

4

1 回答 1

1

查看您定义的回调文件,用户名对于 caliper 工作人员发送的所有事务将始终相同。

每次 caliper worker 发出事务时,它都会调用run您定义的函数……在这种情况下,它每次都形成相同的内容,因此您会得到您所看到的冲突。

有办法解决这个问题:

  • 卡尺工人知道他们的指数(0 基于所有工人)
  • caliper 工作人员知道他们正在处理的事务(0 基于在回合期间发送的所有事务)

看起来您将不得不重构工作负载生成以同时考虑 caliper worker 索引和正在发送的事务号,以便每次调用都run为您提供唯一的用户 ID

于 2020-11-11T15:46:15.317 回答