Skip to content
Бета
Research · Обучение криптовалютам

Что такое смарт-контракт?

Ethereum и смарт-контракты · 7 октября 2026 · 1 мин чтения · By admin

Смарт-контракт — это программа, которая хранится в блокчейне по собственному адресу и выполняется строго так, как написана, каждый раз, когда кто-либо отправляет ей транзакцию. Разбираем, откуда взялось это понятие, как он работает и почему не может исправить собственные ошибки.

What Is a Smart Contract? — OTCN Research cover

Смарт-контракт — это программа, которая хранится в блокчейне по собственному адресу и выполняется строго так, как написана, каждый раз, когда кто-либо отправляет ей транзакцию. Поскольку каждый узел выполняет один и тот же код и записывает результат, ни одна сторона не может изменить итог. Смарт-контракты лежат в основе токенов, децентрализованных бирж и кредитных рынков, но они не могут исправить собственные ошибки.

Откуда взялась эта идея

Термин «смарт-контракт» ввёл в 1990-х годах компьютерный учёный Ник Сабо для обозначения соглашений, которые обеспечиваются кодом, а не судами. Идея стала практичной, когда в июле 2015 года запустился Ethereum со средой программирования, встроенной в сам блокчейн. Сегодня большинство смарт-контрактов работает в Ethereum и в сетях, которые скопировали её подход.

Торговый автомат и то, где аналогия перестаёт работать

Любимой иллюстрацией самого Сабо был торговый автомат. Вы опускаете нужную сумму, выбираете товар, и автомат его выдаёт; продавцу не нужно подтверждать продажу, а правила заложены в сам автомат. Смарт-контракт работает так же: отправьте нужную транзакцию, выполните условия, прописанные в коде, и результат наступает автоматически.

Аналогия перестаёт работать в двух местах. Владелец торгового автомата может открыть его, починить или забрать; многие смарт-контракты после развёртывания никто не может изменить. А в торговом автомате лежат несколько долларов снеков, тогда как в одном смарт-контракте могут храниться миллиарды долларов чужих денег, поэтому любая ошибка в его правилах становится гораздо серьёзнее.

Как работает смарт-контракт

  1. Разработчик пишет код, обычно на языке вроде Solidity, и компилирует его для Ethereum Virtual Machine (EVM).
  2. Код развёртывается в транзакции. Он получает собственный адрес, как кошелёк, и может хранить средства.
  3. Пользователи вызывают его функции, отправляя транзакции на этот адрес, например «обменять этот токен» или «погасить этот кредит».
  4. Каждый узел выполняет один и тот же код и должен прийти к одному результату. Если какое-либо условие в коде не выполняется, вся транзакция откатывается.
  5. Вызывающий платит за вычисления газом. Каждая операция имеет фиксированную стоимость, что не даёт программам работать бесконечно. См. лимит газа.

Жизненный цикл смарт-контракта: код пишется и развёртывается по собственному адресу, пользователи вызывают его транзакциями, каждый узел выполняет один и тот же код, а результат записывается или транзакция откатывается; газ оплачивается в любом случае. Рисунок: что происходит при вызове смарт-контракта в Ethereum.

Простой пример: эскроу-контракт

Представим, что два незнакомых человека обмениваются подержанный ноутбук на 1 ETH. Ни один из них не хочет идти первым. Между ними может находиться эскроу-контракт:

  1. Покупатель отправляет 1 ETH в контракт, который фиксирует платёж и блокирует средства.
  2. Продавец видит заблокированный платёж в блокчейне и отправляет ноутбук.
  3. Когда ноутбук приходит, покупатель вызывает функцию «подтвердить» в контракте, и контракт переводит 1 ETH продавцу.
  4. Если покупатель не подтверждает и не оспаривает сделку, правило тайм-аута в коде может перевести средства продавцу по истечении заданного срока; если продавец не отправляет товар, другое правило может вернуть деньги покупателю.

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

Газ: почему выполнение кода стоит денег

Каждый шаг, который выполняет контракт, от сложения двух чисел до записи значения, имеет фиксированную стоимость в единицах газа. Отправитель задаёт максимальный объём газа и платит определённую цену за единицу, поэтому итоговая комиссия равна использованному газу, умноженному на эту цену. Постоянное хранение данных относится к самым дорогим операциям, поэтому разработчики стараются делать контракты компактными.

