Смарт-контракты простыми словами — это программы в блокчейне, которые сами выполняют условия сделки, без банка, нотариуса или биржи посередине. В этом уроке разберём, как такая программа запускается и исполняется, где вы уже сталкиваетесь со смарт-контрактами и за какие ошибки в коде пользователи расплачивались реальными деньгами.
- Смарт-контракт — это код, записанный в блокчейн, который выполняется по заданным правилам у всех узлов сети одинаково.
- Он не умный и не юридический договор: он делает ровно то, что написано в коде, включая ошибки.
- На смарт-контрактах работают обменники, кредитные сервисы, стейблкоины, NFT и почти весь DeFi.
- Главные риски — уязвимости в коде, ключи администратора и разрешения, которые вы сами выдаёте контракту.
Что такое смарт-контракт
Термин ввёл криптограф Ник Сабо ещё в 1990-х, задолго до биткоина. Чтобы пояснить суть, он приводил в пример торговый автомат: опустил монету, нажал кнопку — и напиток твой. Продавец не нужен, потому что правило «заплатил — получил» встроено в сам механизм.
Смарт-контракт работает по тому же принципу, только вместо железа — программа, а вместо монетоприёмника — блокчейн. Код с правилами публикуется в сети и получает собственный адрес, как обычный кошелёк. Любой может отправить на этот адрес транзакцию, и контракт сделает то, что в нём заложено: переведёт токены, выдаст заём или зачислит NFT.
Массово смарт-контракты появились после запуска Ethereum в 2015 году. Сегодня они есть в Solana, BNB Chain, Avalanche, Tron и десятках других сетей. Названия и языки программирования отличаются, но суть общая: правила прописаны в коде и исполняет их сеть, а не человек.
Слово smart здесь означает «автоматический», а не «разумный». Контракт не понимает, чего хотят стороны, и не умеет исправлять ошибки — он просто выполняет инструкции.
Как смарт-контракт исполняется
Возьмём децентрализованный обменник. Когда вы нажимаете «Обменять», кошелёк формирует транзакцию с вызовом нужной функции контракта и просит её подписать. После подписи транзакция уходит в сеть, и каждый узел, который проверяет блок, прогоняет те же данные через тот же код и получает тот же результат. Поэтому никто не может тайно подменить итог.
За выполнение кода платят комиссию. В Ethereum её называют газом: чем сложнее операция, тем больше вычислений и тем дороже. Если газа не хватило или условие в контракте не выполнилось, транзакция откатывается, но комиссия за попытку всё равно списывается.
Ещё одно важное свойство — неизменяемость. Опубликованный код нельзя просто взять и отредактировать. Разработчики обходят это с помощью обновляемых контрактов: пользователь обращается к одному адресу, а тот перенаправляет вызовы на новую версию логики. Для исправления ошибок это удобно, но значит, что у кого-то есть право менять правила.
Отсюда простое практическое правило: перед подписью смотрите не только на сумму, но и на то, с каким контрактом вы имеете дело и какую функцию вызываете. Хорошие кошельки показывают это прямо в окне подтверждения, а некоторые ещё и предупреждают о подозрительных адресах.
- Разработчик пишет код, например на Solidity, и публикует его в сети.
- Контракт получает адрес, и его код становится виден всем.
- Пользователь подписывает транзакцию с вызовом функции контракта.
- Узлы сети выполняют код и включают результат в блок.
- Балансы и данные контракта меняются, а запись об этом остаётся в блокчейне навсегда.
Чем смарт-контракт отличается от обычного договора
Обычный договор описывает намерения людей, а исполнять его приходится самим людям, если нужно — через суд. Смарт-контракт исполняет себя сам, но только в пределах блокчейна: токены он переведёт, а вот проверить, доставили ли вам диван, не сможет.
Чтобы узнать что-то о внешнем мире, например курс доллара или результат матча, контракту нужен оракул — сервис, который приносит данные в блокчейн. Самый известный пример — сеть Chainlink. Оракул становится точкой доверия: если он передаст неверную цену, контракт честно выполнит ошибочное действие.
| Обычный договор | Смарт-контракт | |
|---|---|---|
| Кто исполняет | Стороны, банк, нотариус, суд | Узлы блокчейна автоматически |
| Скорость | Дни и недели | Время подтверждения транзакции |
| Можно ли изменить | Да, по соглашению сторон | Нет, если не заложено обновление |
| Что, если ошибка | Можно оспорить | Ошибка исполнится как написано |
| Связь с реальным миром | Прямая | Только через оракулы |
В обменнике вроде Uniswap вы отправляете в контракт USDC, а он по формуле рассчитывает, сколько ETH вам положено, и сразу их переводит. Ни оператора, ни заявки на обмен — только код и пул ликвидности.
Где вы уже встречаете смарт-контракты
Почти любой токен, кроме нативных монет вроде BTC и ETH, — это смарт-контракт. Тот же USDT в сети Ethereum или Tron существует как контракт, который хранит таблицу балансов и правила перевода. Отправляя токен другу, вы на самом деле вызываете функцию этого контракта.
На смарт-контрактах построены децентрализованные приложения: обменники, кредитные протоколы, где можно занять под залог, маркетплейсы NFT, мультиподписные кошельки, которым для перевода нужно несколько подписей. Целый сектор таких сервисов называют DeFi, и подробнее о нём рассказано в отдельном уроке.
За пределами финансов контракты используют для голосований в сообществах, игровых предметов, билетов и подтверждения владения цифровыми объектами. Не все эти идеи прижились, но принцип везде один: правила открыты, и их исполнение не зависит от доброй воли одной компании.
Как посмотреть на смарт-контракт своими глазами
Чтобы смарт-контракты перестали быть абстракцией, достаточно один раз открыть обозреватель блоков. Это сайт, который показывает всё, что происходит в сети: транзакции, адреса, балансы и код контрактов. Если вы помните из урока о том, как работает блокчейн, что все записи публичны, обозреватель — просто удобное окно в эти записи.
У каждого контракта на Etherscan есть вкладка с кодом. Зелёная галочка рядом означает, что автор опубликовал исходный код и сервис подтвердил, что он совпадает с тем, что реально работает в сети. Неверифицированный контракт — это чёрный ящик, и доверять ему крупные суммы не стоит.
Там же видно, кто создал контракт, сколько с ним было транзакций и какие у него есть функции. Через вкладку с функциями чтения можно без всякой комиссии узнать, например, общий выпуск токена или баланс любого адреса.
- Найдите адрес контракта токена USDT в сети Ethereum на CoinGecko или CoinMarketCap.
- Вставьте его в поиск на etherscan.io.
- Откройте вкладку Contract и убедитесь, что код верифицирован.
- Во вкладке Read Contract найдите функцию totalSupply и посмотрите текущий выпуск.
- Пролистайте последние транзакции: каждая строка — это вызов функции контракта.
Если хотите попробовать взаимодействие с контрактами, используйте тестовые сети вроде Sepolia. Монеты там бесплатные, и ошибка не будет стоить денег.
Риски: когда код против вас
Ошибку контракт выполнит так же старательно, как и правильную логику. Классический пример — The DAO в 2016 году: через уязвимость в коде злоумышленник вывел крупную сумму ETH. Сообщество решило откатить последствия, и из-за несогласия с этим решением сеть разделилась на Ethereum и Ethereum Classic.
С тех пор протоколы, мосты и обменники взламывают регулярно. Частые причины — ошибки в логике, манипуляции с ценой у оракула и украденные ключи администратора. Аудит кода снижает риск, но не даёт стопроцентной гарантии: взламывали и проверенные проекты.
Для обычного пользователя опаснее всего разрешения. Подключая кошелёк к сайту, вы часто даёте контракту право тратить ваши токены, иногда без ограничения суммы. Мошеннический сайт или взломанный протокол может воспользоваться этим разрешением позже. Как распознавать такие ловушки, разобрано в уроке про мошеннические проекты.
- Проверяйте, что код контракта верифицирован в обозревателе блоков, например в Etherscan.
- Ищите публичные аудиты и смотрите, кто и когда их делал.
- Читайте, что именно просит подписать кошелёк, а не нажимайте «Подтвердить» автоматически.
- Периодически отзывайте старые разрешения через сервисы вроде Revoke.cash.
- Держите основные средства на кошельке, который не подключаете к экспериментальным сайтам.
Если контракт выполнил перевод, звонком в поддержку его не вернуть. Ответственность за то, что вы подписали, лежит на вас.
Пройдите по шагам из раздела «Как посмотреть на смарт-контракт своими глазами»: найдите на Etherscan контракт USDT в сети Ethereum, убедитесь, что код верифицирован, и узнайте через Read Contract значение totalSupply (у USDT шесть знаков после запятой, так что последние шесть цифр — это дробная часть). Затем откройте любую свежую транзакцию этого контракта и посмотрите, какая функция в ней вызвана — чаще всего Transfer. Так вы своими глазами увидите, что перевод токена — это вызов кода.
Вход бесплатный, торговля на демо-счёте — свои деньги не нужны. В бесплатных турнирах выигрывают Tour Pass, а с ними заходят в турниры с призами в USDT. Лучшие идут дальше — к funded-счёту на $5 000.
Частые вопросы
Можно ли написать смарт-контракт без знания программирования?
Конструкторы токенов и шаблоны есть, но запускать что-то в основной сети, не разбираясь в коде, рискованно. Для обучения лучше использовать тестовые сети, где монеты ничего не стоят.
У биткоина есть смарт-контракты?
В биткоине есть простой язык скриптов: с его помощью делают мультиподписи и блокировки по времени. Сложные приложения вроде обменников и кредитных протоколов на нём не строят — для этого появились Ethereum и другие сети.
Смарт-контракт имеет юридическую силу?
Сам по себе код — не договор в юридическом смысле, и подход к этому зависит от страны. Если вам нужна правовая защита, сделку стоит оформить и обычным договором.
Что делать, если я подписал подозрительное разрешение?
Сразу отзовите его через обозреватель блоков или сервис управления разрешениями и переведите оставшиеся активы на новый кошелёк. Чем быстрее вы это сделаете, тем меньше шансов, что разрешением успеют воспользоваться.
Обсуждение
Комментарии из BuyCrypt Live. Войдите через Google или Apple — аккаунт BuyCrypt создадим сразу, тот же, что в приложении.