:RU: Развитие программируемости блокчейна

Перевод статьи https://cexplorer.io/article/development-of-blockchain-programmability

image

Первое поколение блокчейна - это, по сути, просто транзакционная сеть, похожая на PayPal. Актив может быть передан безусловно только от Алисы к Бобу. Bitcoin чаще всего используется для простой передачи ценностей. Однако есть возможность написать скрипт. Cardano и Ethereum являются платформами смарт контрактов, поэтому на них можно создавать альтернативные банковские сервисы. Платформы позволяют разработчикам реализовывать более сложные программы и работать с состояниями приложений. В статье мы опишем возможности программирования Bitcoin, Ethereum и Cardano. Мы также кратко рассмотрим некоторые различия между смарт контрактами Ethereum и скриптами Plutus.

Возможности блокчейна первого поколения

Мы можем включить Bitcoin в первое поколение блокчейна. Bitcoin придумал концепцию цифрового дефицита. В целом, блокчейн позволяет создать фиксированную денежно-кредитную политику, которая является неизменной или может быть изменена только с согласия большинства. Могут существовать цифровые монеты (также называемые нативными монетами), которые невозможно скопировать в системе.

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

Существование монет зависит от распределенной сети и децентрализации.

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

Денежно-кредитная политика, цифровой дефицит, справедливость, равенство и передача монет контролируются всеми участниками сетевого консенсуса.

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

image

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

На изображении ниже вы можете видеть, как нода Bitcoin проверяет обычную транзакцию. Алиса отправляет BTC Бобу. Исходный код для верификации транзакции определен в Bitcoin-клиенте. Нода проверяет, помимо прочего, имеет ли транзакция действительную цифровую подпись, подтверждающую право собственности на BTC во входе, и расходует ли транзакция какие-либо BTC, которые уже были расходованы другой транзакцией, а также другие согласованные правила.

image

Верификация регулярных транзакций не зависит от сторонней программы. Вся логика реализована в Bitcoin-клиенте. Если необходимо выполнить что-либо более сложное, помимо обычной верификации, например, цифровую подпись, необходимо, чтобы третья сторона запрограммировала логику, а протокол позволял выполнять программу.

Возникает вопрос. Имеет ли смысл отправлять транзакции условно? Имеет ли смысл выпускать новые токены, которые обладали бы теми же или сходными свойствами, что и нативные монеты, т.е. неизменной денежно-кредитной политикой? Или может когда-либо изменение денежно-кредитной политики (сжигание и повторный выпуск токенов) принести пользу? Это потребовало бы определения правил и обеспечения возможности их верификации децентрализованным образом.

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

Написание скриптов позволяет пользователям передавать ценности в канал состояния (Lightning Network) или определять условие для расходования ценности таким образом, чтобы транзакция была подписана определенным числом участников (например, двумя из трех).

Bitcoin может определять условия для расходования BTC.

Bitcoin Script - это простой, основанный на стеке и Тьюринг-неполный язык, который разработан таким образом, чтобы быть безопасным, детерминированным и простым в верификации. Это вносит несколько основных ограничений для разработчиков.

Bitcoin Script имеет ограниченный набор кодов операций и типов данных, что ограничивает функциональность и эффективность скриптов. Он не поддерживает циклы, рекурсию или вычисления с отслеживанием состояния, что делает невозможным реализацию некоторых алгоритмов или протоколов. Кроме того, он не имеет доступа к каким-либо внешним данным или событиям, что ограничивает интерактивность и адаптивность скриптов. Bitcoin Script не имеет формальной семантики или системы типов, что затрудняет рассуждения о корректности и безопасности скриптов.

Большинство транзакций в сети Bitcoin являются стандартными. В 2021 году количество нестандартных (скриптовых) транзакций выросло до 10-18% (анализы отличаются друг от друга).

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

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

На изображениях в статье скрипты будут показаны красным цветом. Интерпретатор и виртуальные машины будут показаны синим цветом.

