Вступ до Ethereum. Розумні контракти

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

Сфера Ethereum як кристал
Візуалізація абстрактної концепції смарт-контрактів Ethereum

Що таке Ethereum?

Перш за все, Ethereum — це платформа для створення децентралізованих онлайн-сервісів, що працюють на основі технології блокчейн. Тільки в другу чергу це криптовалюта. Головна відмінність між Ethereum та, скажімо, Bitcoin — це смарт-контракти. Вони дозволяють програмувати всередині блокчейну. Це дає можливість інтегрувати в Ethereum більш складні механізми, такі як NFT.

Завдяки смарт-контрактам, ми можемо досліджувати нові способи ведення бізнесу, прозорі фінансові установи, прозоре патентування, прозоре голосування та створення прозорих контрактів. Насправді, сфера застосування смарт-контрактів надзвичайно широка, і нові ідеї продовжують з'являтися щодня.

Смарт-контракти

По суті, контракт — це текстовий файл з кодом, написаним мовою програмування Solidity. Він надає певний API у вигляді функцій і тригерів, які можна використовувати всередині смарт-контракту.

Логіка виконання смарт-контрактів в Ethereum

Виконання контракту в Ethereum відбувається в декілька етапів:

  1. Створення транзакції

    Все починається зі створення і відправлення транзакції користувачем. Ця транзакція містить інструкції для виклику функцій смарт-контракту та може включати дані і ETH для передачі контракту.

  2. Поширення транзакції

    Відправлена транзакція поширюється по мережі вузлів Ethereum. Вона очікує в пулі транзакцій, доки майнер (або валідатор у PoS) не вибере її для включення в новий блок.

  3. Обробка транзакції майнерами

    Майнер вибирає транзакцію з пулу і починає обробку. Це включає перевірку автентичності транзакції (підпис) та достатності коштів для оплати газу.

  4. Виконання контракту

    Після перевірки майнер (або валідатор) виконує код смарт-контракту. Це виконання відбувається в Ethereum Virtual Machine (EVM) — ізольованому середовищі, де кожна операція коштує певну кількість газу.

  5. Зміна стану

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

  6. Підтвердження блоку

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

  7. Оплата газу

    Користувач, який відправив транзакцію, сплачує комісію за газ в ETH. Ця комісія йде майнеру (або валідатору) як винагорода за обробку транзакції та підтримку мережі.

  8. Фіналізація

    Після підтвердження блоку транзакція та всі її результати (включаючи виконання контракту) вважаються остаточними та незворотними.

Хто оплачує обчислення смарт-контракту

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

Що впливає на вартість газу

Вартість газу залежить від кількох факторів:

  1. Обчислювальна складність

    Більш складні операції вимагають більше обчислювальних ресурсів, а отже, є дорожчими.

  2. Завантаженість мережі

    У періоди високого навантаження на мережу ціна газу може зростати, оскільки користувачі конкурують за те, щоб їхні транзакції були швидко включені в блок.

  3. Ліміт газу

    Користувач встановлює максимальну кількість газу, яку він готовий витратити на виконання транзакції. Якщо ліміт занадто низький, транзакція може не виконатися.

Майнери або валідатори (залежно від того, чи використовує мережа proof of work або proof of stake) вибирають транзакції з вищими комісіями за газ, оскільки це збільшує їхній дохід. Ці комісії служать стимулом для підтримки роботи мережі Ethereum.

Який набір функцій доступний у контракті

Смарт-контракти в Ethereum можуть виконувати широкий спектр обчислень, але є певні обмеження та особливості, які слід враховувати:

  1. Тюрінгова повнота

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

  2. Обмежені ресурси

    Кожна операція в контракті коштує певну кількість газу, і кількість газу, яка може бути використана в одній транзакції, обмежена. Це означає, що дуже складні або ресурсоємні обчислення можуть бути непрактичними через високу вартість газу або обмеження блоку.

  3. Детермінізм

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

  4. Відсутність зовнішніх запитів до мережі

    Смарт-контракти не можуть безпосередньо робити запити до зовнішніх серверів або API. Для отримання зовнішніх даних використовуються оракули.

  5. Зберігання даних

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

  6. Математичні та логічні операції

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

  7. Обробка криптографічних функцій

    Ethereum підтримує певні криптографічні функції, такі як хешування та перевірка цифрового підпису.

  8. Обмеження часу виконання

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

