Цель состоит в том, чтобы генерировать события на каждом участвующем узле при изменении состояния, которое включает в себя бизнес-действие, вызвавшее изменение. В нашем случае Business Action сопоставляется с командой Transaction и предоставляет бизнес-намерение или то, что пользователь делает в бизнес-терминах. Таким образом, в нашем случае, когда мы моделируем жизненный цикл кредита, действие может быть «закрыть» кредит.
Мы моделируем Событие на уровне состояния следующим образом: Каждое Событие инкапсулирует Команду транзакции и однозначно идентифицируется (TxnHash, OutputIndex) и созданным / потребленным статусом.
Мы бы предпочли механизм опроса для генерации событий по требованию, но асинхронный подход для генерации событий в изменениях бухгалтерской книги был бы приемлемым. В любом случае наша задача заключается в получении команды из транзакции.
Мы рассмотрели запросы к состояниям с помощью API Vault Query vaultQueryBy () для решения опроса (или vaultTrackBy () для решения asynch Obvservalble Stream). Мы смогли создать поток, который получает txn для состояния. Это должно было быть сделано в потоке, поскольку Corda устарела функцию, которая позволила бы нам сделать это в нашем клиенте Springboot. В клиенте мы используем vaultQueryBy (), чтобы получить список состояний. Затем мы вызываем поток, который перебирает состояния, получает txHash от каждого StateRef и затем вызывает serviceHub.validatedTransactions.getTransaction (txHash), чтобы получить подписанный перенос, из которого мы в конечном итоге можем получить Команду. Это лучший или рекомендуемый подход?
В качестве альтернативы, мы также подумали о генерации событий Транзакции путем запроса транзакций, а затем создания события для каждого состояния ввода и вывода в транзакции. Если мы пойдем этим путем, каков наилучший способ запрашивать транзакции из хранилища? Есть ли опция на основе наблюдаемого потока?
Я предполагаю, что такое отображение состояний на команду является общим требованием для наблюдателей в бухгалтерской книге, поскольку стандартно исключать логику контракта из команды транзакции и вполне естественно иметь отображение команды в намерении пользователя.
Каков наилучший способ создания событий, которые инкапсулируют команду транзакции для каждого состояния, созданного или потребляемого в регистре?