Любой, кто создает транзакцию, может использовать Bitcoin скрипты, чтобы указать, как BTC может быть потрачен в транзакции в дальнейшем. Bitcoin скрипты развертываются путем включения их во входы и выходы транзакции. Входы содержат скрипты, которые разблокируют BTC из предыдущих транзакций, а выходы содержат скрипты, которые блокируют BTC для будущих транзакций.

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

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

Интерпретатор находится на каждой Bitcoin ноде. Он срабатывает, когда необходимо выполнить скрипт как часть верификации. Обратите внимание, что верификация транзакции происходит децентрализованным образом.

На изображении ниже вы можете видеть, как нода Bitcoin проверяет транзакцию скрипта. Транзакция содержит скрипт (выделен красным цветом) с логикой расходования ценности. Это логика, предоставлена третьей стороной. Интерпретатор скриптов (синий) используется для верификации скрипта. Выход оценки скрипта определяет, будет ли израсходована ценность (то есть перейдет ли право собственности на ценность к Бобу).

image

Ethereum - это первая Тьюринг-полная блокчейн-платформа

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

Одной из особенностей Ethereum является то, что он позволяет пользователям создавать пользовательские токены с помощью смарт контрактов. Токены - это цифровые активы, которые могут представлять собой что-либо ценное, например валюту, предметы коллекционирования или права. В первом поколении блокчейнов были только нативные монеты. Ни протокол, ни скрипты не допускали создания и передачи пользовательских токенов.

Ethereum позволил писать сложные приложения, которые могут работать с нативными монетами и целым рядом других токенов. Благодаря Ethereum родилась индустрия DeFi.

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

Одно из отличий между Bitcoin и Ethereum с точки зрения сложных операций заключается в том, что транзакции Ethereum не содержат смарт контракта с логикой расходов, а только ссылку на смарт контракт.

Смарт контракты хранятся в блокчейне Ethereum. Смарт контракты развертываются в блокчейне путем отправки транзакции специального типа, которая содержит байт-код и параметры конструктора смарт контракта. Транзакция создает новый адрес в сети, который представляет смарт контракт. Байт-код и состояние смарт контракта хранятся в блокчейне по этому адресу.

Чтобы запустить смарт контракт, пользователь может отправить транзакцию другого типа, которая ссылается на адрес смарт контракта и предоставляет некоторые параметры, такие как ценность, лимит газа, цена газа, данные или вызов функции. Транзакция запустит выполнение кода смарт контракта нодами сети с использованием виртуальной машины Ethereum (EVM).

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

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

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

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

image

Давайте рассмотрим несколько отличий между Solidity и EVM в сравнении с Bitcoin скриптом и интерпретатором на основе стека.

Solidity обеспечивает более высокую выразительность. Solidity - это высокоуровневый, объектно-ориентированный и Тьюринг-полный язык программирования, который может реализовывать сложную и гибкую логику и функциональность для смарт контрактов.

Код Solidity компилируется в инструкции байт-кода, которая выполняется EVM. Код Bitcoin скрипта непосредственно встраивается во входы и выходы транзакций и интерпретируется нодами сети.

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

Solidity и EVM могут обеспечить большую выразительность и тонкость, чем Bitcoin скрипт, поскольку они могут использовать различные функции, такие как циклы, рекурсия, вычисления с отслеживанием состояния, функции более высокого порядка или отложенное вычисление. Ethereum может предложить большую безопасность и надежность, чем скрипт Bitcoin, поскольку смарт контракты могут использовать формальную верификацию и тестирование для обеспечения корректности и безопасности смарт контрактов (доступны различные инструменты и фреймворки).

Большая выразительность и наличие состояния могут требовать большего мастерства и скрупулезности, чем Bitcoin скрипт, для написания и выполнения смарт контрактов, поскольку они могут быть более сложными и содержать потенциальные подводные камни.

