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

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

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

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

  • Solidity
  • Vyper

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

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

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

Передумови

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

Solidity

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

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

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

Vyper

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

Для отримання додаткової інформації прочитайте обґрунтування 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)

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