В шаблоне Kotlin CorDapp контракты (и состояния) являются отдельным модулем, а не рабочими процессами.
В чем причина такого разделения?
Для этого есть две причины:
Каждая транзакция Corda также включает банку, содержащую определение контракта в качестве приложения. Это сделано для того, чтобы гарантировать, что правильный контракт доступен, когда транзакция подтверждена в более поздний момент времени (учитывая, что контракт может со временем обновиться). Таким образом, разделение договора и потока jar уменьшает размер jar договора, присоединяемого к транзакции, и, таким образом, уменьшает размер транзакции. Подробнее здесь: https://docs.corda.net/writing-a-cordapp.html#modules
Помогает в обновлениях. Контракты имеют ограничения, и, следовательно, обновления контрактов идут довольно сложным путем. Кроме того, мы ожидаем, что контакты менее подвержены обновлениям, чем потоки. Следовательно, разделение их на отдельные модули позволяет легко обновлять, когда нужно просто обновить потоки, что можно сделать, просто заменив старую флягу потока на новую. Узнайте больше здесь: https://medium.com/corda/contract-upgrades-and-constraints-in-corda-425055a9a47f