Свойства формальной проверки Pact - PullRequest
3 голосов
/ 22 марта 2019

Я вижу, что Pact может автоматически проверять определенные свойства смарт-контрактов с помощью средства доказательства теоремы Microsoft Z3. Существуют ли соответствующие свойства смарт-контрактов, которые не могут быть проверены автоматически? Если таковые имеются, ожидаете ли вы их проверки в каждом конкретном случае или проводится работа по расширению возможностей автоматической проверки?

Кроме того, ожидаете ли вы, что неполнота Тьюринга Pact ограничит разработчиков умных контрактов каким-либо значимым образом?

1 Ответ

6 голосов
/ 22 марта 2019

По первому вопросу. Огромным преимуществом Pact благодаря дисциплинированной среде выполнения и структуре является возможность допустить весь язык в среду FV. Pact 3.0 (следующая версия, которая выйдет с Chainweb Testnet) получает большую часть пути, включая освещение «пактов», нашей многоэтапной абстракции.Однако обратите внимание, что это может привести к тому, что все виды действий будут непроверяемыми, но это особенность, а не ошибка.Если вы хотите корректный код, вы должны идти узким путем.

Re: неполнота Тьюринга, только в том, что некоторые инструменты запрещены, а именно рекурсия, но также анонимные лямбды (что позволило бы ввести y-комбинаторы)).Последнее менее обременительно, так как его основное влияние оказывает на выразительность, которая честно противоречит нашей политике «простого в понимании кода»: выразительный код, хотя мощный, зачастую только для экспертов.Кроме того, Pact имеет расширенные функциональные возможности, такие как частичное применение (используется, например, в map и fold), которого нет в таких языках, как Solidity (и, честно говоря, Javascript).Рекурсия является более существенным недостатком, но здесь мы придерживаемся мнения: блокчейн - это среда с регулируемой стоимостью, а рекурсия там, где она действительно необходима (обратите внимание, что Pact может выполнять ограниченный цикл с помощью вышеупомянутых структур), указывает на вариант использования, которыйплохо подходит для среды с общими вычислениями, такой как поиск пути и т. д. Таким образом, продвинутому разработчику Pact, возможно, придется развернуть какой-то алгоритм в ограниченный цикл, но это разумная цена, чтобы заплатить за огромное повышение безопасности.

...