Что такое смарт-контракт?
Что такое смарт-контракт? Узнайте, как работают самоисполняющиеся программы в блокчейне, на чём они основаны, каковы их ограничения и риски и как проверить контракт перед использованием.
Смарт-контракт — это программа, хранящаяся в блокчейне и автоматически исполняющаяся при выполнении заранее заданных условий. Она может хранить и перемещать средства в соответствии со своим кодом, и при этом ни банк, ни брокер, ни другой посредник не решает, выполнять ли каждый шаг.
Смарт-контракты лежат в основе почти всего в криптоиндустрии, что выходит за рамки простых платежей: токенов, децентрализованных бирж, кредитных протоколов, 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 снижают этот риск, но не устраняют его.
