Вступ до смарт-контрактів
Що таке смарт-контракт?
«Смарт-контракт» — це просто програма, яка працює в блокчейні Етеріум. Це набір коду (його функції) та даних (його стан), що знаходиться за певною адресою в блокчейні Етеріум.
Смарт-контракти — це тип акаунта Етеріум. Це означає, що вони мають баланс і можуть бути ціллю транзакцій. Однак вони не контролюються користувачем, натомість вони розгортаються в мережі та працюють так, як запрограмовано. Акаунти користувачів можуть взаємодіяти зі смарт-контрактом, надсилаючи транзакції, які виконують функцію, визначену в смарт-контракті. Смарт-контракти можуть визначати правила, як звичайний контракт, і автоматично забезпечувати їх виконання за допомогою коду. За замовчуванням смарт-контракти не можна видалити, а взаємодія з ними є незворотною.
Передумови
Якщо ви тільки починаєте або шукаєте менш технічний вступ, ми рекомендуємо наш вступ до смарт-контрактів.
Переконайтеся, що ви прочитали про акаунти, транзакції та віртуальну машину Етеріум, перш ніж зануритися у світ смарт-контрактів.
Цифровий торговельний автомат
Мабуть, найкращою метафорою для смарт-контракту є торговельний автомат, як описав Нік Сабо (opens in a new tab). За умови правильних вхідних даних гарантується певний результат.
Щоб отримати снек з торговельного автомата:
гроші + вибір снека = видача снека
Ця логіка запрограмована в торговельному автоматі.
Смарт-контракт, як і торговельний автомат, має запрограмовану в ньому логіку. Ось простий приклад того, як виглядав би цей торговельний автомат, якби він був смарт-контрактом, написаним на Solidity:
pragma solidity 0.8.7;
contract VendingMachine {
// Оголосити змінні стану контракту
address public owner;
mapping (address => uint) public cupcakeBalances;
// Коли контракт 'VendingMachine' розгорнуто:
// 1. встановити адресу, що розгортає, власником контракту
// 2. встановити баланс кексів розгорнутого смарт-контракту на 100
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// Дозволити власнику збільшувати баланс кексів смарт-контракту
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// Дозволити будь-кому купувати кекси
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
Подібно до того, як торговельний автомат усуває потребу в продавці, смарт-контракти можуть замінити посередників у багатьох галузях.
Бездозвільний
Будь-хто може написати смарт-контракт і розгорнути його в мережі. Вам просто потрібно навчитися програмувати мовою смарт-контрактів і мати достатньо ETH для розгортання вашого контракту. Розгортання смарт-контракту технічно є транзакцією, тому вам потрібно платити за газ так само, як ви платите за газ для простого переказу ETH. Однак витрати газу на розгортання контракту набагато вищі.
Етеріум має зручні для розробників мови для написання смарт-контрактів:
- Solidity
- Vyper
Однак їх потрібно скомпілювати перед тим, як їх можна буде розгорнути, щоб віртуальна машина Етеріум могла інтерпретувати та зберігати контракт. Детальніше про компіляцію
Компонованість
Смарт-контракти є загальнодоступними в Етеріум, і їх можна розглядати як відкриті API. Це означає, що ви можете викликати інші смарт-контракти у своєму власному смарт-контракті, щоб значно розширити можливості. Контракти можуть навіть розгортати інші контракти.
Дізнайтеся більше про компонованість смарт-контрактів.
Обмеження
Самі по собі смарт-контракти не можуть отримувати інформацію про події «реального світу», оскільки вони не можуть отримувати дані з позамережевих джерел. Це означає, що вони не можуть реагувати на події в реальному світі. Так задумано. Покладання на зовнішню інформацію може поставити під загрозу консенсус, що є важливим для безпеки та децентралізації.
Однак для блокчейн-застосунків важливо мати можливість використовувати позамережеві дані. Рішенням є оракули — інструменти, які збирають позамережеві дані та роблять їх доступними для смарт-контрактів.
Ще одним обмеженням смарт-контрактів є максимальний розмір контракту. Смарт-контракт може мати розмір максимум 24 КБ, інакше йому не вистачить газу. Це можна обійти за допомогою патерну Diamond (opens in a new tab).
Контракти з мультипідписом
Контракти з мультипідписом (multisig) — це акаунти смарт-контрактів, які вимагають кількох дійсних підписів для виконання транзакції. Це дуже корисно для уникнення єдиної точки відмови для контрактів, що зберігають значні суми етеру або інших токенів. Мультипідписи також розподіляють відповідальність за виконання контракту та управління ключами між кількома сторонами та запобігають тому, щоб втрата одного приватного ключа призвела до незворотної втрати коштів. З цих причин контракти з мультипідписом можна використовувати для простого управління DAO. Для виконання мультипідписів потрібно N підписів з M можливих прийнятних підписів (де N ≤ M, і M > 1). Зазвичай використовуються N = 3, M = 5 та N = 4, M = 7. Мультипідпис 4/7 вимагає чотирьох із семи можливих дійсних підписів. Це означає, що кошти все ще можна повернути, навіть якщо три підписи втрачено. У цьому випадку це також означає, що більшість власників ключів повинні погодитися та поставити підпис, щоб контракт був виконаний.
Ресурси про смарт-контракти
Контракти ОупенЗеппелін — Бібліотека для безпечної розробки смарт-контрактів.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Форум спільноти (opens in a new tab)
Додаткова література
- Coinbase: Що таке смарт-контракт? (opens in a new tab)
- Чейнлінк: Що таке смарт-контракт? (opens in a new tab)
- Відео: Просте пояснення — Смарт-контракти (opens in a new tab)
- Cyfrin Updraft: Платформа для навчання та аудиту Web3 (opens in a new tab)
Посібники: Підписи смарт-контрактів (EIP-1271) в Етеріум
- EIP-1271: Підписання та перевірка підписів смарт-контрактів – Як EIP-1271 дозволяє смарт-контрактам перевіряти підписи, з покроковим оглядом реалізації Safe.
Останнє оновлення сторінки: 25 лютого 2026 р.