Что такое смарт-контракт в блокчейне?
Смарт-контракт простыми словами
Блокчейн — это общий журнал записей о переводах, копию которого хранит множество компьютеров сети. Смарт-контракт хранится в этом журнале по своему адресу, то есть номеру в сети, как обычный «счёт», и по этому адресу лежат код и данные программы1. Компьютеры сети выполняют этот код одинаково для всех, и результат записывается в журнал.
Смарт-контракт похож на торговый автомат1. Вы опускаете монету и нажимаете кнопку, автомат выдаёт напиток, и продавец для этого не нужен. Правило автомата одинаково для каждого покупателя, и упросить его выдать напиток без оплаты не получится. Смарт-контракт работает так же, только с криптовалютой и записями в блокчейне.
Термин придумал Ник Сабо, который описал идею в 1994 году, задолго до появления блокчейнов2. Слово «контракт» здесь означает правило, записанное в программе, без бумаги и подписей сторон. Будет ли у смарт-контракта сила договора, решает закон страны ⚖️.
Каждое обращение к смарт-контракту — это операция в блокчейне, и за неё платят комиссию сети, в Ethereum её называют газом. Платит тот, кто отправляет операцию, хотя некоторые приложения умеют брать эту плату на себя. Как устроена комиссия, объясняет статья что такое газ.
Смарт-контракты есть во многих сетях, например в Ethereum, Tron и Solana. Программы для Ethereum без переделки работают и в совместимых сетях, например в BNB Chain и Polygon, подробнее об этом рассказывает статья что такое EVM.
Как со смарт-контрактами связаны токены и разрешения
Токены, то есть криптовалюта, выпущенная поверх чужой сети, — это записи в учёте смарт-контрактов. Каждый токен, например USDT в Ethereum или в Tron, ведёт свой смарт-контракт, и он записывает, сколько токенов на каждом адресе3. Как устроены токены, объясняет статья что такое токен, а чем отличаются их форматы в разных сетях, рассказывает статья стандарты токенов.
На смарт-контрактах работают стейблкоины, обмен одной криптовалюты на другую без компании-посредника и выпуск NFT2. Сайт, через который вы пользуетесь таким сервисом, — только окно к смарт-контракту, саму работу выполняет код в блокчейне4. О стейблкоинах рассказывает статья что такое стейблкоин, об NFT — статья что такое NFT.
Сам по себе смарт-контракт ваши токены не трогает. Списать их с вашего адреса чужой смарт-контракт может, только если вы дали ему разрешение, например нажали в кошельке «Разрешить» или «Подписать» на его сайте5. Отдельно заморозить или сжечь токены может их эмитент, то есть компания, которая их выпустила, если такая возможность заложена в смарт-контракт токена. Как такие разрешения выглядят в кошельке и как их отозвать, разбирает статья безопасность при подключении кошелька.
Данных из внешнего мира, например курса валюты, смарт-контракт сам не видит. Их ему передают оракулы, отдельные сервисы, которые приносят данные в блокчейн, и если оракул передаст неверную цену, смарт-контракт выполнит правило по неверной цене6. Одну из сетей оракулов описывает профиль Chainlink.
Что в смарт-контракте нельзя отменить
Операцию, которую выполнил смарт-контракт, обычными средствами отменить нельзя1. Исправить последствия можно только новой операцией или изменением правил всей сети, как после взлома The DAO, о котором рассказано ниже. Код размещённого смарт-контракта по умолчанию тоже не меняется7.
Часть проектов всё же делает свои смарт-контракты обновляемыми. Тогда вы доверяете тем, кто управляет обновлениями, и новая версия может изменить правила для всех. Чтобы снизить риск, обновления подтверждают несколькими подписями, голосованием держателей или ставят с задержкой, за которую несогласные успевают выйти7.
В блокчейне смарт-контракт хранится в виде машинного кода, который человеку не прочитать. Проверить, что опубликованный текст программы совпадает с размещённым кодом, можно в обозревателе сети, то есть на сайте, где видны все адреса и операции. Смарт-контракт, прошедший такую проверку, там помечен как проверенный (Verified)8.
Можно ли вернуть деньги, если смарт-контракт сработал с ошибкой?
Обычно нет. Криптовалюту, ушедшую из смарт-контракта из-за ошибки или взлома, в большинстве случаев вернуть не удаётся9. Шанс есть, если в смарт-контракт заранее заложена функция возврата или у него есть администратор с правом вмешаться. Узнать это можно в документации проекта и в проверенном коде на обозревателе сети. Если проект предлагает возврат, пользуйтесь только его официальным сайтом.
Риски смарт-контрактов
Ошибка в коде — риск, от которого сеть не защищает. Из-за ошибок в смарт-контрактах украдено или потеряно больше миллиарда долларов9.
В 2017 году из-за одной ошибки в общей программе люди потеряли доступ к криптовалюте в кошельках Parity с мультиподписью, то есть кошельках, где перевод подтверждают несколько владельцев10. Вернуть её изменением правил сети предлагали, но предложение отозвали11. Другой случай, взлом смарт-контракта The DAO в 2016 году, закончился разделением сети Ethereum12, о нём рассказывает статья хард-форк.
Ошибки ищут независимые проверки кода, их называют аудитом. Аудит находит часть проблем, которые пропустили разработчики, однако каждую ошибку он не ловит9. Пометка «проверено аудитом» поэтому снижает риск, но гарантии не даёт.
Разместить смарт-контракт может любой1, и среди них встречаются мошеннические, например токены с именем известной криптовалюты. О таких схемах рассказывает статья фишинг и скам.
Кто отвечает, если смарт-контракт взломали?
Единого ответа нет. Отвечают ли создатели и управляющие проекта, решают закон страны, условия проекта и суд ⚖️. Если вы пострадали, сохраните адрес смарт-контракта и хеши своих операций, то есть их номера в сети, по которым их находят в обозревателе. Следите за заявлениями проекта на его официальном сайте и сообщите о краже в полицию своей страны. Тем, кто пишет первым и обещает вернуть деньги за плату, не платите, это частая схема обмана.
Перед тем как пользоваться незнакомым смарт-контрактом, проверьте четыре вещи:
- адрес смарт-контракта совпадает с адресом из официальной документации проектагде посмотреть: официальная документация проекта, раздел с адресами смарт-контрактов;
- код в обозревателе сети помечен как проверенный;
- известно, кто может обновить смарт-контракт или поставить его на паузу;
- сумма такая, потерю которой вы переживёте, особенно на первой операции.
Глубже — смарт-контракты в разных сетях и случай Parity
В Tron смарт-контракты выполняет своя виртуальная машина TVM, а программы для неё пишут на том же языке Solidity, что и для Ethereum13. В Solana смарт-контракты называют программами14. Обновлять программу может владелец права обновления, обычно это тот, кто её разместил, а если это право отозвать, программу больше никто не изменит15. В Bitcoin есть язык простых условий для переводов. С ним можно потребовать подписи нескольких владельцев или запретить тратить монеты раньше заданного срока16.
Ошибка Parity случилась 6 ноября 2017 года. Все кошельки с мультиподписью, созданные после 20 июля 2017 года, работали через одну общую программу-библиотеку. Пользователь, судя по всему, случайно стал её владельцем и удалил библиотеку, после чего зависевшие от неё кошельки перестали работать10. Предложение восстановить библиотеку изменением правил сети появилось в 2018 году11.