Vyper, Solidity та Scrypto: порівняння мов смарт-контрактів

Погляд на три різні мови програмування для блокчейн-мереж і їх порівняння.

Мережа Ethereum принесла смарт-контракти в простір блокчейнів, зробивши такі концепції, як децентралізовані фінанси (DeFi) можливо. 

Розумні контракти можуть автоматично виконувати процеси після виконання певних умов. Разом із цією новою технологією була розроблена нова мова кодування під назвою Solidity.

Оскільки блокчейн-індустрія продовжує розвиватися та з’являються нові блокчейн-мережі, у простір з’являються додаткові мови програмування, зокрема Vyper і Scrypto.

Мови програмування це набір правил, які перетворюють рядки тексту та чисел у машиночитаний код. Простіше кажучи, мови програмування дозволяють комп’ютерам розуміти інструкції, які вводять люди. Коли справа доходить до блокчейн-індустрії, Solidity, Python і Javascript є одними з найбільш часто використовуваних мов, але всі вони працюють по-різному.

Що таке твердість?

Solidity — це об’єктно-орієнтована мова програмування високого рівня для створення смарт-контрактів на блокчейні Ethereum та інших блокчейн-мережах, таких як BNB Smart Chain і Avalanche. Мова була розроблена в 2014 році і має схожість з такими мовами програмування, як JavaScript, C++ і Python.

Оскільки Solidity є мовою високого рівня, комп’ютерний код набирається легко зрозумілим і зрозумілим для людини способом замість одиниць і нулів. Наприклад, код Solidity включатиме такі слова та фрази, як «функція» та «контракт», а також фігурні дужки та цифри.

Будучи об’єктно-орієнтованою мовою кодування, Solidity обертається навколо використання «об’єктів», які є фрагментами коду, які можна повторно використовувати для створення подібних фрагментів коду, не переписуючи щоразу вихідний код.

Solidity також використовує компілятор для перетворення зрозумілого людині коду високого рівня в машиночитаний код, який виконується на віртуальній машині Ethereum (EVM).

Що таке Vyper?

Vyper — це орієнтована на контракти пітонічна мова програмування для смарт-контрактів, призначена для використання з EVM. Мова була розроблена для покращення Solidity шляхом покращення безпеки та читабельності коду. Vyper приділяє значну увагу чутності свого коду. Через це одним із його принципів є те, що люди повинні мати можливість читати якомога більше коду Vyper. 

Vyper також прагне максимально ускладнити написання коду, який вводить в оману. Простота для читача (тобто аудитора) важливіша, ніж простота для автора (тобто розробника). Таким чином буде легше ідентифікувати шкідливий код у смарт-контракті або децентралізованому додатку (DApp).

Що таке Scrypto?

Scrypto — це мова розумних контрактів, орієнтована на активи. Мова розроблена Radix, базується на Rust і зберігає більшість функцій Rust, додаючи спеціальні функції та синтаксис для Radix Engine v2. Оскільки Scrypto орієнтований на активи, він може взаємодіяти з такими активами, як токени, які є типом ресурсу в мові. 

У таких мовах кодування, як Solidity, токени ERC-20 існують як розумні контракти на EVM. Активи в Scrypto — це ресурси, які існують у контейнерах і сховищах. Простіше кажучи, це як мати відро (контейнер) і наповнити його монетами (актив), які можна зберігати в скарбничці (сховище).

Останні: Попит на таланти в криптовалюті менше залежить від ринку в міру розвитку галузі

Scrypto також зосереджується на зручності для розробників, дозволяючи їм писати лише необхідний код під час взаємодії з контейнерами та ресурсами, щоб увімкнути функціональність у DApp. Безпека — ще один принцип, коли розробники можуть давати конкретні інструкції DApp замість того, щоб надавати загальні дозволи.

Порівняння мов розумних контрактів

Solidity має широкий спектр навчальних онлайн-ресурсів і велику підтримку спільноти завдяки використанню в основних блокчейн-мережах, таких як Ethereum. Solidity також має широкий набір функцій, взятих з об’єктно-орієнтованого програмування (ООП), що робить його модульним і легшим для усунення несправностей у разі виникнення проблеми. Наприклад, якщо об’єкт з певного класу вийшов з ладу, це можна було б відстежити до походження класу. 

Це працює, оскільки Solidity використовує інкапсуляцію, що означає, що кожен об’єкт є самодостатнім, кожна функція працює незалежно. Модульність мови кодування також дозволяє розробникам працювати над декількома об’єктами одночасно, що робить більш ефективним створення, виправлення та розгортання смарт-контрактів.

Vyper є більш простою мовою кодування, ніж Solidity, що підкреслює прозорість, простоту мовної структури та чутність. Vyper також має менше функцій, ніж Solidity, що було зроблено навмисно з міркувань безпеки. Обмежений набір функцій зменшує кількість вразливостей, якими можуть скористатися зловмисники.

Наприклад, Solidity використовує модифікатори, які вказують, що перевірки були здійснені до і після виконання процесу. Однак Vyper не використовує модифікаторів, оскільки розробники вважають, що це полегшує написання коду, який вводить в оману. Це також заохочує людей розробляти код, який відбивається по всьому файлу, зменшуючи чутність. Оскільки модифікатори відсутні у Vyper, неможливо додати будь-які зміни стану до коду.

