Що таке розумний контракт і чому його правила не можуть бути змінені заднім числом?

Disclaimer: This article is for educational purposes only. It is not financial, legal, or investment advice.

A smart contract is often described as a “digital agreement.” That is a useful analogy, but it is not the full picture. More precisely, a smart contract is a program deployed on a blockchain that stores data and executes predefined instructions.

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

Від самого початку важливі два обмеження:

  • Слово «Smart» не означає, що програма здатна мислити або оцінювати наміри.
  • Слово «контракт» не надає коду юридичного статусу договору автоматично.

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

Основні висновки

  • Смартконтракт — це код і дані, що зберігаються за адресою в блокчейні.
  • Мережа виконує його функції відповідно до заздалегідь визначених правил.
  • Підтверджену операцію не можна просто відредагувати постфактум.
  • Деякі контракти мають регульовані параметри або оновлювану логіку.
  • Користувачам слід перевіряти не лише адресу контракту, а і його ролі, дозволи та механізм оновлення.

Просте пояснення смартконтрактів

Уявімо автоматизовану камеру схову.

  1. Його правило каже: «Отримувач може відкрити камеру схову лише після зазначеної дати».
  2. Відправник вносить актив.
  3. Отримувач намагається відкрити її завчасно, і автомат відмовляє.
  4. Після настання цієї дати той самий запит виконається успішно, якщо всі інші умови дотримано.

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

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

Код, стан і транзакції

Смартконтракт має три важливі виміри:

  • Code: its available functions and checks.
  • State: its current data, such as balances, statuses, and configuration values.
  • Transaction history: the sequence of operations that changed that state.

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

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

Що насправді означає «неможливо змінити заднім числом»

Припустімо, контракт фіксує переказ 100 токенів з адреси A на адресу B. Після підтвердження адміністратор не може відкрити цей блок і замінити 100 на 10 так, ніби початкової операції не було. Так само він не може непомітно замінити отримувача у вже підтвердженій транзакції.

If the code includes a refund, reversal, or compensation function, using it creates a new transaction. The blockchain will show the original action and the later response.

Саме тому ончейн-історія дає змогу проводити незалежну перевірку: різні спостерігачі можуть опитувати мережу й бачити ту саму послідовність подій.

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

Чи означає це, що контракт ніколи не може змінитися?

Не завжди. Саме тут вислів «незмінний контракт» часто розуміють неправильно.

1. Контракт без можливості оновлення

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

2. Контракт із параметрами, які можна змінювати

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

Це не переписує минуле, але може змінити правила майбутніх операцій.

3. Архітектура з можливістю оновлення

Поширена архітектура використовує proxy-контракт. Адреса proxy залишається незмінною, а виклики передаються окремому контракту реалізації. Якщо система управління може змінити цю реалізацію, майбутня поведінка за адресою proxy також може змінитися.

Це означає, що «адреса не змінилася» не обов’язково означає «логіка ніколи не змінювалася». Ретельна перевірка ставить такі запитання:

  • Чи є адреса proxy?
  • Хто може оновити implementation?
  • Чи достатньо одного підпису, чи потрібно кілька?
  • Чи передбачено часову затримку?
  • Чи можна призупинити операції?
  • Які параметри можуть змінювати адміністратори?

Приклад: зміна ліміту

Уявімо контракт із добовим лімітом 1,000 одиниць.

  • У понеділок користувач виконує операцію на 800 одиниць.
  • У вівторок уповноважена адреса змінює ліміт на 500 за допомогою нової транзакції.
  • Операція понеділка не зникає й не перетворюється на інший запис.
  • Починаючи з вівторка контракт застосовує ліміт у 500 одиниць, якщо це визначено його логікою.

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

Що доводить блокчейн — і чого він не доводить

Публічний блокчейн допомагає перевірити:

  • адреси учасників;
  • час і статус транзакції;
  • переказані активи та суми;
  • викликана функція, якщо дані правильно декодовано;
  • події та послідовність операцій;
  • вихідний код, якщо його верифіковано за розгорнутим байткодом.

Deployment on a blockchain does ні by itself guarantee:

  • відсутність помилок або вразливостей;
  • доброчесні розробники;
  • економічна стійкість;
  • точні зовнішні дані;
  • відсутність повноважень адміністратора;
  • правовий захист;
  • відновлення після неправильного переказу.

Прозорість означає, що докази можна перевірити. Вона не означає, що все видиме є безпечним.

Практичний контрольний список перед взаємодією

  1. Verify the address. Obtain it from an official project source and compare it carefully.
  2. Verify the network. The same address format may exist across several EVM networks.
  3. Check source verification. Published source code makes analysis easier, but it is not a security audit.
  4. Look for proxies and upgrades. Identify the implementation and the upgrade authority.
  5. Review administrator powers. Look for owner, admin, pause, upgrade, fee, and access-control functions.
  6. Review token approvals. Before approving, confirm the token, spender, and allowance.
  7. Start small. For a first interaction, consider a small test amount while accounting for fees.

Чому підпис користувача важливий

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

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

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

Висновок

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

A confirmed operation cannot be quietly edited after the fact. However, future parameters or logic may be changeable if the architecture was designed that way. The most useful question is therefore not only “Is there a smart contract?” but also: “What does its code allow, and who can influence how it works in the future?”


Джерела та додаткові матеріали