Обязательный курс для разработчиков Web3: Полный анализ языков смарт-контрактов

Саморазвитие разработчиков Web3 — языки смарт-контрактов

Основное введение

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

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

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

Саморазвитие разработчиков Web3 — язык смарт-контрактов

Смарт-контракты язык

Большинство разработчиков смарт-контрактов работают на Ethereum и совместимых с EVM блокчейнах, в то время как Solana имеет наибольшее количество разработчиков среди экосистем не совместимых с EVM блокчейнов, а Move был специально создан для безопасной разработки смарт-контрактов для блокчейна.

Хотя есть много других публичных блокчейнов с собственными языками смарт-контрактов, такими как TON/FunC, Cardano/Plutus, ICP/Motoko, Flow/Cadence, Starknet/Cairo и т.д., они слишком фрагментированы.

Поэтому в данной статье языки смарт-контрактов будут классифицированы и представлены по системам EVM, Solana и Move.

EVM-система

EVM является ядром Ethereum, отвечающим за выполнение смарт-контрактов и обработку транзакций. Протокол Ethereum определяет байт-код, который выполняется на EVM, и строит на его основе промежуточные языки Yul и Yul+, а на промежуточном языке снова строятся такие высокоуровневые языки, как Solidity/Vyper/Fe, которые упрощают разработку смарт-контрактов для конечных пользователей. Преимущества многослойной архитектуры заключаются в том, что промежуточный язык подходит как для перевода в машинный язык, так и для полной оптимизации программы, его легко проверять вручную, проводить формальную верификацию и другие проверки. Однако с увеличением числа уровней стоимость обеспечения доказуемой надежности возрастает, поскольку для каждого уровня требуется соответствующая верификация; конечно, чем ниже уровень языка, тем проще он, и тем ниже стоимость верификации.

На блокчейнах Ethereum и совместимых с EVM разработчики могут использовать различные высокоуровневые языки программирования, в настоящее время наиболее популярными и хорошо поддерживаемыми языками являются Solidity и Vyper, кроме того, доступны Yul, Yul+, Fe и Huff.

Solidity была впервые предложена CTO Ethereum Гэвином Вудом в 2014 году, а затем разработка была передана команде Ethereum под руководством Кристиана Рейтвесснера. Solidity, как объектно-ориентированный язык программирования, сильно зависит от C++, Python и JavaScript и специально разработан для EVM. Для переиспользования кода смарт-контракты рассматриваются как объекты классов, использующие множественное наследование. В частности, Solidity определяет стандарт прикладного бинарного интерфейса (ABI) для взаимодействия с его контрактами. В настоящее время ABI Solidity считается фактическим стандартом EVM DSL.

Vyper был разработан командой одного из основателей Ethereum, Виталика Бутерина, как альтернативный выбор для Solidity и был выпущен в 2017 году. Vyper — это контрактно-ориентированный язык программирования, похожий на Python, и он также предназначен для EVM. Vyper оптимизирован для безопасности, читаемости, возможности аудита и эффективности Gas. Vyper не использует объектно-ориентированную модель и не поддерживает инлайн-ассемблер.

Yul является языком ассемблера с высоким уровнем управления потоком и большим количеством абстракций, который является частью инструментария Solidity. Большинство функций в Yul доступны в Solidity через встроенные блоки ассемблера, что позволяет использовать функции, не поддерживаемые Solidity, а также настраивать хранилище, память и calldata. Yul+ является расширением Yul и может рассматриваться как экспериментальное обновление Yul.

Fe является высокоуровневым языком, похожим на Rust, и был выпущен в январе 2021 года. Fe не использует объектно-ориентированную модель, а вместо этого повторно использует код через модульную систему, позволяя объявлять переменные, типы и функции внутри модуля, которые можно импортировать аналогично Rust.

Huff — это язык ассемблера, обладающий ручным управлением стеком и минимальной абстракцией над набором команд EVM. С помощью директивы «#include» можно на этапе компиляции разрешать любые включенные файлы Huff, что позволяет осуществлять повторное использование кода.

