Перейти к основному контенту
Change page

Языки смарт-контрактов

Отличная особенность Эфириума заключается в том, что смарт-контракты можно программировать с использованием относительно удобных для разработчиков языков. Если у вас есть опыт работы с Python или любым языком с фигурными скобками (opens in a new tab), вы сможете найти язык со знакомым синтаксисом.

Два наиболее активных и поддерживаемых языка:

  • Solidity
  • Vyper

Remix IDE предоставляет комплексную среду разработки для создания и тестирования контрактов как на Solidity, так и на Vyper. Попробуйте браузерную Remix IDE (opens in a new tab), чтобы начать программировать.

Более опытные разработчики также могут захотеть использовать Yul, промежуточный язык для виртуальной машины Эфириума (EVM), или Yul+, расширение для Yul.

Если вам любопытно и вы хотите помочь в тестировании новых языков, которые все еще находятся в стадии активной разработки, вы можете поэкспериментировать с Fe — новым языком смарт-контрактов, который в настоящее время находится на ранней стадии развития.

Предварительные требования

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

Solidity

  • Объектно-ориентированный язык высокого уровня для реализации смарт-контрактов.
  • Язык с фигурными скобками, на который наибольшее влияние оказал C++.
  • Статически типизированный (тип переменной известен во время компиляции).
  • Поддерживает:
    • Наследование (вы можете расширять другие контракты).
    • Библиотеки (вы можете создавать переиспользуемый код, который можно вызывать из разных контрактов — подобно статическим функциям в статическом классе в других объектно-ориентированных языках программирования).
    • Сложные пользовательские типы.

Пример контракта

Этот пример должен дать вам представление о том, как выглядит синтаксис контракта на Solidity. Для более подробного описания функций и переменных ознакомьтесь с документацией (opens in a new tab).

Vyper

  • Язык программирования в стиле Python
  • Строгая типизация
  • Небольшой и понятный код компилятора
  • Эффективная генерация байт-кода
  • Намеренно имеет меньше функций, чем Solidity, с целью сделать контракты более безопасными и простыми для аудита. Vyper не поддерживает:
    • Модификаторы
    • Наследование
    • Встроенный ассемблер
    • Перегрузку функций
    • Перегрузку операторов
    • Рекурсивные вызовы
    • Бесконечные циклы
    • Двоичные числа с фиксированной запятой

Для получения дополнительной информации прочитайте обоснование создания Vyper (opens in a new tab).

Пример

Этот пример должен дать вам представление о том, как выглядит синтаксис контракта на Vyper. Для более подробного описания функций и переменных ознакомьтесь с документацией (opens in a new tab).

Yul и Yul+

Если вы новичок в Эфириуме и еще не программировали на языках смарт-контрактов, мы рекомендуем начать с Solidity или Vyper. Изучайте Yul или Yul+ только после того, как ознакомитесь с передовыми методами обеспечения безопасности смарт-контрактов и спецификой работы с EVM.

Yul

  • Промежуточный язык для Эфириума.
  • Поддерживает EVM и Ewasm (opens in a new tab) (WebAssembly, адаптированный для Эфириума) и разработан как удобный общий знаменатель для обеих платформ.
  • Хорошая цель для этапов высокоуровневой оптимизации, которая может принести равную пользу платформам EVM и Ewasm.

Yul+

  • Низкоуровневое, высокоэффективное расширение для Yul.
  • Изначально разработано для контракта оптимистичного роллапа.
  • Yul+ можно рассматривать как экспериментальное предложение по обновлению Yul, добавляющее в него новые функции.

Пример контракта

Следующий простой пример реализует функцию возведения в степень. Его можно скомпилировать с помощью solc --strict-assembly --bin input.yul. Пример должен быть сохранен в файле input.yul.

Если у вас уже есть большой опыт работы со смарт-контрактами, полную реализацию ERC-20 на Yul можно найти здесь (opens in a new tab).

Fe

  • Статически типизированный язык для виртуальной машины Эфириума (EVM).
  • Вдохновлен Python и Rust.
  • Стремится быть простым в изучении — даже для разработчиков, которые только знакомятся с экосистемой Эфириума.
  • Разработка Fe все еще находится на ранней стадии, альфа-версия языка была выпущена в январе 2021 года.

Пример контракта

Ниже приведен простой контракт, реализованный на Fe.

Как выбрать

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

Вот несколько моментов, которые следует учитывать, если вы еще не пробовали ни один из этих языков:

Чем хорош Solidity?

  • Если вы новичок, существует множество руководств и обучающих инструментов. Подробнее об этом читайте в разделе Обучение через программирование.
  • Доступны хорошие инструменты для разработчиков.
  • У Solidity большое сообщество разработчиков, а это значит, что вы, скорее всего, довольно быстро найдете ответы на свои вопросы.

Чем хорош Vyper?

  • Отличный способ начать для разработчиков на Python, которые хотят писать смарт-контракты.
  • Vyper имеет меньшее количество функций, что делает его отличным выбором для быстрого прототипирования идей.
  • Vyper стремится быть простым для аудита и максимально удобочитаемым для человека.

Чем хороши Yul и Yul+?

  • Упрощенный и функциональный низкоуровневый язык.
  • Позволяет стать намного ближе к чистой EVM, что может помочь оптимизировать использование газа вашими контрактами.

Сравнение языков

Для сравнения базового синтаксиса, жизненного цикла контракта, интерфейсов, операторов, структур данных, функций, потока управления и многого другого ознакомьтесь с этой шпаргалкой от Auditless (opens in a new tab).

Дополнительная литература