:RU: Plutus: что тебе нужно знать

Перевод статьи Plutus: what you need to know - IOHK Blog

Разработчики сейчас готовятся к появлению смарт контрактов Cardano, которые будут активированы с запуском Plutus и обновлением протокола Alonzo.

image

В нашем предыдущем посте в блоге мы обсуждали Alonzo ‒ наше имя, данное обновлению протокола, которое введет поддержку смарт контрактов на Cardano. Alonzo создаст инфраструктуру и добавит инструменты для разработки функциональных смарт контрактов с использованием Plutus.

Платформа Plutus предоставляет нативный язык смарт контрактов для блокчейна Cardano. Чтобы понять Plutus и овладеть им, нужно вникнуть в три понятия:

  • Модель расширенных UTXO (EUTXO)
  • Plutus Core ‒ “ончейн” часть Plutus
  • Платформа приложений Plutus (PAF) ‒ это “оффчейн” часть Plutus, которая позволяет взаимодействовать со смарт контрактами.

Контракты Plutus состоят из частей, которые работают на блокчейне (ончейн код), и частей, которые работают на машине пользователя (оффчейн или клиентский код). Оба кода, как ончейн, так и оффчейн, написаны на языке Haskell, а смарт контракты Plutus фактически являются программами Haskell. Оффчейн код может быть написан с помощью PAF, и этот код затем компилируется GHC (General Haskell Compiler), тогда как ончейн код (написанный с использованием Plutus Core) компилируется компилятором Plutus.

Крайне важно понять взаимосвязь между этими концепциями Plutus и функциональностью нативных токенов, чтобы увидеть, как их взаимодействие превращает последние в более полезную и мощную функцию.

Модель расширенных UTXO

Cardano (как и Bitcoin) использует модель учета неизрасходованных (U) транзакций (TX) выходных данных (O). В модели UTXO транзакция имеет входы и выходы, где входы являются неизрасходованными выходами из предыдущих транзакций. Как только выходные данные используются в качестве входных данных в транзакции, они расходуются и никогда не могут быть использованы снова. Выходы задаются адресом (открытым ключом или хэшем открытого ключа) и суммой (состоящей из суммы ADA и необязательных дополнительных сумм нативных токенов). Адрес выхода определяет, какие транзакции разрешены для “разблокировки” выхода и использования его в качестве входных данных. Транзакция должна быть подписана владельцем закрытого ключа, соответствующего указанному адресу. Думайте об адресе как о “замке”, который может быть “открыт” только правильным “ключом” ‒ правильной подписью.

Модель EUTXO расширяет эту модель в двух направлениях:

  • Она обобщает понятие “адрес”, используя аналогию с замком и ключом. Вместо того чтобы ограничивать блокировки открытыми ключами и ключи подписями, адреса в модели EUTXO могут содержать произвольную логику в виде скриптов. Например, когда нода проверяет транзакцию, она определяет, разрешено ли транзакции использовать определенные выходные данные в качестве входных. Транзакция будет искать скрипт, предоставленный адресом выхода, и выполнит скрипт при условии, если транзакция может использовать выход в качестве входных данных.
  • Второе различие между UTXO и EUTXO заключается в том, что выходные данные могут содержать (почти) произвольные данные в дополнение к адресу и сумме. Это делает скрипты намного более мощными, позволяя им переносить состояние.

При проверке адреса скрипт получает доступ к данным, передаваемым на выходе, проверяемой транзакции и некоторым дополнительным частям данных, называемыми редимирами (искупителями), которые транзакция предоставляет для каждого входа. Просматривая всю эту информацию, скрипт имеет достаточно контекста, чтобы дать ответ “да” или “нет” в очень сложных ситуациях и случаях использования.

Подводя итог, EUTXO расширяет модель UTXO, позволяя выходным адресам содержать сложную логику, чтобы решить, какие транзакции могут их разблокировать, и добавляет пользовательские данные ко всем выходам.

Модель EUTXO обладает уникальными преимуществами по сравнению с другими учетными моделями. Успех или неудача проверки транзакции зависит только от самой транзакции и ее входных данных, а не от чего-либо еще в блокчейне. Как следствие, валидность транзакции может быть проверена оффчейн, прежде чем транзакция будет отправлена в блокчейн. Транзакция все еще может потерпеть неудачу, если какая-то другая транзакция одновременно потребляет входные данные, которые ожидает транзакция, но если все входные данные все еще присутствуют, транзакция гарантированно будет успешной.

Это контрастирует с моделью, основанной на учетной записи (используемой в Ethereum), где транзакция может потерпеть неудачу в середине выполнения скрипта. Такой случай никогда не может произойти в EUTXO. Кроме того, затраты на выполнение транзакций могут быть определены оффчейн перед передачей - еще одна функция, невозможная в Ethereum.

Наконец, из-за “локального” характера проверки транзакций возможна высокая степень параллелизма: нода может, в принципе, проверять транзакции параллельно, если эти транзакции не пытаются использовать одни и те же входные данные. Это отлично подходит как для эффективности, так и для аргументирования, упрощая анализ возможных результатов и доказывая, что “ничего плохого” произойти не может. Вы можете глубже погрузиться в модель EUTXO в предыдущем посте в блоге.

