Корда: Как передаются вложения в контракте в транзакции? - PullRequest
1 голос
/ 12 июня 2019

Использование вложений Состояния страницы:

Вложения - это файлы ZIP / JAR, на которые ссылается транзакция по хешу, но не включены в саму транзакцию.

Однако, API: страница Ограничения контракта гласит:

JAR, содержащий классы штата и контракта, а также, возможно, его зависимости, все привязаны к транзакции.

И есть фрагмент кода, показывающий, как добавить ограничение контракта:

transaction.addOutputState(state, constraint = HashAttachmentConstraint(serviceHub.cordappProvider.getContractAttachmentID(CONTRACT_ID)!!))

Однако, при проверке HashAttachment кода, я не вижу, чтобы он содержал внутреннюю часть файла Contract Jar.

Я предполагаю, что мы не передаем Контрактную банку с Транзакцией. Что происходит, можно описать:

  1. Во время запуска узлов Corda сканирует все CorDapps и загружает банки, состоящие из классов контрактов, в локальное хранилище вложений.
  2. Каждое состояние вывода в транзакции может иметь ограничение контракта.
  3. На этапе проверки будет вызвано verifyConstraints(contractAttachmentsByContract), и эти ограничения (например, HashAttachmentConstraint) будут проверены на соответствие вложениям, которые Node имеет в своем локальном хранилище.

Вопросы:

  1. Включает ли Транзакция Приложение к Договору?
  2. Будет ли это контрактное вложение передаваться по сети или вложения будут использоваться для проверки из локального хранилища вложения?
  3. Что я упустил в моем предположении?

1 Ответ

4 голосов
/ 13 июня 2019

Вы правы, что вложение не передается внутри транзакции. Транзакция содержит только хэш-ссылку на вложение для справочных целей. Это также означает, что вложения могут повторно использоваться во многих транзакциях, поскольку они хранятся вне цепочки в своей таблице базы данных.

Когда узел получает транзакцию, содержащую вложение, которое он не видел, Corda автоматически получит вложение от контрагента: https://docs.corda.net/tutorial-attachments.html#protocol

Обычно вложения в транзакциях выбираются автоматически через ReceiveTransactionFlow.

Эта передача будет происходить без каких-либо усилий по разработке, если вложение меньше, чем maxTransactionSize параметров сети: https://docs.corda.net/network-map.html#network-parameters

maxTransactionSize: максимально допустимый размер в байтах транзакции. Это размер объекта транзакции и его вложений.

Приложения к контракту на этом этапе обычно предварительно распространяются и подписываются разработчиком Cordapp и развертываются владельцем узла Corda. На данный момент Cordapps, как правило, не устанавливаются программно.

...