Смарт-контракт — это самоисполняемый код, хранящийся в блокчейн-сети, который автоматически выполняет условия соглашения при их наступлении, без участия посредника. Смарт-контракты лежат в основе приложений, DeFi, NFT и DAO, обеспечивая прозрачное и надёжное соблюдение правил. Смарт-контракты не привязаны к какой-либо одной сети: Ethereum и другие EVM-совместимые блокчейны, Solana, Cardano, Polkadot и Sui — все они поддерживают смарт-контракты, каждый используя собственный язык программирования и модель исполнения. Поскольку смарт-контракт существует в блокчейне, он работает без посредника, его правила доступны для проверки любому желающему, а после развёртывания, как правило, не может быть изменён. Смарт-контракты — это строительные блоки большинства блокчейн-приложений, включая DeFi-протоколы, стейблкоины, NFT и DAO.
Отказ от ответственности: это руководство предназначено исключительно в образовательных целях. Оно не является финансовым советом, офертой и не предназначено для аудитории из Великобритании. Взаимодействие со смарт-контрактами сопряжено с рисками и подходит не всем пользователям.
Как работают смарт-контракты
Разработчик пишет контракт и однократно развёртывает его в блокчейне. После этого любой желающий может взаимодействовать с ним, а контракт исполняет свою логику при наступлении заданных условий — например, выпускает токены при получении платежа или позволяет пользователю вывести средства после достижения определённой высоты блока. Два свойства определяют смарт-контракты на всех поддерживающих их сетях: исполнение происходит автоматически и не требует посредника, а код по умолчанию неизменяем — поэтому ошибка в нём становится постоянной, если только контракт не был специально разработан с возможностью обновления.
Выполнение смарт-контракта также требует затрат. Каждая сеть взимает комиссию за обработку вычислений и хранения данных, которые использует контракт, — на Ethereum и большинстве EVM-цепочек это называется «gas», а в других сетях применяются иные названия и модели комиссий (комиссии за транзакцию в Solana, комиссии за транзакцию плюс единицы выполнения скриптов в Cardano, комиссии на основе веса в Polkadot). Механика различается, но принцип одинаков: выполнение кода в блокчейнах потребляет ресурсы сети, и кто-то должен за это платить.
Краткая история смарт-контрактов
Идея смарт-контрактов появилась раньше любого блокчейна. Учёный-компьютерщик и правовед Ник Сабо ввёл термин «смарт-контракт» в 1994 году и развил его в эссе 1996 года, описав компьютеризированный протокол транзакций, исполняющий условия соглашения. Он сравнил эту концепцию с торговым автоматом, который надёжно выдаёт товар после получения оплаты, не требуя доверия к другой стороне (оригинальные работы Сабо, упоминаемые в историях этой концепции). В то время не существовало платформы, способной запускать подобный код с минимальным уровнем доверия и защитой от вмешательства, поэтому идея оставалась преимущественно теоретической на протяжении двух десятилетий.
Bitcoin, запущенный в 2009 году, представил блокчейн, но лишь ограниченный язык сценариев (Bitcoin Script), намеренно не являющийся полным по Тьюрингу: он может задавать условия расходования средств, такие как требования мультиподписи и временны́е блокировки, но не способен выполнять произвольные программы общего назначения. Bitcoin Script определяет, как можно тратить существующие средства, но не может выражать открытую логику о том, что происходит дальше, — поэтому Bitcoin не считается платформой смарт-контрактов общего назначения.
Ethereum, запущенный 30 июля 2015 года, стал первым крупным блокчейном, созданным специально для выполнения смарт-контрактов общего назначения посредством Ethereum Virtual Machine (EVM) — общей среды выполнения, которую каждый узел Ethereum исполняет идентично (ethereum.org, История Ethereum). Это сделало Ethereum программируемым в той мере, в какой более ранние блокчейны не были, и именно поэтому большинство терминов смарт-контрактов — gas (сетевые комиссии), контрактные аккаунты, Solidity — берут начало именно там. За прошедшие годы другие сети создали собственные среды смарт-контрактов с использованием различных языков и моделей исполнения, включая Solana (2020), скрипты Plutus для Cardano (2021), контракты ink! для Polkadot и объекты на основе Move для Sui (2023), распространив концепцию далеко за пределы одной сети.
Где выполняются смарт-контракты?
Среда выполнения и язык смарт-контракта полностью определяются сетью, в которой он развёртывается. Одни сети отслеживают состояние как балансы аккаунтов, которые контракты читают и записывают (модель аккаунтов Ethereum); другие отслеживают состояние как дискретные, расходуемые выходы (модель eUTXO Cardano, расширение модели UTXO Bitcoin) или как индивидуально принадлежащие объекты (объектно-ориентированная модель Sui). Эти различия влияют на то, как пишутся контракты и как они могут взаимодействовать друг с другом, но не на базовую гарантию: код выполняется автоматически и после развёртывания его сложно или невозможно изменить.
Сеть | Язык | Модель исполнения | Заметное применение в экосистеме |
Ethereum и EVM-сети | Solidity; Vyper; компилируется в EVM-байткод | На основе аккаунтов; один вызов контракта выполняется за раз на цепочку | DeFi; стейблкоины; токены ERC-20 и ERC-721 |
Solana | Rust, как правило, с фреймворком Anchor | Sealevel: выполняет транзакции параллельно, если они не затрагивают одни и те же данные | Высокопроизводительный DeFi; NFT-маркетплейсы |
Cardano | Plutus (на основе Haskell) | Extended UTXO (eUTXO): результаты транзакций можно проверить до их отправки | DeFi; выпуск нативных токенов |
Polkadot (через парачейны) | ink! (на основе Rust); EVM-парачейны, такие как Moonbeam, также поддерживают Solidity | Работает поверх парачейнов на основе Substrate; развёртывание без разрешений | Приложения парачейнов; прототипирование |
Sui | Move | Объектно-ориентированная: транзакции изменяют принадлежащие объекты, обеспечивая параллельную обработку | NFT; игры; DeFi |
Bitcoin | Bitcoin Script | Ограниченный, не полный по Тьюрингу; только задаёт условия расходования средств | Кошельки с мультиподписью; временны́е блокировки; протоколы второго уровня |
Источник: ethereum.org; Solana Sealevel; Cardano eUTXO; документация use.ink; концепции Sui Move.
Кто пишет смарт-контракты и использует их?
Разработчики пишут и развёртывают смарт-контракты; это может сделать любой, у кого есть необходимые инструменты и достаточное количество нативных токенов сети для покрытия расходов на развёртывание, причём разрешение от базовой сети для этого не требуется. После того как контракт запущен, любой желающий может взаимодействовать с ним — как правило, через интерфейс приложения, а не путём написания кода напрямую. Человек, обменивающий токены, создающий NFT или голосующий в DAO, запускает выполнение смарт-контракта, как правило, не нуждаясь в понимании базового языка или среды выполнения.
Стандарты токенов
Многие активы, называемые «токенами», представляют собой смарт-контракты, следующие общему стандарту, который позволяет кошелькам и приложениям взаимодействовать с любым совместимым токеном одинаковым образом. На Ethereum и других EVM-цепочках ERC-20 является стандартом для взаимозаменяемых токенов, включая большинство стейблкоинов и утилитарных токенов, а ERC-721 — стандартом для NFT, где каждый токен уникален. Другие сети имеют собственные аналоги — например, стандарт токенов SPL в Solana — разработанные для соответствующих моделей исполнения.
Что обеспечивают смарт-контракты?
В различных экосистемах смарт-контракты являются движущей силой приложений: DeFi-протоколов для кредитования, заимствования и торговли; NFT-маркетплейсов и площадок цифровых активов; а также DAO, правила управления которых закреплены в коде, а не во внутренней политике компании. Конкретная реализация варьируется в зависимости от сети, но базовый принцип — код, обеспечивающий соблюдение соглашения без посредника, — остаётся неизменным.
Зачем нужны смарт-контракты?
Смарт-контракты существуют для того, чтобы устранить необходимость в доверенном посреднике для исполнения соглашения. Вместо того чтобы полагаться на банк, эскроу-агента или оператора платформы для хранения средств и соблюдения набора правил, эти правила кодируются напрямую и исполняются одинаково для всех, кто взаимодействует с контрактом. Именно это свойство делает возможными программируемые финансы с самостоятельным хранением активов, цифровое владение и управление блокчейном в масштабе — вне зависимости от того, в какой сети размещён код.
Разрешения на токены и безопасность
Использование приложения нередко предполагает предоставление смарт-контракту разрешения на токены — права перемещать определённый токен от вашего имени. Это обычная практика, но она также является распространённым вектором атак, поскольку вредоносный контракт может запросить разрешение, позволяющее ему перемещать больше средств, чем намеревался пользователь. Разрешение на токен может быть ограничено конкретной суммой или быть неограниченным. Расширение MetaMask отображает полный объём разрешения на токен — включая адрес контракта и то, является ли разрешение ограниченным или неограниченным, — до подписания, что позволяет пользователю предварительно его проверить. Наше руководство по разрешениям на токены рассказывает, как их проверять и отзывать.
Риски смарт-контрактов
Ошибки необратимы: неизменяемый код с уязвимостью, как правило, нельзя исправить после развёртывания.
Аудиты снижают, но не устраняют риск: проверенные аудитом контракты всё равно подвергались эксплойтам.
Вредоносные контракты существуют в каждой поддерживающей их сети, а не только в одной.
Часто задаваемые вопросы об умных контрактах
Смарт-контракт — это самоисполняемый код, хранящийся в сети и запускающийся автоматически при выполнении заданных условий, без участия посредника.
Нет. Ethereum стал первой крупной универсальной платформой для смарт-контрактов, запущенной в 2015 году, однако сегодня смарт-контракты работают на множестве сетей, включая Solana, Cardano, Polkadot и Sui, каждая из которых имеет собственный язык программирования и модель исполнения.
Блокчейн-сеть определяет, на каком языке программирования написан тот или иной смарт-контракт. Ethereum и другие EVM-сети в основном используют Solidity или Vyper; Solana использует Rust, нередко с фреймворком Anchor; Cardano использует Plutus (на основе Haskell); парачейны Polkadot используют ink! (на основе Rust); а Sui использует Move.
По умолчанию — нет: развёрнутый код неизменяем. Некоторые контракты специально создаются с механизмами обновления, но это добавляет сложности и несёт собственные риски.
Технология хорошо зарекомендовала себя в множестве сетей, однако отдельные контракты могут содержать уязвимости или быть вредоносными. Проверка разрешений токенов и использование только проверенных приложений снижает риски.
Выполнение кода в блокчейн-сетях потребляет вычислительные ресурсы валидаторов или майнеров сети, поэтому сети взимают комиссию за транзакции. Структура комиссий варьируется в зависимости от сети, однако принцип — оплата за использованные вычислительные ресурсы — одинаков для всех.