Ще одна функція, яка виключена з Vyper, - це спадковість. У Solidity кілька контрактів можуть успадковувати функції батьківського контракту. Якщо є розбіжності, це також вимагає, щоб люди розуміли норми пріоритету. Vyper не використовує успадкування класів, оскільки воно усуває потенційне джерело складності в коді, що сприяє покращенню чутності. Загалом, Vyper — це більш мінімалістична мова кодування, яка замінює деякі функціональні можливості на підвищення безпеки та кращу перевірку кодової бази для кращого захисту користувачів смарт-контрактів на основі Vyper.

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

Адам Сіммонс, директор зі стратегії в RDX Works — розробники Radix — сказав Cointelegraph: «Наявність правильних інструментів для роботи має велике значення — і зараз розробники блокчейнів не мають правильних інструментів. Йдеться не лише про те, щоб зробити мови простішими, але й про те, щоб зробити інструменти розробника інтуїтивно зрозумілими та безпечними», – продовжує:

«На піку свого розвитку DeFi зріс до понад 200 мільярдів доларів TVL лише за два роки — тому очевидно, що існує дуже високий рівень попиту. Проте, незважаючи на це 200-кратне зростання капіталу, кількість розробників зросла лише вдвічі, загалом до 2 19,000 (з приблизно 30 мільйонів розробників у всьому світі)».

Незважаючи на високий рівень зростання децентралізованого фінансового простору, кількість розробників не зросла відповідно до попиту. Сіммонс вважає, що розробникам, можливо, здалося, що Solidity занадто складна для них перехід до розробки блокчейнів:

«Розробники не вагаються, чи варто повністю використовувати Web3 через крутий процес навчання Solidity та високий рівень ризику щодо безпеки. Незважаючи на талановитих розробників і мільйони доларів, витрачених на перевірку безпеки, DeFi все ще витрачає гроші на хакерські атаки та експлойти. Одного цього достатньо, щоб утримати розробників від входу в простір».

«Наявність правильних мов та інструментів дозволить розробникам розвивати всю галузь набагато швидше. Подібно до того, як ігрові механізми дали розробникам інструменти для революції у виробництві відеоігор у 90-х, правильні мови та інструменти Web3 дозволять розробникам прискорити розвиток Web3», – додав Сіммонс.

Scrypto також зосереджується на безпеці, простоті та зручності для користувача. Скрипто-транзакції зосереджені на активах. Вони визначають, як користувач бажає розподіляти системні ресурси. Вони також можуть вказувати, як повернуті ресурси повинні оброблятися користувачем або іншим компонентом у багатокомпонентній транзакції.

Транзакції в Ethereum зазвичай є викликом смарт-контракту (оскільки DApps і токени в Ethereum є смарт-контрактами). Навпаки, транзакції на Scrypto включають переміщення активів з одного компонента в інший.

Наприклад, якщо користувач A хоче надіслати 10 власних токенів користувачеві B, його транзакція покаже, що він намагається вилучити 10 токенів із сховища, яке їх містить. Транзакція також покаже, що вони надішлють ці токени на метод депозиту компонента облікового запису користувача B. Оскільки ресурси (у цьому випадку токени) мають бути десь розташовані, для передачі токенів від користувача A до користувача B буде використано відро (контейнер).

У наведеному вище прикладі користувач передає відро, що містить ресурси (токени), у метод депозиту другого користувача замість виклику смарт-контракту токенів. Взаємодія з DApps працює аналогічно: користувачі знімають токени зі своїх облікових записів і передають їх відповідному компоненту, з яким вони хочуть взаємодіяти. Таким чином, Scrypto використовує підхід на основі активів, коли користувачі зберігають і передають фактичні активи. Підхід на основі активів також полегшує розробникам кодування DApps, оскільки легше взаємодіяти з токенами (ресурсами), пулами токенів (сховищами) і користувачами (компонентами).

Для іншого прикладу, якби DApp для обміну (наприклад, Uniswap) кодувався за допомогою Scrypto, розробникам потрібно було б лише закодувати метод торгівлі для обміну. Спочатку DEX потрібно буде ідентифікувати вхідний контейнер користувача з токеном A, а потім обчислити обмінний курс. Далі вхідні токени будуть депоновані, а DEX надішле правильну кількість токена B назад користувачеві.

Яку мову програмування вибрати розробникам блокчейну?

Розробники можуть використовувати традиційні мови програмування (C++, Python, JavaScript) для розробки блокчейнів, а також спеціально створені рішення, такі як Solidity, Vyper і Scrypto. Кілька мов програмування можуть бути корисними для простору блокчейну, оскільки вони дають розробникам ряд інструментів для роботи. 

Наприклад, розробники, які знайомі з C++, JavaScript і Python, можуть вважати Solidity привабливим. Розробники, які знайомі з Python, можуть тяжіти до Vyper, тоді як розробники, знайомі з Rust, можуть вибрати мову Scrypto.

Останні: Соціальні токени стануть рушієм Web3, від фан-баз до стимулювання

Сіммонс погоджується, кажучи Cointelegraph: «З появою більшої кількості мов у Web3 ми, ймовірно, побачимо період часу, коли буде досить багато конкуруючих підходів. Оскільки ці мови підходять розробникам для ринку продуктів і, що найважливіше, дозволяють розробникам створювати потужні, корисні та безпечні DApps, ми, ймовірно, побачимо, що галузь тяжітиме до тих, які забезпечують найкращі результати».

Solidity, природно, буде вибором для розробників, які хочуть працювати в Ethereum та подібних блокчейн-мережах. У той же час Vyper і Scrypto могли б залучити розробників, які віддають перевагу простоті та додатковому захисту. Scrypto також може бути кращим для розробників через його підвищену простоту та підхід, орієнтований на активи.

Джерело: https://cointelegraph.com/news/vyper-solidity-and-scrypto-how-the-smart-contract-languages-compare