Cardano (ADA) входит в топ-10 криптовалют по рыночной капитализации. Cardano — много больше чем криптовалюта: это масштабируемая и экологически устойчивая блокчейн-платформа для запуска смарт-контрактов, которая работает на основе протокола консенсуса с механизмом Proof of Stake Ouroboros и разрабатывается академическим сообществом экспертов и учёных-программистов на базе исследований, основанных на фактических данных. Цель Cardano — создание полностью децентрализованного блокчейн-проекта, управляемого и финансируемого системой голосования пользователей.
Несмотря на очевидные преимущества, Cardano часто критикуют за медленный прогресс в разработке. В 2021 году Cardano запустили несколько обновлений, представив наконец платформу Plutus для написания смарт-контрактов, и анонсировав возможность совместимости со смарт-контрактами на основе Ethereum. Что представляют собой эти обновления, с какими проблемами мы с командой столкнулись, работая на Cardano и что предстоит предпринять, чтобы их решить — расскажу в этом материале.
Каждый этап существования Cardano посвящён решению определённой задачи, занесён в карту развития блокчейна, — и носит имя деятеля культуры прошлого:
Эра Байрона — основание Cardano (2017).
Эра Шелли — децентрализация (2020).
Эра Гогена — смарт-контракты (2021).
Эра Басё — масштабирование (2022?).
Эра Вольтера — управление (в разработке).
В эру Гогена для написания смарт-контрактов разработали язык Plutus и платформу Plutus Platform. Новинка Plutus — это платформа для конструирования транзакций, компилятор кода скрипта с Haskell на внутренний язык смарт контрактов; подобно Ethereum (и даже круче) она позволяет создавать безопасные децентрализованные приложения, новые крипто-токены и смарт-контракты. Язык Plutus основан на функциональном языке программирования Haskell (у Cardano есть и другие языки, но Plutus — самый быстрый, дешёвый и безопасный). Plutus был создан с учётом интересов и мнений разработчиков, бизнес-экспертов и научных кругов и позволяет создавать смарт-контракты любого типа; а с помощью языка Marlowe (платформа DeFi) моделировать финансовые смарт-контракты на платформе Plutus смогут даже те, у кого нет опыта в программировании (но есть в бизнесе и/или финансах).
Plutus стал частью хардфорка Alonzo, долгожданного обновления эры Гогена, запущенного в сентябре 2021; но чудесная платформа пока работает не так хорошо, как хотелось — наша команда столкнулась сразу с несколькими проблемами.
Hook up with the PAB
PAB — это серверное приложение, которое содержит смарт-контракт и позволяет удобно работать с ним через веб-сокеты или HTTP запросы. Предполагалось, что PAB сможет разворачиваться на удалённом сервере или в браузере и интегрироваться с приложениями для кошелька.
Пока что PAB не может работать с браузерным кошельком Nami wallet и Yoroi в облаке, или в качестве браузерного приложения целиком. В браузерном сценарии пользователь должен настроить лёгкий браузерный кошелек, — такой как Nami, Yoroi или CCVault, — и он сможет получать и отправлять с него транзакции от PAB, размещённой на узле провайдера dApp. Проблема заключается в том, что браузерный кошелёк не умеет балансировать и отправлять транзакцию; для этого в браузере должна быть предусмотрена возможность выполнения скрипта Plutus. Команда Cardano трудится над решением.
Сейчас PAB работает только локально на компьютере пользователя (так называемый hosted PAB + WBE). Чтобы совершать транзакции, пользователю нужно сильно заморочиться: у каждого из участников транзакции должны быть полный узел блокчейна Cardano, API кошелька и PAB. Это неудобно, занимает много времени и требует наличия большого дискового пространства. В этом сценарии, если разработчик захочет перенести своё Dapp в облако, серверный экземпляр кошелька (WBE) обрабатывает кошельки каждого пользователя и хранит их приватные ключи на сервере, проводит балансировку транзакции, подписывает и отправляет запросы от PAB. Предполагается, что эта тестовая модель в дальнейшем не будет использоваться, поскольку она не соответствует независимой и децентрализованной философии блокчейна: наши кошельки должны контролироваться нами, а не организацией, представляющей пользователю dApp.
Реальный статус смарт-контрактной инфраструктуры Plutus — сырость и неудобство в использовании. Избегая сражений с ветряными мельницами, мы предпочитаем запускать контракты через интерфейс командной строки (CLI), подписывая через cardano-wallet — так проще, чем использовать размещённую PAB с кипой проблем, которые ещё ожидают решения. Когда PAB смогут разворачиваться на удалённом сервере без привязки к кошельку, можно будет говорить о появлении полноценного рынка DeFi на Cardano.
Stay out of my UTxO
Cardano, как и Bitcoin, использует UTxO — только в дополненной и расширенной версии EUTxO (Extended Unspent Transaction Output).UTxO — это модель регистрации и проверки данных, альтернативная учётным записям, которые используют Ethereum и другие блокчейны. UTxO-модель представляет собой записи о транзакциях, где у каждой транзакции есть свои входы и выходы.
На практике это выглядит так: Таня хочет перевести со своего кошелька 5 токенов на кошелёк пиццерии PapaJohn`s, чтобы оплатить заказ, 10 токенов на кошелёк Марго, мастера по маникюру, и 15 — на кошелёк Марка, своего бойфренда. В данном случае транзакцией является запись о передаче токенов с одного кошелька на другие. На входе в транзакцию кошелёк Тани использует один или несколько нерастраченных выходов из предыдущих транзакций, где суммарно имеется количество токенов больше или равное 30.
Из этой транзакции четыре выхода:
5 токенов (принадлежит кошельку PapaJohn`s);
10 токенов (принадлежит кошельку Марго);
15 токенов (принадлежит кошельку Марка);
Нерастраченный остаток со входа (принадлежит кошельку Тани) — если на вход подавалось суммарно более 30 токенов.
Эти выходы из транзакций могут участвовать как входы в следующую транзакцию.
Если коротко, то UTxO — это остаток от предыдущих транзакций, который можно использовать в качестве входных данных для будущих. Если всё ещё не очень понятно — вот здесь наглядное видео, после которого не останется вопросов, что такое UTxO.
В Cardano UTxO получила новые возможности. Помимо адреса отправителя и суммы перевода, EUTxO могут содержать Datum, которые не переносятся традиционными UTxO, — это дополнительные данные или состояние (стейт), которые требуются для работы программы. Данные могут быть произвольными и меняться на разных EUTxO (при этом структура данных остается неизменной для конкретного скрипта). Datum-данные могут понадобиться для валидации транзакции, так как внутри транзакции имеется только та информация из блокчейна, которая пришла вместе с входящими EUTxO. Например, внутри транзакции мы хотим обменять одни токены на другие, а курс обмена должны получить из какого-то внешнего источника. Этот источник передает в транзакцию свою EUTxO, где внутри Datum содержится курс обмена.
Также кошельки обзавелись дополнительной внутренней структурой, которая позволяет им не только обрабатывать платежи, но и поддерживать сценарии для реализации смарт-контрактов, — выходы блокируются сценариями проверки, а входы разблокируются сценариями подписи.
Ещё до наступления эры Гогена модель ЕUTxO от Cardano подверглась критике за проблему конкурентности. Конкурентность — это способность одновременного взаимодействия различных единиц алгоритма с одним и тем же смарт-контрактом. Например, блокчейн, основанный на Account-based модели, позволяет нескольким пользователям одновременно работать с одним и тем же смарт-контрактом, и dApp при этом работает быстро и эффективно. При таком совместном использовании конкурентность может привести к проблемам взаимоблокировки или борьбы за ресурс.
EUTxO может использоваться единожды и целиком, что облегчает проверку транзакции, но, к сожалению не позволяет осуществить её, когда два или более участников пытаются пустить в ход один и тот же EUTxO. В случае со смарт-контрактом с его протоколом взаимодействует множество пользователей, большинству которых придётся пытаться несколько раз отправить транзакцию, пока платформа не найдёт возможность добавить её в блок и обработать (а для запуска каждого нового блока требуется от 1 до 20 секунд).
Модель UTxO менее уязвима и централизована, чем учётная запись (используемая, к примеру, Ethereum), что крайне важно для децентрализованных платформ DeFi. Поэтому проблеме конкурентности придаётся большое значение и разработчики пытаются её решить: например, создают и управляют большим количеством UTxO с разными NFT, содержащими одинаковые данные, или собирают все транзакции, которые должны потреблять UTxO, в один блок и выполняют их вместе.
Проблема конкурентности может быть решена с помощью централизованного координатора, но пока у платформы Plutus нет глобального состояния или «виртуальной машины Cardano», которая будет оценивать свойства системы и к которой можно подключить все смарт-контракты Plutus. Это не единственно возможный способ решения; альтернатива, которую предлагают IOHK — доведение конкуренции до предела: от разработчиков требуется писать код так, чтобы возможности для конфликтов были ограничены (например, избегать совместного использования состояния и случайных зависимостей). Затем система должна преобразовать конкуренцию в параллелизм. Своё оригинальное решение также предложила Cardax, выпустив алгоритм Streaming Merge, объединяющий действия пользователей в единый поток с учётом времени, и обрабатывающий его с помощью преобразователя. Cardax анонсировали выпуск алгоритма в общей библиотеке, к которой смогут получить доступ все желающие.
Keep calm and scale on
Проблема масштабируемости пожалуй, одна из главных причин, почему блокчейн до сих пор не стал всеобщим любимчиком и не внедряется повсеместно. С ограничениями пропускной способности технологии пользователи столкнулись ещё при запуске децентрализованной сети Bitcoin, и с тех пор блокчейн-проекты пытаются решить эту проблему. Истоки проблемы — в задержке распространения блока (block propagation delay): каждому новому блоку необходимо время чтобы достичь большинства нод в сети. Если информация будет распространяться слишком долго, различные сегменты сети будут иметь разное состояние, что нарушит целостность сети и поставит под угрозу её безопасность.
Чем больше блок, тем больше объём памяти, и тем быстрее цепочка транзакций. Размер блока Cardano регулируется, и недавно его создатели увеличили размер блока на 12,5% до 72 КБ, а затем ещё на 11% — 80 КБ; в каждый блок помещается не более 5 транзакций (по 16 КБ каждая). Следующее увеличение будет носить ситуативный характер, и, видимо будет сдерживаться до тех пор пока не возникнет острая необходимость расширения. Если резко увеличить размер блока, количество людей, которые могут позволить себе запускать узлы, уменьшится: обработка больших блоков требует мощного железа, а крупные транзакции — высоких комиссий. Уменьшение количества полных узлов в сети, в свою очередь, может привести к централизации сети, увеличить количество брошенных блоков (orphans), а также повысить вероятность разветвления сети.
Производительность цепочки Cardano невысокая: блокчейн способен обрабатывать максимум до 257 транзакций в секунду (TPS) — для сравнения, Bitgert обрабатывает до 100 000 транзакций в секунду и запускает новый блок за 15 секунд. Однако реальная пропускная способность Cardano принципиально меньше: по данным Sundaeswap среднее количество транзакций для смарт-контрактов Plutus составляет 0,15 TPS, — это максимум 12 960 транзакций в день.
По словам Тима Харрисона, вице-президента по сообществу и экосистемам в Input Output Global, на 2022 год запланирована работа над оптимизацией сети, которая поможет ей масштабироваться и стать более функциональной. Эра Басё принесёт обновление Plutus, которое увеличит пропускную способность Cardano в июне 2022 года, — хардфорк Vasil, названный в честь болгарского математика Васила Дабова. В апреле основатель Cardano Чарльз Хоскинсон анонсировал такие возможности улучшения масштабирования Vasil, как «конвейерная обработка, новые CIP Plutus, хранилище UTxO на диске и Hydra». В частности, конвейерная обработка ускорит процесс распределения блоков, сократив время задержки распространения. Это, в свою очередь, позволит реализовать такое улучшение, как справочные сценарии, которые могли бы значительно уменьшить размер транзакций, повысить пропускную способность и снизить затраты на выполнение скриптов. Cardano также приняла RINA, — эта таинственная малоизвестная топология сети, которая напоминает торрент-протокол: интернет представлен в ней в виде слоя, в котором узлы взаимодействуют, обмениваются информацией о состоянии и позволяют добавлять новые разнородные сети, сохраняя конфиденциальность и прозрачность.
Скептики контраргументируют, опровергая наличие возможностей у Cardano масштабироваться в эту эру.
Interoperability: нельзя просто так взять и совместить блокчейны
Проблема совместимости — общая боль всех криптовалют. Не существует способа проводить транзакции между разными криптовалютами или между экосистемой блокчейна и централизованной системой финансов. У каждой блокчейн-системы свои токены и смарт-контракты, и для осуществления транзакции нужно доказать другому блокчейну, что информация о владении токенов и исполнении смарт-контрактов верна. У банков свои законы, которые конфликтуют с философией блокчейна, — например, полный контроль над метаданными банковского перевода (получатель, отправитель, код вида дохода и т.п.) противоречит конфиденциальности криптовалютной транзакции; это причина, по которой стороны не доверяют друг другу. Криптобиржи пока являются единственными посредниками в этих невыясненных отношениях.
С самого рождения Cardano работает над проблемой совместимости. Его создатели изучают возможности частичного раскрытия метаданных, что позволит использовать криптовалюту для оплаты товаров и услуг, а также мгновенных частных переводов. В 2021 году команда IOHK объявила, что работает над коммуникацией со смарт-контрактами на основе Ethereum. Она достигается с помощью сайдчейнов — параллельных цепочек, которые осуществляют транзакции между двумя сторонами вне цепи. Для Cardano это возможно благодаря поддержке протокола KMZ, который безопасно перемещает активы из CSL на другой вычислительный уровень Cardano, — и те блокчейны, которые поддерживают текущий протокол. Так Cardano становится децентрализованной платформой данных, где блокчейны могут «перетекать» друг в друга без посредников.
Подводя итоги
После более чем 6 лет разработки Cardano, децентрализованная блокчейн-платформа для разработки DApp с открытым исходным кодом, многоуровневой архитектурой и проверяемыми смарт-контрактами, критикуется за медленное развитие и ограниченные возможности;
Платформа для написания смарт-контрактов Plutus запущена, но PAB неудобна в использовании. Разработчики запускают смарт-контракты через CLI с локального компьютера и ожидают возможности разворачивать PAB на удалённом сервере без привязки к кошельку. На сервере же должны происходить синхронизация с тестнетом и храниться базы данных chain-index и PAB, а пользователь сможет вызывать эндпоинты контракта, отправляя на сервер запросы;
Один EUTхO позволяет осуществить вывод транзакции только один раз. Пользователи могут столкнуться с проблемой конкуренции при попытке получить доступ к одному и тому же UTхO. Ряд разработчиков уже нашли решения;
Cardano решает общую для всех блокчейнов проблему масштабирования. В борьбе за пропускную способность и быстроту транзакций, создатели увеличили размер блока до 80 КБ, запустили хардфорк Vasil и приняли протокол RINA;
Проблема совместимости решается Cardano с помощью сайдчейнов.
kenoma
Можете привести примеры реальных задач, в которых применение Cardano дает беспрецендентное преимущество?