Выполнение смарт контрактов может повлечь за собой большие затраты, чем запуск Bitcoin скрипта для смарт контрактов, поскольку они могут потреблять большую плату за газ для вычислений и хранения ресурсов в сети. Ethereum может столкнуться с большими проблемами масштабируемости, чем обработка Bitcoin скрипта, поскольку выполнение смарт контрактов может привести к большей перегрузке сети и задержкам из-за их более высокой потребности в ресурсах.

Большинство транзакций Ethereum связаны с исполнением смарт контрактов. DeFi, NFT и стейблкоины - это то, что актуально в блокчейн-индустрии, которые открывают новые возможности. Ethereum превзошел Bitcoin по количеству активных пользователей и транзакций.

У Cardano есть нативные скрипты и скрипты Plutus

Cardano - это платформа смарт контрактов, похожая на Ethereum, но со многими отличиями. Написание скриптов на Cardano может быть выполнено двумя способами: нативными скриптами и скриптами Plutus.

Нативные скрипты - это простые скрипты, которые можно использовать для блокировки средств, выпуска токенов или делегирования монет ADA. Они написаны в формате, подобном JSON, и могут быть непосредственно интерпретированы правилами леджера Cardano. Таким образом, нативные скрипты не требуют каких-либо специальных инструментов или виртуальных машин для их верификации.

Нативные скрипты - это один из способов реализации транзакции с несколькими подписями. Они используются в сертификатах делегирования. Сертификат делегирования - это тип транзакции, который позволяет держателю монет делегировать свои монеты ADA какому-то стейк пулу.

На изображении ниже вы можете увидеть транзакцию с помощью нативного скрипта. Обратите внимание, что ноде Cardano не нужна никакая виртуальная машина или интерпретатор для выполнения скрипта (в отличие от Bitcoin и Ethereum). Они выполняются нативно. Алиса может отправить транзакцию с сертификатом делегирования, в котором она делегирует ADA пулу Боба. В качестве альтернативы, это может быть транзакция, содержащая скрипт эмиссии. Токены будут выпущены на адрес Боба (эмитента токенов).

image

Существует два способа включить нативный скрипт в транзакцию:

  • Во-первых, встраивание скрипта в качестве Datum в транзакцию. Это означает, что скрипт является частью данных транзакции и может быть виден любому, кто проверяет транзакцию. Этот метод подходит для коротких и простых скриптов или для тех, которые необходимо часто менять.
  • Во-вторых, сохранение скрипта в блокчейне посредством транзакции и ссылка на него по его хешу. Скрипт хранится в виде выхода в блокчейне и может быть идентифицирован по его уникальному хешу. Выход должен иметь адрес, полученный из хеша скрипта, и должен иметь сумму не менее 1 ADA, чтобы гарантировать, что он не будет удален сетью. Этот метод подходит для длинных и сложных скриптов или для тех, которые должны быть исправлены и неизменяемы.

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

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

image

Нативные скрипты в основном представляют собой ончейн логику, поскольку они встроены в транзакцию или хранятся в блокчейне. Однако они также могут иметь некоторую оффчейн логику, такую как генерация транзакций, которые используют нативные скрипты в качестве входов или выходов. Например, вы можете использовать JavaScript, Python или Java для создания приложений, генерирующих транзакции с использованием нативных скриптов.

Теперь давайте подробнее рассмотрим скрипты Plutus.

Скрипты Plutus - это более сложные и выразительные скрипты, которые могут реализовывать произвольную логику и взаимодействовать с другими смарт контрактами. Они написаны на Plutus (Haskell-подобном языке), функциональном языке программирования, и скомпилированы в Plutus Core, язык низкого уровня, который работает на виртуальной машине Cardano (CVM).

Одной из ключевых особенностей написания скриптов на Cardano является разделение ончейн кода и оффчейн кода (логика программы).

Ончейн логика - это логика, которая работает на блокчейне и проверяет транзакции, связанные со смарт контрактами. Ончейн логика написана в Plutus Core и выполняется виртуальной машиной Cardano. Логика ончейн неизменяема и прозрачна, что означает, что она не может быть изменена или скрыта после ее развертывания в блокчейне.

Оффчейн логика - это логика, которая работает вне блокчейна и обрабатывает требования и взаимодействия приложения смарт контракта. Оффчейн логика написана на Haskell, языке высокого уровня, который может использовать платформу приложений Plutus (PAF) для доступа к таким сервисам, как ноды, кошельки, оракулы и т.д. Однако также могут использоваться другие языки программирования высокого уровня (JavaScript, Python или Java).

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

Скрипты Plutus - это смарт контракты, которые используют как ончейн, так и оффчейн логику. Ончейн часть скрипта Plutus называется скриптом верификации, который решает, авторизована ли транзакция, которая расходует выход, для этого. Ончейн код, как следует из названия, проверяется всеми нодами сети Cardano. Оффчейн часть скрипта Plutus называется Plutus application backend (PAB), которая генерирует транзакции, соответствующие правилам скрипта верификации.

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

Разделение кода ончейн и кода оффчейн полезно для создания гибких и надежных приложений для смарт контрактов. Используя такие инструменты, как Plutus Application Framework (PAF) и Plutus Application Backend (PAB), разработчики могут легко создавать и развертывать свои приложения для смарт контрактов локально или в реальной производственной среде.

Скрипты Plutus могут быть частью транзакций в качестве входов или выходов, в зависимости от того, как они используются. Существует два основных типа скриптов Plutus: скрипты верификации и скрипты эмиссионной политики (minting scripts).

Скрипты верификации используются для блокировки средств на адресе скрипта и верификации расходования этих средств. Результатом верификации является логическое значение (True означает, что ценность может быть разблокирована/расходована). Верификатор не в состоянии выполнить такое действие, как инициация другого скрипта или отправка каких-либо токенов куда-либо. Верификатор только одобряет или отклоняет разблокировку средств по адресу скрипта.

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

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

Хеш скрипта - это идентификатор (ID) политики нативных токенов, которые генерирует скрипт. Если у вас есть токены с определенным идентификатором политики, вы можете быть уверены, что токены были выпущены скриптом (политика эмиссии), который соответствует идентификатору политики.

Скрипты верификации обладают большей гибкостью, в то время как политики эмиссии обладают большей согласованностью.

Когда скрипт верификации должен быть выполнен, ему передаются эти три фрагмента информации в качестве аргументов:

  • Datum: это фрагмент данных, прикрепленный к UTxO, который блокируется скриптом. Обычно он используется для переноса состояния (состояния приложения).
  • Redeemer: это фрагмент данных, прикрепленный к расходуемому входу. Обычно он используется для предоставления входа в скрипт от того, кто расходует (входные данные, которые могут разблокировать средства с помощью скрипта).
  • Контекст: это фрагмент данных, представляющий информацию о расходуемой транзакции. Он используется для создания утверждений о способе отправки выхода.

Datum - это необязательные данные. Datum всегда хранятся рядом с UTXO. На одном адресе может быть несколько UTXO, поэтому также может быть несколько Datum. Все Datum на адресе равны. Никакие конкретные Datum не служат глобальным состоянием скрипта. Все UTXO на адресе независимы, и их разблокировка проверяется скриптом отдельно.

На изображении ниже вы можете увидеть смарт контракт Cardano, состоящий из оффчейн логики (бэкенд) и ончейн логики. Одно и то же приложение может использовать оффчейн логику для создания транзакций с помощью скриптов и тот же бэкенд для создания транзакций расходования. Боб создал транзакцию с помощью скрипта. Она содержит скрипт Plutus (верификатор), а также UTxO, который блокируется через верификатор (скрипт). UTxO может содержать Datum, который представляет собой фрагмент данных, которые можно использовать для хранения состояния контракта. Алиса хочет разблокировать UTxO. Чтобы израсходовать UTxO, в оффчейн части смарт контракта должна быть создана транзакция расходования, которая может содержать Redeemer. Redeemer - это вход для скрипта Plutus, который решает, является ли транзакция расходования действительной или нет.

Логика приложения, определенная в бэкенд, позволила Бобу заблокировать ценность, а Алисе разблокировать ценность. Первая транзакция блокирует средства по адресу скрипта, а вторая запускает выполнение скрипта для разблокировки средств.

Обратите внимание, что в случае транзакции скрипта (транзакции Боба) стрелка с левой стороны бэкенд ведет непосредственно к транзакции в правой части изображения. Это означает, что скрипт Plutus не выполняется при отправке транзакции. Скрипт верификатора блокирует средства по адресу скрипта, и выполнение запускается транзакцией расходования (транзакцией Алисы). Вот почему стрелка ведет от транзакции расходования к виртуальной машине Cardano.

Логика оффчейн может генерировать транзакции по скрипту, которые блокируют средства на адресе скрипта и требуют определенного значения Redeemer для их разблокировки. Например, Боб может использовать логику оффчейн для создания транзакции скрипта, которая блокирует 10 ADA на адресе скрипта и требует значения Redeemer “Hello”, чтобы разблокировать их. Затем Боб может отправить адрес скрипта и значение Redeemer Алисе, которая может использовать логику оффчейн для создания транзакции расходования, которая предоставляет правильное значение Redeemer и расходует 10 ADA с адреса скрипта.

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

Скрипты Plutus не имеют состояния в том смысле, что у них нет доступа к какому-либо постоянному хранилищу или глобальным переменным. Однако они могут использовать метод, называемый state threading, для имитации поведения, учитывающее состояние, путем передачи данных между различными экземплярами скрипта. Состояние сохраняется в виде Datum, прикрепленных к выходу скрипта, и к нему можно получить доступ через следующий вход скрипта, который использует этот выход. Datum могут быть любые произвольные типы данных, которые скрипт может кодировать и декодировать.

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

Скрипты Plutus более выразительны, чем Bitcoin скрипты и смарт контракты Ethereum. Haskell - это функциональный язык программирования, который может реализовывать произвольную логику и взаимодействовать с другими смарт контрактами. Серверная часть (бэкенд) может быть реализована на любом языке высокого уровня. Solidity также может реализовывать сложную логику и взаимодействовать с другими смарт контрактами, но у него есть некоторые ограничения и недостатки по сравнению с Haskell. Например, Solidity имеет более высокий риск ошибок и уязвимостей из-за своего изменяемого состояния и низкоуровневых деталей. Solidity также имеет более высокую стоимость исполнения из-за своей модели газа, которая ограничивает сложность и масштабируемость приложений смарт контрактов на Ethereum.

Haskell - это язык, поддерживающий формальную верификацию, поскольку он обладает ясным и точным синтаксисом, сильной и статичной системой типов, а также чистой и детерминированной семантикой. В Haskell также есть библиотеки и инструменты, которые могут помочь с формальной верификацией, такие как QuickCheck, LiquidHaskell и Coq.

Если вы посмотрите на типы транзакций за более длительный период времени, вы увидите, что транзакций со скриптом примерно в 2 раза больше, чем обычных транзакций. У Cardano есть нативные активы. Если пользователи хотят отправлять токены друг другу, нет необходимости использовать скрипт. Таким образом, объем обычных транзакций относительно высок по сравнению с Ethereum (т.к. для передачи активов всегда необходимо использовать смарт контракт).

Вывод

Bitcoin не обладает и не будет обладать такими же возможностями, как Cardano или Ethereum. Bitcoin скрипты очень просты и не позволяют создать сложную логику, необходимую для создания альтернативного финансового сервиса. Ordinal, Inscription и BRC-20 - это технологии, которые не обладают потенциалом для преодоления возможностей платформ смарт-контрактов. Протокол Bitcoin, по сути, просто записывает данные в блокчейн без какой-либо верификации содержимого. Отсутствует возможность выполнения сторонних программ.

В статье мы в основном сосредоточились на описании параметров программируемости и не слишком много на сравнении. Мы рассмотрим это как-нибудь в следующий раз.

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