Использование вложений Состояния страницы:
Вложения - это файлы ZIP / JAR, на которые ссылается транзакция по хешу,
но не включены в саму транзакцию.
Однако, API: страница Ограничения контракта гласит:
JAR, содержащий классы штата и контракта, а также, возможно, его
зависимости, все привязаны к транзакции.
И есть фрагмент кода, показывающий, как добавить ограничение контракта:
transaction.addOutputState(state, constraint = HashAttachmentConstraint(serviceHub.cordappProvider.getContractAttachmentID(CONTRACT_ID)!!))
Однако, при проверке HashAttachment кода, я не вижу, чтобы он содержал внутреннюю часть файла Contract Jar.
Я предполагаю, что мы не передаем Контрактную банку с Транзакцией. Что происходит, можно описать:
- Во время запуска узлов Corda сканирует все CorDapps и загружает банки, состоящие из классов контрактов, в локальное хранилище вложений.
- Каждое состояние вывода в транзакции может иметь ограничение контракта.
- На этапе проверки будет вызвано
verifyConstraints(contractAttachmentsByContract)
, и эти ограничения (например, HashAttachmentConstraint) будут проверены на соответствие вложениям, которые Node имеет в своем локальном хранилище.
Вопросы:
- Включает ли Транзакция Приложение к Договору?
- Будет ли это контрактное вложение передаваться по сети или вложения будут использоваться для проверки из локального хранилища вложения?
- Что я упустил в моем предположении?