На Ethereum большинство смарт-контрактов разработаны на Solidity, примерно 90%, что в десять раз больше, чем у второго места Vyper, а Fee, поскольку он появился позже, практически не используется разработчиками. Yul и Yul+ обычно используются как встроенные ассемблерные блоки для Solidity, позволяющие низкоуровневый доступ к набору инструкций EVM, обычно используемому для оптимизации Gas. Huff находится на более низком уровне, чем Yul/Yul+, и позволяет вручную управлять стеком и вызывать инструкции EVM, обычно используемыми для оптимизации предельного значения Gas.

Самосовершенствование веб3-разработчиков — смарт-контракты

Отдел Solana

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

Солана называет смарт-контракты цепочечными программами (Program), которые в основном написаны на языке Rust, но, в отличие от других публичных цепей, использующих язык Rust, Солана не использует WASM runtime. У Соланы есть своя уникальная виртуальная машина SVM и байт-код SBF.

SVM является runtime для запуска смарт-контрактов и обработки транзакций в сети Solana, ключевым компонентом является Sealevel. Sealevel обеспечивает параллельную обработку в runtime Solana, позволяя нескольким смарт-контрактам выполняться одновременно без влияния на производительность друг друга. Смарт-контракты Solana указывают, какие состояния (аккаунты) будут читаться или записываться во время выполнения, что позволяет выполнять транзакции без конфликтов параллельно, одновременно гарантируя согласованность данных.

SBF основан на eBPF, который является предшественником BPF (Berkeley Packet Filter, фильтр пакетов Беркли) и изначально предназначен для эффективной фильтрации сетевых пакетов. eBPF предоставляет более богатый набор инструкций, позволяя динамически вмешиваться и изменять поведение ядра операционной системы без изменения исходного кода, обладая высокой производительностью, безопасностью и портативностью. В отличие от eBPF, SBF использует пользовательский валидатор, который не только проверяет, нужно ли программе завершиться в пределах определенного количества инструкций (так называемая проблема остановки), но и проверяет правильность инструкций и наличие переполнения переходов. Кроме валидатора, также решаются некоторые детали eBPF, которые могут представлять проблемы при компиляции смарт-контрактов.

LLVM (Low Level Virtual Machine) — это современная архитектура компиляции и инструментальная цепочка, которая позволяет компиляторам переводить Rust в промежуточный язык LLVM IR, который затем может быть переведен на целевую платформу eBPF с помощью LLVM IR. Теоретически, любые языки программирования, поддерживающие компиляцию в LLVM IR, могут быть использованы для написания смарт-контрактов Solana, но на практике Solana Labs внесла множество изменений в Rust и eBPF LLVM бэкенд, некоторые из которых по сути недоступны в upstream (Rust и LLVM). В настоящее время разработка контрактов Solana поддерживает только Rust и Solang.

Rust был разработан под руководством Mozilla и выпущен в 2011 году. По синтаксису он похож на C++, является универсальным языком с статической компиляцией, спроектированным для производительности и безопасности, особенно в вопросах безопасности, и не ограничивается программами смарт-контрактов. По сравнению с Solidity, Rust является низкоуровневым (low-level) языком программирования с множеством парадигм, обладающим высокой производительностью и безопасностью памяти. Официальный компилятор Rust называется rustc, он выполняет лексический анализ, синтаксический анализ и семантический анализ исходного кода Rust, в конечном итоге компилируя код в LLVM IR.

Solang, разработанный компанией Hyperlege Labs и выпущенный в 2023 году, является компилятором Solidity на основе архитектуры LLVM для Solana и Polkadot, поддерживающим написание смарт-контрактов на Solidity, но с некоторыми изменениями в синтаксисе для согласования с архитектурой Solana и Polkadot. Цель Solang состоит в том, чтобы упростить переход разработчиков на Solana или Polkadot и расширить область разработки Solidity.

Rust является основным поддерживаемым языком от Solana, обладающим большей стабильностью; Основное преимущество Solang заключается в его совместимости с языком Solidity.

