Учетные записи Corda: проблема с SyncKeyMappingFlow для синхронизации общедоступных ключей

#blockchain #corda

#блокчейн #corda

Вопрос:

В нашем проекте Corda у нас есть два узла: Node-A и Node-B. Учетная запись создается на узле A и совместно используется с узломB. С узла-A мы запросили общедоступный ключ, используя new RequestKeyForAccount(accountInfo) . Node-B не знает об этом открытом ключе. Итак, чтобы синхронизировать открытые ключи, которые мы вызвали new SyncKeyMappingFlow(flowSession, Collections.singletonList(anonymousParty)) из узла-A. Мы также внедрили поток ответчика на Node-B, который вызывает new SyncKeyMappingFlowHandler(flowSession)) подпоток. Поток инициатора и ответчика работает нормально. При попытке просмотреть список открытых ключей, принадлежащих учетной записи на узле-B, используя accountService.accountKeys(accountInfo.getState().getData().getLinearId().getId()).toString()) , мы получаем пустой список. В идеале мы должны получать открытый ключ, который мы запрашивали на узле-A. Является ли это подходящим подходом для синхронизации открытых ключей? Предложите альтернативный подход, если это ошибочный подход.

Комментарии:

1. Перед синхронизацией сопоставления ключей; можете ли вы подтвердить, что узел-B действительно получил учетную запись, созданную на узле-A? Можете ли вы запросить его на Node-B? Также проверьте журналы ваших узлов и посмотрите, есть ли там какие-либо полезные сообщения.

2. Учетная запись предоставляется узлу-B сразу после создания учетной записи. Но, как упоминалось в приведенном ниже ответе, я получаю только учетные записи, созданные на узле-B (учетная запись, общая для узла-A, не возвращается как часть accountservice.ouraccounts()) . Я проверил журналы узлов B и Node-A и не обнаружил ошибок.

3. ourAccounts() возвращает только учетные записи, в которых текущим узлом является узел host ; Узел-B не является хостом.

Ответ №1:

Согласно исходному коду, accountKey будут возвращены только ключи, которые были сгенерированы на вызывающем узле.

Вот ссылка: https://github.com/corda/accounts/blob/master/workflows/src/main/kotlin/com/r3/corda/lib/accounts/workflows/services/AccountService.kt#L66