hyperledger fabric: не удается зарегистрировать более одного пользователя

#hyperledger-fabric #hyperledger #blockchain

#hyperledger-fabric #hyperledger #блокчейн

Вопрос:

Я разрабатываю приложение hyperledger fabric на основе примера переноса баланса, который в настоящее время застрял при регистрации пользователя. У меня есть несколько организаций, например, банк, 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 amp;amp; 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 amp;amp; 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» будут напечатаны в консоли дважды. Таким образом, в этом случае строки вокруг будут выполняться более одного раза.

Ответ №1:

Я не прочитал / понял весь код, но что может быть полезным, так это протоколирование того, что происходит на другой стороне. Поэтому загляните в журнал центра сертификации и посмотрите, что там не удается. Также может быть только проблема с правописанием.