Коротко про розумні контракти
Останні оновлення сторінки: 25 лютого 2026 р.
Що таке смарт-контракт?
Смарт контракт - це звичайна програма, яка працює на блокчейні Ethereum. Це набір коду (його функції) та даних (його стан) який розміщується на певній адресі блокчейну Ethereum.
Смарт-контракти — це тип облікового запису Ethereum. Це означає, що вони мають баланс і можуть бути метою (призначенням) транзакцій. Однак, вони не контролюються користувачем, замість цього, вони розгортаються в мережу та працюють за своєю програмою. Облікові записи користувачів можуть взаємодіяти зі смарт контрактами шляхом відправленням транзакцій які виконують визначену смарт контрактом функцію. Смарт контракти можуть визначати правила, такі як регулярні контракти, та автоматично примушують виконання через код. Смарт-контракти неможливо видалити за замовчуванням, а взаємодії з ними є незворотними.
Передумови
Якщо ви щойно почали або шукаєте менш технічний вступ, ми рекомендуємо наш вступ до смарт-контрактів.
Перш ніж занурюватися у світ смарт-контрактів, переконайтеся, що ви ознайомилися з обліковими записами, транзакціями та віртуальною машиною Ethereum.
Цифровий торговий автомат
Мабуть, найкраща метафора для смарт-контракту — це торговий автомат, як це описав Нік Сабо (opens in a new tab). З правильним введенням даних гарантується певний результат.
Щоб отримати перекус з торгового автомата:
1money + snack selection = snack dispensedЦя логіка запрограмована в торговий автомат.
Як і торговий автомат, смарт контракт обмежений запрограмованою логікою. Ось простий приклад того, як виглядав би цей торговий автомат, якби це був розумний контракт, написаний на Solidity:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Оголошення змінних стану контракту6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Коли контракт VendingMachine розгортається:10 // 1. встановити адресу розгортання як власника контракту11 // 2. встановити баланс кексів розгорнутого смарт-контракту на 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Дозволити власнику збільшувати баланс кексів смарт-контракту18 function refill(uint amount) public {19 require(msg.sender == owner, "Лише власник може поповнити.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Дозволити будь-кому купувати кекси24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "Ви повинні заплатити щонайменше 1 ETH за кекс");26 require(cupcakeBalances[address(this)] >= amount, "Недостатньо кексів на складі для здійснення цієї покупки");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Показати всеЯк торговий автомат знімає потребу в продавці, так і смарт контракти можуть замінити посередників в багатьох галузях.
Бездозвільний
Будь-хто може написати смарт контракт та розгорнути його в мережі. Вам просто потрібно навчитися програмувати мовою смарт-контрактів і мати достатньо ETH для розгортання вашого контракту. Розгортання смарт-контракту технічно є транзакцією, тому вам потрібно сплатити за газ так само, як ви сплачуєте за газ для простого переказу ETH. Однак витрати на газ для розгортання контракту набагато вищі.
Ethereum має зручну для розробників мову для написання смарт контрактів:
- Мова програмування Solidity
- Vyper
Однак, вони повинні бути скомпільовані перед тим, як вони можуть бути розгорнутими, щоб віртуальна машина Ethereum могла інтерпретувати та зберігати контракт. Докладніше про компіляцію
Компонованість
Смарт контракти є публічними в Ethereum та можуть сприйматись як відкриті API. Це означає, що ви можете викликати інші розумні контракти у вашому власному розумному контракті, щоб значно розширити можливості. Контракти навіть можуть розгортати інші контракти.
Дізнайтеся більше про компонованість смарт-контрактів.
Обмеження
Самі по собі смарт-контракти не можуть отримувати інформацію про події з «реального світу», оскільки вони не можуть отримувати дані з джерел поза ланцюгом. Це означає, що вони не можуть реагувати на події в реальному світі. Все за зразком. Опораючись на зовнішню інформацію, можна поставити під загрозу консенсус, що є важливим для безпеки та децентралізації.
Проте для блокчейн-застосунків важливо мати можливість використовувати дані поза ланцюгом. Рішенням є оракули — інструменти, які отримують дані поза ланцюгом і роблять їх доступними для смарт-контрактів.
Іншим обмеженням smart-contract є максимальний розмір договору. Розмір smart-contract може становити максимум 24 Kb, в іншому випадку він закінчиться. Це обмеження можна обійти за допомогою The Diamond Pattern (opens in a new tab).
Контракти з мультипідписом
Контракти з кількома підписами (multiple-signature) — це облікові записи смарт-контрактів, які потребують кількох дійсних підписів для виконання транзакції. Це дуже корисно для уникнення окремих точок збою для контрактів, що містять значну кількість ефіру або інших токенів. Multisigs також розподіляють відповідальність за виконання контракту та керування ключами між кількома сторонами та запобігають втраті одного приватного ключа, що призводить до безповоротної втрати коштів. З цих причин мультипідписні контракти можна використовувати для простого управління DAO. Мультипідписи вимагають N підписів з M можливих прийнятних підписів (де N ≤ M, і M > 1) для виконання. N = 3, M = 5 і N = 4, M = 7 є загальновживаними. Мультипідпис 4/7 вимагає чотирьох із семи можливих дійсних підписів. Це означає, що кошти все ще можна повернути, навіть якщо втрачено три підписи. У цьому випадку це також означає, що більшість власників ключів повинні погодитися та підписати, щоб контракт був виконаний.
Ресурси щодо смарт-контрактів
OpenZeppelin Contracts – бібліотека для безпечної розробки смарт-контрактів.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Форум спільноти (opens in a new tab)