Почему не удается подключиться к леджеру Daml-on-Sawtooth через dazl python?

Я пытаюсь развернуть этот https://github.com/digital-asset/dazl-client/tree/master/samples/ping-pong Смарт-контракт DAML с клиентом dazl на Sawtooth. На основе примера «чертовой пилы» https://github.com/blockchaintp/daml-on-sawtooth. Я использовал эти команды:

  1. cd /home/.../daml-on-sawtooth-master

экспорт ISOLATION_ID = моя локальная сборка

bin / build.sh

  1. cd /home/.../daml-on-sawtooth-master

daml ledger allocate-party Алиса Боб --host localhost --port 9000

  1. daml ledger upload-dar --host localhost --port 9000 /home/.../.daml/dist/pingpong-1.0.0.dar

  2. daml ledger навигатор --host localhost --port 9000

До сих пор все в порядке. Я могу получить доступ к навигатору и трассировщику чертовски зуба

Однако, когда я пытаюсь отправить транзакции из dazl

  1. /home/.../samples/ping-pong/pingpong pipenv run python3 main .py --url http://localhost:9000

Я получаю эту ошибку: [ERROR] 2020-03-29 20: 13: 13,409 | дазл | Пытался отправить команду - не удалось! Отслеживание (последний вызов последним): файл "/home/usr/.local/share/virtualenvs/bot-m0tvQ3xh/lib/python3.7/site-packages/dazl/client/_party_client_impl.py", строка 415, в main_writer await submit_command_async (client, p, commands) Файл "/ home / usr anaconda3 / lib / python3.7 / concurrent / futures / thread.py", строка 57, при выполнении result = self.fn (* self.args, ** self.kwargs) Файл "/home/usr/.local/share/virtualenvs/bot-m0tvQ3xh/lib/python3.7/site-packages/dazl/protocols/v1/grpc.py", строка 42, в лямбда-выражении: self .connection.command_service.SubmitAndWait (запрос)) Файл "/home/usr/.local/share/virtualenvs/bot-m0tvQ3xh/lib/python3.7/site-packages/grpc/_channel.py", строка 826, в < strong> call return _end_unary_response_blocking (state, call, False, None) Файл "/home/usr/.local/share/virtualenvs/bot-m0tvQ3xh/lib/python3.7/site-packages/grpc/_channel. py ", строка 729, в _end_unary_response_blocking поднять _InactiveRpcError (состояние) grpc._channel._InactiveRpcError:‹ _InactiveRpcError of RPC, завершившийся на: status = StatusCode.INVALID_ARGUMENT details = "Недействительный аргумент: TTL команды (разница между эффективным временем реестра и максимальным временем записи) PT30S находится за пределами допустимого диапазона. Мин .: PT41S. Макс: PT1M20S. Клиент может попытаться повторно отправить со значением, которое попадает в этот интервал. "Debug_error_string =" {"created": "@ 1585501993.408836076", "description": "Получена ошибка от однорангового узла ipv6: [:: 1]: 9000", "file" : "src / core / lib / surface / call.cc", "file_line": 1056, "grpc_message": "Недействительный аргумент: TTL команды (разница между эффективным временем реестра и максимальным временем записи) PT30S находится за пределами допустимого диапазона. Мин. : PT41S. Макс .: PT1M20S. Клиент может попытаться повторно отправить со значением, попадающим в этот интервал. "," Grpc_status ": 3}"


person HectorCode    schedule 29.03.2020    source источник


Ответы (1)


Важная часть сообщения об ошибке - это самый последний бит.

"Invalid argument: Command TTL (the difference between ledger effective time and maximum record time) PT30S is out of bounds. Min: PT41S. Max: PT1M20S. Client may attempt resubmission with a value that falls within that interval.","grpc_status":3}"

Это означает, что вы / DAZL установили maximum_record_time в ledger_effective_time + 30s, но этот DAML на Sawtooth требует значений от ledger_effective_time + 41s до ledger_effective_time + 120s.

Глядя на исходники DAZL, похоже, что 30-е годы жестко запрограммированы здесь: https://github.com/digital-asset/dazl-client/blob/f7ba752b1ae7d007d457f43ef2f723fdc6e94fb9/python/dazl/client/client/L408

Чтобы заставить его работать с Sawtooth, вам, вероятно, нужно изменить это число. Я создал проблему, чтобы сделать ее настраиваемой здесь: https://github.com/digital-asset/dazl-client/issues/73

person bame    schedule 30.03.2020
comment
Я изменил ledger_effective_time на множество значений между 41–120, но разницы нет. Я получаю ту же ошибку - person HectorCode; 30.03.2020
comment
Речь идет не об изменении ledger_effective_time, а об изменении maximum_record_time относительно ledger_effective_time. Здесь есть PR, который устанавливает значение по умолчанию на 60 секунд и делает его настраиваемым. Так что DAZL 6.7.1 должен работать с Sawtooth один раз. github.com/digital-asset/dazl-client/pull/74 - person bame; 31.03.2020
comment
Установил DAZL 6.7.1. Однако ошибка остается точно такой же ... - person HectorCode; 01.04.2020