Corda: взаимодействие с пользователем для проверки запроса транзакции, полученного от узла инициатора

У нас есть сценарий использования, который требует следующих шагов: (1) Инициатор запускает поток транзакций через пользовательский интерфейс (2) Поток инициируется, подписывается инициатором и отправляется получателю для проверки и подписи (в Corda) (3) Поток инициатора должен быть приостановлен до тех пор, пока получатель не подтвердит транзакцию, проверив код контракта и не отправит "проверенный" снова через пользовательский интерфейс. (4) Это должно перезапустить поток инициатора, а оставшийся процесс должен следовать, как ожидается в Corda.

Несколько недель назад упоминалось, что взаимодействие с пользователем в Corda еще не поддерживается; эта функция еще не присутствует? В будущем мы можем даже захотеть добавить атрибуты состояния через пользовательский интерфейс, поскольку это дает нам гибкость, чтобы предлагать транзакцию, которую мы хотим, а не жестко ее кодировать. Есть идеи, если это будет возможно в будущих выпусках?

1 ответ

Решение

Посмотрите образец Соглашения Cordapp для примера того, как это будет работать на практике здесь.

Приостановка потока для взаимодействия с человеком в настоящее время не реализована (по состоянию на Corda V3.0).

Вместо этого вы бы реализовали это, добавив флаг состояния в ваше состояние:

class FooState(
    override val participants: List<Party>,
    val accepted: Boolean) : ContractState

У вас будет три команды:

interface Commands : CommandData {
    class Propose : Commands
    class Reject: Commands
    class Accept: Commands
}

И два потока:

  • Поток предложения: в этом потоке инициатор создает и подписывает Propose транзакция для выдачи состояния на бухгалтерскую книгу с Propose командование и accepted флаг установлен в false

  • Поток принятия: в этом потоке получатель либо:

    • Создает Reject транзакция, которая потребляет предложенное состояние и ничего не выводит. Состояние было удалено из бухгалтерской книги и фактически отклонено
    • Создает Accept транзакция, которая обновляет предложенное состояние так, чтобы accepted является true, В настоящее время государство принято, и этот факт зарегистрирован в бухгалтерской книге.

Вы бы дали потоку принятия параметр, который определяет, принимать или нет предложение. Этот параметр будет предоставлен пользователем, когда поток запускается либо через API, либо непосредственно через RPC.

Другие вопросы по тегам