#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:
Я не прочитал / понял весь код, но что может быть полезным, так это протоколирование того, что происходит на другой стороне. Поэтому загляните в журнал центра сертификации и посмотрите, что там не удается. Также может быть только проблема с правописанием.