Что означает ключевое слово «подписавшийся» в представлении daml?

Что делает ключевое слово signatory в контракте DAML? Например, что на самом деле означает строка signatory issuer, owner в контракте Iou?

Означает ли это, что и владелец, и эмитент должны быть одинаковыми?


person Hargobind Gupta    schedule 09.06.2019    source источник


Ответы (1)


Одной из привлекательных особенностей DAML как языка моделирования является то, что он предназначен для решения проблем, связанных с авторизацией и делегированием. Для этого DAML имеет тип первого класса Party, представляющий независимых участников реестра, и каждый контракт в реестре должен быть авторизован одной или несколькими сторонами, прежде чем его можно будет создать.

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

В случае долгового контракта:

template Iou
  with
    issuer : Party
    owner : Party
    currency : Text
    amount : Decimal
    observers : [Party]
  where
    signatory issuer, owner
  ...

Сторона, желающая создать Iou, должна заполнить запись: issuer, owner, currency и т. д. Затем она должна передать эту запись функции create внутри транзакции, отправленной в реестр. Этот вызов create должен быть авторизован issuer и owner, но не требует авторизации observers, поскольку они не указаны в качестве подписантов.

Обратите внимание, что issuer и owner могут быть одной и той же стороной. На самом деле, это был бы единственный способ легально отправить create непосредственно в реестр, поскольку отдельные взаимодействия с реестром могут быть разрешены только одной стороной. Большие наборы полномочий должны выполняться как часть более крупной транзакции с использованием делегированных полномочий из других контрактов, уже находящихся в реестре.

Подробнее об этом и особенно о том, как делегировать полномочия, см. документацию по DAML: https://docs.daml.com/concepts/ledger-model/ledger-structure.html

Рабочий пример см. по адресу: https://docs.daml.com/daml/patterns/initaccept.html и другие примеры в разделе Шаблоны документов DAML.

person Recurse    schedule 12.06.2019