Що таке смарт-контракт?
Що таке смарт-контракт? Дізнайтеся, як працюють самовиконувані програми в блокчейні, що на них працює, які в них обмеження та ризики і як перевірити контракт перед використанням.
Смарт-контракт — це програма, що зберігається в блокчейні та автоматично виконується, коли виконано заздалегідь визначені умови. Вона може зберігати й переміщувати кошти відповідно до свого коду, і жоден банк, брокер чи інший посередник не вирішує, чи виконувати кожен крок.
Смарт-контракти лежать в основі майже всього в криптосвіті, що виходить за межі простих платежів: токенів, децентралізованих бірж, кредитних протоколів, NFT і DAO. Розуміння того, що вони можуть і чого не можуть, допомагає оцінити як можливості, так і ризики їх використання.
Як працюють смарт-контракти
Ідею договорів, виконання яких забезпечує код, описав у 1990-х роках науковець у галузі інформатики Nick Szabo, порівнявши її з торговельним автоматом: кидаєте потрібні монети, обираєте товар — і автомат видає його без продавця.
У блокчейні процес виглядає так:
- 1Розробник пише код, наприклад мовою Solidity для Ethereum або мовою Rust для деяких інших мереж.
- 2Код розгортається за допомогою транзакції та отримує власну адресу.
- 3Користувачі викликають контракт, надсилаючи транзакції на цю адресу, часто з доданими токенами.
- 4Кожен вузол виконує код і погоджується щодо результату, тож підсумок однаковий для всіх.
- 5Стан контракту оновлюється — баланси, записи про власність чи налаштування змінюються ончейн.
Кожен крок потребує мережевої комісії. В Ethereum ця комісія називається gas; про те, як вона працює, читайте у статті що таке gas в Ethereum.
Для чого використовують смарт-контракти
| Застосування | Що робить контракт | Приклад |
|---|---|---|
| Токени | Відстежує баланси та перекази | Контракт токена ERC-20 |
| Децентралізовані біржі | Зберігає пули токенів і визначає ціни угод за формулою | Автоматичний маркетмейкер (AMM) |
| Кредитування | Приймає заставу, видає позики, ліквідує ризиковані позиції | Грошовий ринок DeFi |
| NFT | Фіксує право власності на унікальні об’єкти | NFT-контракт колекції |
| DAO | Підраховує голоси й виконує схвалені пропозиції | Контракт ончейн-управління |
| Мультипідписні гаманці | Вимагає кількох підтверджень для переказу коштів | Скарбниця проєкту |
Багато з цих контрактів викликають один одного, тому DeFi іноді називають «грошовим лего». Наш посібник із DeFi показує, як ці частини поєднуються між собою.
Смарт-контракти та традиційні договори
Корисно порівняти смарт-контракти з паперовими договорами, знайомими більшості людей.
| Традиційний договір | Смарт-контракт | |
|---|---|---|
| Чим написаний | Людською мовою | Програмним кодом |
| Хто забезпечує виконання | Суди, інституції, добра воля сторін | Блокчейн-мережа, що виконує код |
| Гнучкість | Можна переузгодити або витлумачити | Виконується саме так, як написаний, якщо не передбачено оновлення |
| Прозорість | Зазвичай конфіденційний | Код і активність часто публічні в блокчейні |
| Розв’язання спорів | Судді, арбітри, юристи | Немає вбудованого способу розв’язувати спори, окрім самого коду |
| Швидкість | Від кількох днів до місяців на розрахунки | Від секунд до хвилин залежно від мережі |
Сильні сторони — швидкість, прозорість і відсутність посередників. Слабка сторона — негнучкість: код не здатен зважати на справедливість чи контекст. Якщо стається щось несподіване, чого розробники не передбачили, контракт просто дотримується своїх правил — навіть коли результат явно не той, якого хтось хотів. Докладніше про це ми розповідаємо у статті Що таке тестнет і мейннет?
Хто пише та контролює смарт-контракти
Розгорнути смарт-контракт може будь-хто; у публічних блокчейнах немає процедури схвалення. Така відкритість дає змогу швидко впроваджувати інновації, але також означає, що шахрайські контракти розгорнути так само легко, як і легітимні. Після розгортання контроль залежить від того, як написано контракт: деякі взагалі не мають власника, іншими керує один гаманець, ще іншими — мультипідпис або голосування DAO з часовою затримкою. Знати, яка модель застосовується, — ключова частина оцінки ризику будь-якого застосунку. Читайте також: Атаки на смарт-контракти.
Чого не можуть смарт-контракти
Смарт-контракти потужні, але їхні можливості вузькі.
- Вони знають лише ончейн-дані. Щоб використовувати інформацію з реального світу, як-от ціни чи спортивні результати, вони покладаються на оракули, які передають зовнішні дані в блокчейн і можуть давати збої або зазнавати маніпуляцій.
- Вони не розуміють намірів. Якщо ви надішлете кошти не в ту функцію або підпишете шкідливий дозвіл, контракт зробить те, що передбачає код.
- Вони не є юридичними договорами автоматично. Виконання коду та юридична сила — окремі питання.
- Вони не можуть виправити помилки. Завершена транзакція, як правило, залишається завершеною.
Ризики використання смарт-контрактів
Помилки та експлойти
Код пишуть люди, а люди помиляються. Зловмисники шукають вразливості й можуть вивести кошти однією транзакцією. Аудити допомагають, але не гарантують безпеки — див. статтю як оцінити звіт про аудит смарт-контракту.
Ключі адміністратора та оновлення
Багато контрактів можна оновлювати, або вони мають функції власника, що дають змогу призупинити торгівлю, змінити комісії чи випустити нові токени. Це може захистити користувачів у надзвичайній ситуації, але також створює можливість зловживань або крадіжки ключа адміністратора. Читайте також: Абстракція акаунтів: пояснення.
Шкідливі контракти
Шахрайські токени можуть містити приховані правила, наприклад заборону продажу чи величезні комісії за переказ. Контракт може виглядати звичайно на сторінці токена, а на практиці поводитися зовсім інакше. Див. також: ICO vs IEO vs IDO.
Дозволи
Використання DeFi часто вимагає дозволити контракту витрачати ваші токени. Необмежені дозволи для контракту з помилкою або шкідливого контракту згодом можуть бути використані, щоб забрати ці токени. Якщо хочете дізнатися більше, прочитайте Що таке мемпул?
Як перевірити смарт-контракт перед використанням
- 1Звірте адресу на офіційному сайті проєкту та в незалежному джерелі.
- 2Знайдіть його в оглядачі блоків, щоб побачити дату створення, активність і те, чи верифіковано вихідний код.
- 3Перевірте наявність аудитів від відомих компаній і з’ясуйте, чи виправлено виявлені проблеми.
- 4З’ясуйте, хто контролює функції адміністратора — мультипідпис, таймлок чи один гаманець.
- 5Починайте з малого й обмежуйте дозволи на токени потрібною сумою.
У нашому посібнику про те, як перевірити офіційну адресу контракту токена, докладно розібрано перші два кроки.
Підсумок
Смарт-контракт — це самовиконуваний код у блокчейні, який може зберігати й переміщувати цінності без посередника. Це робить можливими відкриті програмовані фінанси, але також означає, що помилки, приховані права адміністратора та шкідливий код діють миттєво й незворотно. Перевіряйте адресу, з’ясуйте, хто контролює контракт, і схвалюйте лише те, що вам справді потрібно.
Поширені запитання
Чи мають смарт-контракти юридичну силу?
Не автоматично. Смарт-контракт — це програма, що виконується в блокчейні, а не юридична угода сама по собі. Деякі правові системи можуть визнавати угоди, зафіксовані або виконані за допомогою коду, але це залежить від країни та обставин. Якщо юридична сила важлива, ознайомтеся з місцевим законодавством або зверніться до кваліфікованого фахівця.
Чи можна змінити смарт-контракт після розгортання?
Сам розгорнутий код зазвичай змінити не можна. Проте багато проєктів використовують оновлювані архітектури, як-от проксі-контракти, що дають змогу адміністраторові спрямувати користувачів на новий код. Така гнучкість допомагає виправляти помилки, але також означає, що хтось має владу змінювати правила. Перевірте, хто контролює ключі оновлення чи адміністратора.
Які блокчейни підтримують смарт-контракти?
Ethereum зробив популярними смарт-контракти загального призначення, і їх підтримують багато інших мереж, зокрема BNB Chain, Solana, Avalanche, Cardano та мережі другого рівня Ethereum. Bitcoin свідомо підтримує лише обмежені скрипти. Кожна платформа має власні мови та інструменти, тож контракти не можна автоматично перенести з однієї на іншу.
Що станеться, якщо в смарт-контракті є помилка?
Код виконується саме так, як написаний, разом із помилкою. Зловмисники можуть скористатися нею, щоб вивести кошти, а транзакції зазвичай не можна скасувати. Деякі проєкти можуть призупинити або оновити контракти, щоб обмежити збитки, а незмінні контракти виправити взагалі неможливо. Аудити та програми bug bounty зменшують цей ризик, але не усувають його.
