Ошибка DAMLe: Ошибка (несоответствие типа: Контракт и значение: ValueUnit) - PullRequest
0 голосов
/ 25 марта 2019
I am trying to exercise a multi-party contract through Python ledger API. The DAML contract code as below,

**DAML Contract code which causes this issue:**
-- verification multi-party agreement block
controller Agent1 can
  ApproveScore : ContractId PendingContract 
    do create this with Agent1 = Agent2

Код API Ledger, который исполняет контракт, как показано ниже,

Код API Python Ledger, который исполняет этот контракт:

approve_exercise_command = ExerciseCommand(
   template_id = Identifier(
      package_id = self.package_id,name = PENDING_CONTRACT
    ),
    contract_id = event.created.contract_id,
    choice = APPROVE_CHOICE,
    choice_argument = Value(unit = Empty())
  )
  approve_score_command = Command(exercise = approve_exercise_command)

**Error details:**

    status = StatusCode.INVALID_ARGUMENT
        details = "DAMLe Error: Error(mismatching type: ApproveScore and value: ValueUnit)"
        debug_error_string = "{"created":"@1553510346.703290741","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1039,"grpc_message":"DAMLe Error: Error(mismatching type: ApproveScore and value: ValueUnit)","grpc_status":3}"

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Наконец, мы выяснили проблему с помощью команды DA.Проблема в том, что я передаю пустой параметр с помощью Empty.В последней версии SDK DA нам нужно будет передать пустые параметры, как показано ниже.

В старой версии SDK для передачи пустых параметров в выборе,

choice_argument = Value(unit = Empty())

Виспользование новой версии SDK, как показано ниже,

 choice_argument = Value(
        record = Record(
         record_id = Identifier(
         package_id = self.package_id,
         name= "Main.ApproveScore"
        ),
       fields = [])
    )

Спасибо, Стивен Компалл, за участие.

0 голосов
/ 25 марта 2019

«Нет ввода» для выбора в DAML представляется как тип записи без полей;этот тип записи называется ApproveScore в вашем примере.

Я не знаю API Python подробно, но для того, как он должен выглядеть, я бы сказал, представьте, что ваш выбор сделал есть какой-то вклад, как будут выглядеть леса вокруг этих аргументов?Затем просто удалите аргументы, оставив на месте леса (т. Е. Конструкцию пустой записи).

...