#python #daml
#python #daml
Вопрос:
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
Код Ledger API, который выполняет контракт, как показано ниже,
Код 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}"
Ответ №1:
«Нет ввода» для выбора в DAML представлено в виде типа записи без полей; этот тип записи назван ApproveScore
в вашем примере.
Я не знаю Python API в деталях, но для того, как это должно выглядеть, я бы сказал, представьте, что в вашем выборе были какие-то входные данные, как бы выглядели строительные леса вокруг этих аргументов? Затем просто удалите аргументы, оставив каркас (т. Е. конструкцию пустой записи) на месте.
Комментарии:
1. Да, этот выбор не требует никаких входных данных. Я передаю пустые аргументы выбора в ledger API. Несмотря на то, что я получаю вышеуказанную ошибку. Пожалуйста, ознакомьтесь с обновленной сводкой выше.
2. Глядя на ваше резюме, в нем есть именно та проблема, которую я описываю: представление «пустых аргументов выбора» больше не является единицей, хотя это было в прошлом. Это запись ApproveScore без полей; тип записи называется в соответствии с выбором в каждом случае.
Ответ №2:
Наконец, мы разобрались с проблемой с помощью команды DA. Проблема в том, что я передаю пустой параметр, используя Empty. В последней версии DA для SDK нам придется передавать пустые параметры, аналогичные приведенным ниже.
В старой версии SDK для передачи пустых параметров в выборе,
choice_argument = Value(unit = Empty())
В новой версии SDK используйте, как показано ниже,
choice_argument = Value(
record = Record(
record_id = Identifier(
package_id = self.package_id,
name= "Main.ApproveScore"
),
fields = [])
)
Спасибо, Стивен Комполл, что вмешался.