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.