Два следствия удивляют новичков. Транзакция, которая завершилась ошибкой на полпути, всё равно оплачивает газ, использованный до сбоя, потому что сеть выполнила работу. И одно и то же действие может стоить совсем разных сумм в зависимости от загруженности сети, так как цена за единицу газа растёт вместе со спросом.

Для чего используются смарт-контракты

  • Токены: большинство токенов, включая крупные стейблкоины, являются смарт-контрактами, которые отслеживают балансы и обрабатывают переводы.
  • Децентрализованные биржи: пулы токенов, которые автоматически определяют цену и исполняют обмены.
  • Кредитование: контракты, которые принимают залог, выдают займы и ликвидируют позиции, когда залог обесценивается слишком сильно.
  • Мультиподписные кошельки: средства, которые перемещаются только тогда, когда подпишут несколько утверждённых ключей.
  • Мосты: контракты, которые блокируют активы в одной сети, чтобы их можно было представить в другой; см. что такое кросс-чейн мост.
  • Стейкинг и управление: контракты, которые хранят застейканные монеты, распределяют вознаграждения и подсчитывают голоса по изменениям протокола.

Стандарты: почему токены работают везде

Многое из того, что пользователи воспринимают как должное, зависит от общих стандартов, то есть согласованных наборов функций, которые контракты реализуют одинаковым образом. Стандарт ERC-20 определяет, как взаимозаменяемые токены сообщают балансы и обрабатывают переводы и одобрения, поэтому кошелёк или биржа могут поддерживать новый токен без индивидуальной доработки. ERC-721 делает то же самое для невзаимозаменяемых токенов, присваивая каждому токену уникальный идентификатор и владельца. Поскольку контракты следуют этим шаблонам, один кошелёк может отображать тысячи различных токенов, а один контракт биржи может торговать любым из них. Стандарты также концентрируют риски: функция «approve», которая позволяет контракту расходовать ваши токены, входит в ERC-20, и именно её используют дрейнеры для кражи средств.

Чем они отличаются от обычного ПО

Обычное приложение работает на серверах, которые контролирует компания, и она может изменить правила или отключить сервис. Смарт-контракт работает в публичной сети: его код открыт, исполнение проверяют тысячи узлов, и, если только он не был создан с возможностью обновления, никто не может изменить его после развёртывания. Именно из этого происходит и его доверие, и его риск.

Контракты также могут вызывать друг друга. Контракт кредитования может считывать цены из оракул-контракта, принимать токен, выпущенный другим контрактом, и отправлять ликвидированный залог в контракт биржи, и всё это в одной транзакции. Такая композируемость позволяет разработчикам строить на работе друг друга, но также означает, что сбой в одном контракте может распространиться на все контракты, которые от него зависят.

Обновляемые контракты и административные ключи

Поскольку развёрнутый код нельзя изменить, многие команды используют обновляемую архитектуру. Пользователи взаимодействуют с фиксированным контрактом «proxy», который перенаправляет вызовы на отдельный логический контракт, и команда может направить proxy на новую логику, чтобы исправить ошибки или добавить функции. Это практично, но возвращает элемент доверия: тот, кто контролирует обновление, может изменить правила, включая то, как обрабатываются средства.

Добросовестные проекты ограничивают эту власть. Типичные меры защиты включают требование нескольких независимых подписантов для любого обновления, применение таймлока, чтобы изменения объявлялись за несколько дней до вступления в силу, и в конечном счёте полное снятие прав на обновление, когда код станет зрелым. Проверка того, что из этого реализовано, — один из самых полезных шагов, которые может предпринять пользователь.

Где смарт-контракты дают сбой

Ошибки необратимы. Дефект в развёрнутом коде может быть использован любым, кто его найдёт, и сеть исполнит эксплойт без сбоев. Взлом DAO в 2016 году, когда злоумышленник использовал уязвимость в одном из самых ранних крупных контрактов Ethereum, стал настолько серьёзным, что привёл к жёсткому форку сети. См. что произошло при взломе DAO.

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

