Перейти до основного вмісту
Change page

Мови смарт-контрактів

Чудова особливість Етеріуму полягає в тому, що смарт-контракти можна програмувати за допомогою відносно зручних для розробників мов. Якщо ви маєте досвід роботи з Python або будь-якою мовою з фігурними дужками (відкривається в новій вкладці), ви зможете знайти мову зі знайомим синтаксисом.

Дві найактивніші мови, що підтримуються:

  • Solidity
  • Vyper

Remix IDE надає комплексне середовище розробки для створення та тестування контрактів як на Solidity, так і на Vyper. Спробуйте браузерну Remix IDE (відкривається в новій вкладці), щоб почати писати код.

Більш досвідчені розробники також можуть використовувати Yul, проміжну мову для Віртуальної машини Етеріуму, або Yul+ — розширення для Yul.

Якщо вам цікаво і ви хочете допомогти в тестуванні нових мов, які все ще перебувають на стадії активної розробки, ви можете поекспериментувати з Fe — новою мовою смарт-контрактів, яка наразі перебуває на початковому етапі розвитку.

Передумови

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

Solidity

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

Приклад контракту

Цей приклад має дати вам уявлення про те, як виглядає синтаксис контракту на Solidity. Для більш детального опису функцій та змінних перегляньте документацію (відкривається в новій вкладці).

Vyper

  • Мова програмування, подібна до Python
  • Строга типізація
  • Невеликий та зрозумілий код компілятора
  • Ефективна генерація байт-коду
  • Свідомо має менше функцій, ніж Solidity, з метою зробити контракти більш безпечними та простішими для аудиту. Vyper не підтримує:
    • Модифікатори
    • Спадкування
    • Вбудований асемблер (inline assembly)
    • Перевантаження функцій
    • Перевантаження операторів
    • Рекурсивні виклики
    • Нескінченні цикли
    • Двійкові числа з фіксованою комою

Для отримання додаткової інформації прочитайте обґрунтування Vyper (відкривається в новій вкладці).

Приклад

Цей приклад має дати вам уявлення про те, як виглядає синтаксис контракту на Vyper. Для більш детального опису функцій та змінних перегляньте документацію (відкривається в новій вкладці).

Yul та Yul+

Якщо ви новачок в Етеріумі і ще не писали код мовами смарт-контрактів, ми рекомендуємо почати з Solidity або Vyper. Розглядайте Yul або Yul+ лише тоді, коли ви ознайомитеся з найкращими практиками безпеки смарт-контрактів та специфікою роботи з EVM.

Yul

  • Проміжна мова для Етеріуму.
  • Підтримує EVM та Ewasm (відкривається в новій вкладці) (WebAssembly, адаптований для Етеріуму) і розроблена як зручний спільний знаменник для обох платформ.
  • Хороша ціль для етапів високорівневої оптимізації, яка може принести однакову користь як платформам EVM, так і Ewasm.

Yul+

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

Приклад контракту

Наступний простий приклад реалізує функцію піднесення до степеня. Його можна скомпілювати за допомогою solc --strict-assembly --bin input.yul. Приклад слід зберегти у файлі input.yul.

Якщо ви вже маєте великий досвід роботи зі смарт-контрактами, повну реалізацію ERC-20 на Yul можна знайти тут (відкривається в новій вкладці).

Fe

  • Статично типізована мова для Віртуальної машини Етеріуму (EVM).
  • Натхненна Python та Rust.
  • Має на меті бути простою у вивченні — навіть для розробників, які є новачками в екосистемі Етеріуму.
  • Розробка Fe все ще перебуває на ранніх стадіях, альфа-реліз мови відбувся у січні 2021 року.

Приклад контракту

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

Як обрати

Як і з будь-якою іншою мовою програмування, здебільшого йдеться про вибір правильного інструменту для конкретного завдання, а також про особисті вподобання.

Ось кілька речей, які варто врахувати, якщо ви ще не пробували жодну з цих мов:

Чим чудова Solidity?

  • Якщо ви новачок, існує багато посібників та інструментів для навчання. Дізнайтеся більше про це в розділі Навчання через програмування.
  • Доступні хороші інструменти для розробників.
  • Solidity має велику спільноту розробників, а це означає, що ви, швидше за все, досить швидко знайдете відповіді на свої запитання.

Чим чудова Vyper?

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

Чим чудові Yul та Yul+?

  • Спрощена та функціональна низькорівнева мова.
  • Дозволяє наблизитися до чистої EVM, що може допомогти оптимізувати використання газу у ваших контрактах.

Порівняння мов

Для порівняння базового синтаксису, життєвого циклу контракту, інтерфейсів, операторів, структур даних, функцій, потоку керування та іншого перегляньте цю шпаргалку від Auditless (відкривається в новій вкладці)

Подальше читання