Ці обмеження та можливості визначають, які типи застосунків та обчислень можуть бути ефективно реалізовані за допомогою смарт-контрактів у Ethereum.

Доступ до зовнішніх ресурсів з блокчейну, таких як API вебсайту

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

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

Це пов'язано з кількома ключовими особливостями блокчейну та смарт-контрактів:

  1. Детермінізм

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

  2. Безпека та ізоляція

    Включення зовнішніх даних або запитів у блокчейн може створити вектори атак та вразливості в безпеці мережі.

  3. Синхронізація та швидкість

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

Зберігання даних у смарт-контрактах

Смарт-контракти в Ethereum мають можливість зберігати результати обчислень. Ці дані зберігаються в стані блокчейну і можуть бути доступні як всередині самого контракту, так і для інших контрактів або зовнішніх запитів. Ось ключові аспекти зберігання даних у смарт-контрактах:

  1. Змінні стану: Смарт-контракти можуть визначати змінні стану, які зберігаються в блокчейні та можуть бути змінені через функції контракту. Ці змінні можуть зберігати значення, такі як числа, рядки, масиви та більш складні структури даних.

  2. Зміна стану: Коли смарт-контракт виконується в результаті транзакції та змінює свої змінні стану, ці зміни записуються в блокчейн після успішного виконання транзакції.

  3. Довгострокове зберігання: Оскільки дані записуються в блокчейн, вони є довгостроковими та незмінними, тобто вони будуть зберігатися, доки існує мережа Ethereum.

  4. Читання даних: Смарт-контракти можуть включати функції для читання збережених даних. Такі функції можуть бути викликані зовнішніми користувачами або іншими контрактами без відправлення транзакції та без витрат газу.

  5. Обмеження газу та вартість: Зберігання даних у блокчейні Ethereum вимагає газу і, таким чином, може бути дорогим, особливо при зберіганні великих обсягів даних. Це вимагає оптимізації та економного використання зберігання.

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

Таким чином, механізми зберігання та управління даними є ключовими компонентами в дизайні та функціональності смарт-контрактів на Ethereum.

Модифікація смарт-контракту після розгортання в мережі

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

  1. Незмінність коду: Код смарт-контракту та всі його операції записуються в блокчейн Ethereum і стають невід'ємною частиною його історії. Після розгортання код контракту не може бути змінений або видалений.

  2. Безпека та довіра: Ця незмінність є важливою особливістю для забезпечення безпеки та довіри в мережі. Користувачі та сторони, що взаємодіють з контрактом, можуть бути впевнені, що логіка контракту не буде змінена після його розгортання.

  3. Оновлення та модифікації: Якщо необхідно оновити або змінити логіку смарт-контракту, розробники зазвичай розгортають новий контракт і, за потреби, переносять дані зі старого контракту. У деяких випадках розробники включають механізми в контракт для оновлення деяких його аспектів (наприклад, адрес інших контрактів), але основна логіка залишається незмінною.

  4. Самознищення: У Solidity є функція selfdestruct, яка дозволяє "знищити" контракт, звільнивши місце в блокчейні та повернувши залишкові кошти на вказану адресу. Однак після виклику цієї функції контракт стає не функціональним, а його код все ще залишається в блокчейні як історія.

  5. Архітектура проксі-контракту: Щоб створити більш гнучкі системи, які можна оновлювати, розробники іноді використовують архітектуру проксі-контракту, де логіка зберігається в окремому контракті, а проксі-контракт делегує виклики функцій до нього. Це дозволяє оновлювати логіку, лише оновлюючи контракт з логікою, але цей підхід має свої нюанси та ризики.

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

Висновок

Ethereum — це набагато більше, ніж просто криптовалюта. Такі платформи не тільки пропонують нам свободу платіжних транзакцій, але й забезпечують зв'язок між різними бізнесами без потреби в бюрократії. Відсутність бюрократії призводить до швидшого прогресу людства.