hyperledger fabric:不能注册多个用户

问题描述 投票:0回答:1

我正在开发一个基于余额转移示例的超级分层结构应用程序,该应用程序目前停留在注册用户。我有一些组织,例如bank,caseManager ......起初是没有联盟(我添加的一些组织)抛出错误消息,但是在我添加了一些行来创建联盟后,出现了一些奇怪的消息....我只允许注册一个用户。如果我尝试注册更多,它会显示:

[ERROR] Helper - Failed to get registered user: userABC with error: Error: Enrollment failed with errors [[{"code":0,"message":"2 rows were affected when updating the state of identity userABC"}]]

我一直在寻找这么久,仍然无法找到答案。请帮忙!!!

码:

var registerUser = async function (params) {
try {
    var userOrg = params.userOrg;
    var org = params.org;
    var username = params.username;

    var client = await getClientForOrg(userOrg, username, true);

    logger.debug('Successfully initialized the credential stores');

    var user = await client.getUserContext(username, true);

    if (user && user.isEnrolled()) {

        logger.info('Successfully loaded member from persistence');

    } else {

        logger.info('User %s was not enrolled, so we will need an admin user object to register', username);

        var admins = hfc.getConfigSetting('admins');
        let adminUserObj = await client.setUserContext({ username: admins[0].username, password: admins[0].secret });

        let caClient = client.getCertificateAuthority();
        let affiliationService = caClient.newAffiliationService();

        console.log("passed 1");

        let registeredAffiliations = await affiliationService.getAll(adminUserObj);

        console.log("passed 2");

        if (!registeredAffiliations.result.affiliations.some(
            x => x.name == org)) {
            let affiliation = org + '.department1';
            await affiliationService.create({
                name: affiliation,
                force: true
            }, adminUserObj);
        }

        console.log("passed 3");

        let secret = await caClient.register({
            enrollmentID: username,
            role: 'user',
            affiliation: org + '.department1'
        }, adminUserObj);

        console.log("passed 4");
        logger.debug('Successfully got the secret for user %s: %s', username, secret);

        user = await client.setUserContext({ username: username, password: secret });
        user.setRoles(['client']);
        user._enrollmentSecret = secret.toString();
        user = await client.setUserContext(user);

        logger.debug('Successfully enrolled username %s and setUserContext on the client object', username);
    }

    if (user && user.isEnrolled) {

        var response = {
            success: true,
            secret: user._enrollmentSecret,
            message: username + ' enrolled Successfully in ' + userOrg,
        };

        console.log(response);

        return response;

    } else {

        throw new Error('User was not enrolled ');

    }
} catch (error) {

    logger.error('Failed to get registered user: %s with error: %s', username, error.toString());
    return 'failed: ' + error.toString();

}

};

我注意到的一件事是,如果注册/注册不会成功,调试行“传递2”和“传递3”将在控制台中打印两次。因此,在那种情况下,那里的线将不止一次运行。

hyperledger-fabric hyperledger blockchain
1个回答
0
投票

我没有阅读/理解所有代码,但可能有用的是记录另一方面发生的事情。所以看看ca的日志,看看那里失败了。也可能只是一个拼写问题。

© www.soinside.com 2019 - 2024. All rights reserved.