Plutus Core

Для реализации модели EUTXO необходимо четко определиться с терминами скрипт и данные. Скрипты требуют специфического, четко определенного языка скриптов, и также важно определить тип данных, которые присоединяются к выходам и используются в качестве редимиров.

Вот тут-то и появляется Plutus Core. Plutus Core - это скриптовый язык, используемый Cardano. Это простой функциональный язык, похожий на Haskell, и большое подмножество Haskell может быть использовано для написания основных скриптов Plutus. Как автор контракта, вы не пишете никакого Plutus Core. Все основные программы Plutus генерируются плагином компилятора Haskell.

Эти скрипты будут выполняться нодами во время проверки транзакций в сети “в реальном времени”. Либо они будут блокировать UTXOs в виде скриптов валидатора, либо в виде эмиссионных политик, которые контролируют эмиссию и сжигание нативных токенов (см. ниже).

Данные редимиров - это простой (алгебраический) тип данных, который можно легко определить в Haskell, что является еще одним доказательством того, что Haskell является хорошим вариантом для написания скриптов Plutus Core. На практике разработчик смарт контрактов будет писать скрипты валидатора в Haskell, которые затем будут автоматически скомпилированы в Plutus Core.

Соответствующие библиотеки Haskell упрощают написание такой логики проверки, предоставляя основные типы данных для проверки транзакций во время проверки, а также предлагая множество вспомогательных функций и абстракций более высокого уровня, позволяя авторам контрактов сосредоточиться на бизнес логике и не беспокоиться о слишком большом количестве низкоуровневых деталей.

Платформа приложений Plutus (PAF)

Ончейн состояние скриптов валидатора может быть изменено только транзакциями, которые расходуют и производят выход скрипта. При написании приложения Plutus мы должны учитывать не только ончейн часть приложения (основные скрипты Plutus), но и оффчейн часть, которая непосредственно строит и отправляет транзакции.

Код оффчейн написан на языке Haskell, как и код ончейн. Таким образом, нам нужно только один раз написать бизнес логику. Затем мы можем использовать ее в скрипте валидатора и в коде, который строит транзакции, запускающие скрипт валидатора.

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

PAF обеспечивает легкий доступ к сервисам, которые обычно используются приложениями Plutus. Приложения, развернутые с использованием библиотек фреймворка, могут быть запущены на бэкэнде приложения Plutus, который обеспечивает динамическую поддержку для доступа к блокчейну и другие задачи, такие как постоянство, регистрация и мониторинг. Приложения, написанные поверх PAF, автоматически предоставляют интерфейс HTTP и WebSocket, который можно использовать для взаимодействия с приложением из веб браузера.

Нативные токены

Нативные токены стали доступны на Cardano с февральским хардфорком Mary. Любой пользователь может создавать свои собственные нативные токены, эти токены могут быть легко отправлены и получены, точно так же, как ADA. Каждый нативный токен поставляется со своей собственной эмиссионной политикой, которая определяет условия, при которых токены могут быть выпущены и сожжены.

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

Какими бы мощными ни были эти основные строительные блоки, они не охватывают все мыслимые области применения. Например, можно при желании, но на практике затруднительно, моделировать невзаимозаменяемые токены (NFT), используя такие простые политики. Это можно сделать с помощью временной блокировки для эмиссии NFT, ограничив процесс эмиссии определенным временным моментом. Если до этого момента времени будет выпущен только один токен, то он технически является невзаимозаменяемым (потому что существует только один). Но чтобы убедиться в этом, недостаточно просто проверить эмиссионную политику. Нам нужно было бы взглянуть на историю эмиссии токена, чтобы убедиться, что он действительно был выпущен только один раз.

С развертыванием Plutus пользователи смогут писать политики эмиссии токенов с использованием Plutus Core. Во время эмиссии или сжигания скрипт политики Plutus Core будет выполняться в контексте транзакции эмиссии или сжигания, и скрипт должен будет одобрить или запретить это действие. Это еще больше ускорит рост NFT на Cardano, позволяя создавать гораздо более сложные политики эмиссии токенов и позволяя создавать NFT использую метод недоверия.

Alonzo постепенно развертывается в основной сети через несколько тестовых сетей, поэтому наши партнеры и пионеры Plutus смогут протестировать Plutus Core, написав приложения на Cardano в течение мая и июня до замораживания кода. Это также будет периодом обеспечения качества и тестирования пользовательского принятия биржами для того, чтобы убедиться, что платформа полностью готова к моменту обновления Alonzo в основной сети. Если вы разработчик и хотите узнать больше о Plutus, подумайте о том, чтобы присоединиться к будущей группе пионеров. Кроме того, взгляните на репозитории Plutus GitHub и примите участие в дискуссиях о Plutus на форуме Cardano.

Я хотел бы поблагодарить Янна Мюллера (Jann Müller) за дополнительный вклад в этот пост в нашем блоге.

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова. Хотите поговорить или задать вопрос о Cardano по-русски? Приглашаем вас в наше уютное сообщество в Telegram . Оставайтесь на связи, все только начинается!