Административные ключи могут их переопределить. Полномочия на обновление, которые позволяют исправлять ошибки, также позволяют и злоупотреблять ими, а украденные ключи дают злоумышленникам те же полномочия. Взлом моста Ronin показал, как многое может зависеть от нескольких ключей.

Пользователей можно обмануть, заставив одобрить доступ. Многие кражи вообще не взламывают код. Вредоносный сайт просит пользователя одобрить контракт на расходование его токенов, и контракт затем делает именно то, что ему было разрешено. См. что такое дрейнер кошельков.

Код не является юридическим договором. Смарт-контракт выполняет инструкции; создаёт ли он юридические права, зависит от законодательства страны, где находятся стороны. См. блокчейн-мифы.

Аудиты, программы bug bounty и формальная верификация

Поскольку ошибки обходятся очень дорого, серьёзные проекты используют несколько уровней защиты. Независимые аудиты безопасности проверяют код перед запуском, однако аудит — это снимок одной версии, и он не может гарантировать отсутствие ошибок. Программы bug bounty вознаграждают исследователей, которые находят уязвимости и ответственно о них сообщают, что даёт талантливым людям законную альтернативу их эксплуатации. Для наиболее критичного кода формальная верификация использует математические методы, чтобы доказать, что контракт ведёт себя в соответствии со своей спецификацией. Каждый метод снижает риск, но ни один не устраняет его полностью, а код, который безопасно хранил большие суммы в течение многих лет, по-прежнему имеет самое весомое подтверждение.

Чтение контракта в блок-эксплорере

Чтобы многое узнать о контракте, не нужно писать код. В блок-эксплорере страница контракта обычно показывает его баланс, историю транзакций и, если разработчики опубликовали код, вкладку «verified» с исходным кодом, которая позволяет любому сравнить код с развёрнутым. Эксплореры часто перечисляют read-функции контракта, которые показывают его текущие настройки, и write-функции, которые показывают, что он может делать. Непроверенный код, очень недавнее развёртывание или крупный баланс под контролем неизвестного адреса — всё это причины для дополнительной осторожности. См. что такое блокчейн-эксплорер.

Смарт-контракты за пределами Ethereum

Многие другие сети также работают со смарт-контрактами. Некоторые совместимы с Ethereum Virtual Machine, поэтому одни и те же код и инструменты работают в них с незначительными изменениями. Другие используют иные виртуальные машины и языки программирования, что может давать преимущества в скорости или стоимости, но означает, что контракты и аудиты напрямую не переносятся. Одни и те же вопросы о качестве кода, полномочиях на обновление и зависимостях применимы в каждой сети.

Как оценить смарт-контракт перед использованием

  • Был ли код проверен аудитом, кем и насколько недавно?
  • Можно ли обновить контракт, кто контролирует ключи обновления и есть ли timelock?
  • Как долго он работает и какую стоимость безопасно хранил?
  • Зависит ли он от оракулов или мостов, и если да, то от каких именно?
  • Что именно ваш кошелёк просит подтвердить, когда вы им пользуетесь?

Ни один ответ не делает контракт безрисковым, но каждый показывает, где находится риск.

Часто задаваемые вопросы

Можно ли изменить смарт-контракт после развёртывания?

Только если он был так задуман. Неизменяемые контракты работают без изменений навсегда; обновляемые могут быть изменены тем, кто контролирует механизм обновления, поэтому этот контроль так важен.

Являются ли смарт-контракты юридически обязывающими?

Не автоматически. Смарт-контракт исполняет собственный код, но создаёт ли он юридически обеспечиваемые обязательства, зависит от законодательства, применимого к участникам, и от любых соглашений, которые его сопровождают.

Нужно ли уметь программировать, чтобы пользоваться смарт-контрактами?

Нет. Большинство людей пользуются ими через кошельки и веб-сайты, не видя кода. Понимание того, что вы подтверждаете, и где находятся риски контракта, гораздо важнее, чем построчное чтение кода.

Чтобы узнать о сети, на которой работает большинство смарт-контрактов, прочитайте, что такое Ethereum.

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

Источники

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *