Перевод статьи https://cexplorer.io/article/what-makes-development-on-blockchain-different
Разработка на блокчейне предполагает смену парадигмы традиционного программирования и требует глубокого понимания децентрализованной модели блокчейна. Разработчики смарт контрактов имеют в своем распоряжении определенный набор функций для разработки децентрализованных приложений (DApp). Они должны создать безопасное DApp с первой попытки. В этой статье мы объясним различия между разработкой обычных приложений и блокчейн приложений. Мы рассмотрим скрипт, написанный на Aiken, и написанный на Solidity.
Чем отличается разработка на блокчейне?
Основное различие между стандартными языками программирования и блокчейн языками заключается в их вариантах использования и принципах проектирования. Стандартные языки программирования являются универсальными и могут использоваться для разработки широкого спектра приложений. С другой стороны, языки блокчейна часто разрабатываются со специфическими функциями для поддержки разработки децентрализованных приложений (DApp) и смарт контрактов (SC).
Разработчики, использующие традиционные языки программирования, имеют в своем распоряжении огромное количество библиотек, которые позволяют им писать практически все, что угодно. Эти библиотеки, разрабатываемые на протяжении многих лет мировым сообществом разработчиков, предоставляют предварительно написанный код для широкого спектра функциональных возможностей - от обработки файлового ввода-вывода до сложных алгоритмов машинного обучения. Эта обширная экосистема библиотек позволяет разработчикам создавать приложения быстро и эффективно, без необходимости изобретать велосипед.
Однако, когда дело доходит до разработки блокчейна, ситуация совершенно иная. Языки программирования блокчейна, такие как Solidity для Ethereum или Plutus для Cardano, хотя и мощные, не обладают такой широтой и глубиной доступных библиотек. Отчасти это связано с относительной новизной технологии блокчейн и специфическими требованиями к написанию смарт контрактов.
Языки программирования блокчейна разрабатываются с особым акцентом на криптографию и манипулирование фондами. Кроме того, это может быть создание токена нового типа, определение контроля над токенами, условий передачи и т.д.
Разработчики, которые пишут SC, действительно контролируют логику и правила, закодированные в этих контрактах. Однако они не контролируют определенные аспекты самой блокчейн сети.
Например, разработчики не могут контролировать пропускную способность сети, которая представляет собой скорость, с которой транзакции обрабатываются и добавляются в блокчейн. Это определяется различными факторами, такими как сетевой протокол, количество нод и используемый алгоритм консенсуса.
Аналогичным образом, разработчики не могут контролировать или предотвращать потенциальные манипуляции с блоками со стороны производителей блоков. Целостность процесса производства блоков поддерживается лежащим в основе блокчейна алгоритмом консенсуса и сетевыми правилами.
В то время как разработчики могут диктовать поведение своих SC, их выполнение зависит от блокчейн сети (и может быть ограничено ею).
Такое разделение интересов является фундаментальным аспектом децентрализованной природы технологии блокчейн. Это гарантирует, что ни одна сторона не имеет полного контроля над всеми аспектами сети блокчейн, тем самым повышая ее безопасность и надежность. Хотя это и желаемая функция блокчейна, некоторые разработчики могут чувствовать себя несколько ограниченными или зависимыми от внешних факторов.
При разработке блокчейна код выполняется в децентрализованной сети и должен соответствовать ограничениям протокола блокчейна. Например, каждая операция в SC требует определенного количества “газа”, и разработчики должны писать свои контракты так, чтобы они были максимально экономичными. Это часто означает, что смарт контракты являются более низкоуровневыми и строгими по своему стилю написания.
Более того, как только смарт контракт развернут на блокчейне, он не может быть изменен. Эта неизменность является фундаментальной особенностью технологии блокчейн, но это также означает, что разработчики должны разработать правильный код с первого раза.
Здесь нет места ошибкам или уязвимостям в системе безопасности, поскольку их невозможно исправить позже. Поэтому процесс разработки смарт контрактов часто включает тщательное тестирование и аудит. Это делает разработку DApp более длительной и дорогостоящей.
В дополнение к тому, что начинающим разработчикам сложно понять все подводные камни программирования на блокчейне, сама децентрализованная модель может представлять собой еще один подводный камень.
Разработка обычных приложений часто предполагает создание централизованной системы, в которой один объект контролирует данные и функциональность. Это резко контрастирует с блокчейн приложениями, которые работают по децентрализованной модели. В этой модели ни один объект не имеет контроля над всей сетью. Вместо этого контроль распределяется между сетью нод.
SC являются фундаментальной частью блокчейн приложений. Они представляют собой самоисполняющиеся контракты с условиями соглашения, непосредственно записанными в коде. Они автоматически выполняют транзакции в соответствии с заранее установленными правилами, без необходимости участия посредника. Такая автоматизация снижает риск человеческих ошибок и мошенничества.
Поскольку права на ошибку нет, SC должен делать именно то, что от него ожидается в данных условиях. Никакая третья сторона не должна иметь возможности повлиять на выполнение SC или остановить его. Код - это закон. Если выполнение SC завершается неудачно и возникает непредвиденная ошибка, обычно нет возможности сохранить потерянные средства.
Еще одна специфическая особенность разработки DApp заключается в том, что если разработчик хорошо знает одну среду, например Ethereum, он может быть вообще не готов к разработке на Cardano. Платформы SC могут принципиально отличаться друг от друга.
Разработчикам сложно перейти на новую платформу
Разработчики должны знать о существенных различиях между платформами SC, поскольку эти различия могут сильно повлиять на дизайн, функциональность и безопасность их приложений. Давайте посмотрим, например, на различия между состоянием и параллелизмом.
Две известные платформы SC, Ethereum и Cardano, являются прекрасными примерами того, как эти различия могут проявляться, особенно с точки зрения манипулирования состоянием и параллелизма.
Ethereum работает по аккаунт модели. В этой модели вся сеть имеет общее глобальное состояние, которое обновляется с каждым создаваемым блоком. Это глобальное состояние включает балансы на счетах и состояния смарт контрактов.
Модель Ethereum позволяет нескольким пользователям взаимодействовать с одним смарт контрактом в рамках одного блока. Однако это общее изменяемое состояние может привести к сложностям и потенциальным уязвимостям, особенно когда речь заходит о параллелизме. Параллелизм в данном контексте относится к способности нескольких транзакций выполняться одновременно. При неправильном выполнении это может привести к возникновению условий гонки и другим уязвимостям в системе безопасности.
С другой стороны, Cardano использует модель расширенных неизрасходованных выходов транзакций (EUTxO). В этой модели отправка и получение средств хранятся не как баланс, а как суммы неизрасходованных выходов транзакций (UTXO), которые связаны с адресами кошелька. Каждый из этих UTXO может быть израсходован только один раз.
Эта модель по своей сути оперирует параллелизмом, поскольку каждый выход транзакции может быть израсходован только один раз, и как только он израсходован, он не может быть использован другой транзакцией. Однако это также означает, что разработчикам нужно иначе относиться к тому, как они разрабатывают свои смарт контракты и управляют состоянием.
Понимание этих различий имеет решающее значение для разработчиков, чтобы избежать ошибок и уязвимостей в своих смарт контрактах. Например, повторный вызов является распространенной уязвимостью в Ethereum SC, когда злоумышленник может повторно вызывать функцию до завершения первого вызова функции. В Cardano это вызывает меньшую озабоченность благодаря модели EUTxO.
Хотя Ethereum и Cardano предлагают мощные платформы для разработки децентрализованных приложений, у каждой из них есть свои уникальные подходы к обработке состояния и параллелизму. Разработчики должны понимать эти различия и их последствия для разработки смарт контрактов, чтобы эффективно создавать безопасные и результативные приложения на этих платформах.
Разработчики, которые хорошо разбираются в Solidity, не могут легко перейти на Cardano. В дополнение к необходимости изучения нового языка программирования (Plutus, Aiken и т.д.), им также приходится иметь дело со специфическими характеристиками данного блокчейна. То же самое относится, например, к миграции на Solana.
Переход с одной блокчейн платформы на другую предполагает нечто большее, чем просто изучение нового языка программирования. Каждая платформа имеет свою собственную уникальную архитектуру, механизм консенсуса, модель транзакций, учетную модель и функциональность смарт контрактов.
Например, переход с Java на C# может быть проще для разработчиков, если у них уже есть опыт работы с такими концепциями, как работа с Интернетом, базами данных, облачными сервисами, файловыми системами и т.д.
Aiken
Aiken - функциональный язык программирования, используемый для написания скриптов (смарт контрактов) для Cardano.
На картинке вы можете увидеть очень простой скрипт валидатора. Скрипт проверяет, соблюдены ли условия для расходования средств.
Отправитель должен предоставить подпись и строку “Привет, мир!”. Если это так, возвращаемое значение скрипта равно Верно. Это позволит потратить средства.
Ознакомьтесь с функциями, доступными разработчикам. Помимо прочего, разработчики могут использовать массивы байтов и сравнивать их друг с другом, использовать несколько хеш-функций (blake2b_256, sha2_256 и sha3_256), работать с временным интервалом, выполнять базовые арифметические функции, работать со строками и т.д.
Что касается функций, которые больше связаны с блокчейном, разработчики могут работать с адресами, сертификатами и транзакциями. Кроме того, они могут работать со значениями монет ADA и токенов и т.д.
DApp для Cardano требует создания ончейн и оффчейн части. Aiken предназначен только для ончейн части. Разработчики могут использовать любой подходящий язык программирования для создания оффчейн части.
В Cardano смарт контракты, написанные на Aiken или Plutus, часто меньше по размеру, поскольку они, по сути, являются скриптами проверки, которые определяют, является ли транзакция действительной. Они работают по модели UTXO, где каждый выход транзакции содержит небольшой фрагмент логики (контракт) для проверки любой транзакции, которая пытается его израсходовать.
С другой стороны, смарт контракты Ethereum, написанные в Solidity, представляют собой приложения с отслеживанием состояния, которые работают на блокчейне и обычно имеют более высокий уровень сложности. Они работают по модели, основанной на аккаунтах, где контракты имеют постоянное состояние, хранящееся в блокчейне, и функции, которые могут изменять это состояние.
На рисунке ниже вы можете увидеть пример контракта, который управляет владением цифровыми токенами и позволяет передавать эти токены между держателями токенов.
Первые 4 строки контракта представляют состояние, которое хранится в блокчейне.
Приложение небольшой компании, написанное на традиционном объектно-ориентированном языке программирования, может содержать тысячи строк кода, в то время как приложение корпорации легко может содержать десятки-сотни тысяч строк исходного кода. Например, бортовое оборудование и системы онлайн-поддержки Boeing 787 имеют 6,5 миллионов линий.
С точки зрения строк кода, DApp невелики по сравнению с обычными приложениями. Простое DApp может включать в себя несколько смарт контрактов, каждый из которых состоит из нескольких десятков - нескольких сотен строк кода. Более сложные DApp, такие как децентрализованные биржи или кредитные платформы, могут состоять из множества смарт контрактов с тысячами строк кода.
Вывод
Создание DApp - это новая прибыльная область, которая с каждым годом привлекает все больше и больше разработчиков. Они могут создавать все более эффективные и удобные для пользователя DApp, несмотря на необходимость преодолевать все подводные камни децентрализации и специфику разработки на блокчейне. Разработка игр и приложений для мобильных телефонов, например, отличается высокой конкуренцией и насыщенностью. В блокчейн индустрии команде может быть намного проще утвердиться и стать доминирующим игроком в этой области. Это заманчиво.
// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском языке можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano? Тогда приглашаем в наше уютное русскоязычное сообщество Cardano в Telegram. Оставайтесь на связи, все только начинается!