Саморазвитие веб3 разработчиков — смарт-контракты

Система ### Move

Move является новым языком программирования смарт-контрактов, который был представлен в 2019 году и изначально разрабатывался для блокчейн-проекта Diem от Meta. Move нацелен на решение проблем безопасности в отношении активов и транзакций, позволяя строго определять и контролировать активы и транзакции. Его языковые особенности заключаются в следующем:

  1. Защита ресурсов первого класса (Frist Class Resources): ресурсы первого класса сначала являются типом переменной, а затем устанавливается, что переменные этого типа: не могут быть скопированы; не могут быть неявно уничтожены; могут быть "перемещены" только на разные адреса программ.

  2. Гибкость: байт-код Move может быть выполнен напрямую, а также может вызывать код других опубликованных модулей, что позволяет вызывать несколько программ в одной транзакции и гибко осуществлять переводы нескольким людям в одной транзакции;

  3. Безопасность и проверяемость: Система кодирования Move предоставляет целевую защиту ресурсов. Ресурсы Move не могут быть скопированы, повторно использованы или уничтожены. Тип ресурса может быть создан или уничтожен только модулем, определяющим его тип. Виртуальная машина Move будет проверять статический байт-код и отклонять выполнение программ, не прошедших проверку байт-кода, обеспечивая таким образом их безопасность.

После распуска проекта Diem его основная команда ушла и основала Aptos и Sui, также использующие Move в качестве основного языка смарт-контрактов. Aptos унаследовал Diem Move (Core Move), тогда как Sui разрабатывает свои смарт-контракты с помощью собственной кастомизированной версии Sui Move.

В Move каждый смарт-контракт является модулем, состоящим из определения функций и структур, которые инстанцируются в функциях и могут передаваться другим модулям через вызов функций. Sui Move по сравнению с Core Move использует объектно-ориентированную модель данных, в Sui существуют три разных типа объектов: объекты-владельцы, совместно используемые объекты и неизменяемые объекты. Параллельная стратегия Sui похожа на Solana, транзакции также требуют указания, какие объекты обрабатываются, такой дизайн позволяет Sui эффективно обрабатывать параллельные транзакции, реализуя способность к параллельной обработке без необходимости глобальной сортировки, требуемой традиционными блокчейнами.

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

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

Move также имеет инструмент формальной проверки для смарт-контрактов, называемый Move Prover. Разработчики должны написать условия проверки для смарт-контрактов (в виде утверждений), Move Prover на заднем плане преобразует эти условия проверки в SMT-формулы, а затем использует SMT-решатель для проверки.

Саморазвитие разработчиков Web3 — смарт-контракты

Смарт-контракты разработка инструментов

Для тех, кто хочет начать с Web3 или изучить разработку смарт-контрактов на Ethereum и других блокчейнах, совместимых с EVM, Solidity является безусловным выбором. И благодаря популярности Solidity инструменты для разработки также стали более зрелыми, среди которых можно выделить:

  • Hardhat является средой разработки для компиляции, развертывания, тестирования и отладки приложений Ethereum. Она помогает разработчикам управлять и автоматизировать повторяющиеся задачи, присущие процессу создания смарт-контрактов и DApps, а также легко добавлять больше функций вокруг этого рабочего процесса;

  • OpenZeppelin предоставляет открытые OpenZeppelin Contracts, написанные на Solidity, для создания безопасных смарт-контрактов. OpenZeppelin Contracts позволяет

Посмотреть Оригинал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Награда
  • 3
  • Поделиться
комментарий
0/400
ApeWithNoFearvip
· 13ч назад
смарт-контракты搞不定 这可咋混!
Посмотреть ОригиналОтветить0
ImpermanentLossFanvip
· 13ч назад
смарт-контракты быкp个毛...на самом деле это просто блок кода
Посмотреть ОригиналОтветить0
0xOverleveragedvip
· 13ч назад
Не играю в токены, только торгую фьючерсами. Высокий левередж делает это интересным.
Посмотреть ОригиналОтветить0
  • Закрепить