ГЛОССАРИЙ · ТЕХНОЛОГИИ

Смарт-контракт

Смарт-контракт — программный код, хранящийся в блокчейне и исполняющийся автоматически при выполнении заранее заданных условий. Не требует посредников, неизменяем после деплоя. Основа DeFi, NFT и Web3. Именно смарт-контракты управляют миллиардами долларов в протоколах Uniswap, Aave, MakerDAO — и именно они становятся целями крупнейших хакерских атак в криптоиндустрии.

История: от идеи Ника Сабо до Ethereum

Концепцию смарт-контрактов сформулировал криптограф и правовед Ник Сабо ещё в 1994 году. Он описал их как «компьютеризированные протоколы транзакций, исполняющие условия контракта» и привёл в пример торговый автомат: монета брошена — продукт выдан, без участия кассира. Тогда реализовать эту идею в полной мере было технически невозможно.

Прорыв произошёл в 2015 году, когда Виталик Бутерин и команда Ethereum запустили первый полноценный блокчейн с поддержкой Тьюринг-полных смарт-контрактов. Ethereum Virtual Machine (EVM) стала виртуальным компьютером, исполняющим код контрактов на тысячах узлов одновременно. Это открыло возможности, о которых Сабо мог только писать теоретически.

Сегодня смарт-контракты обрабатывают триллионы долларов в год. Только в экосистеме Ethereum задеплоено более 50 миллионов контрактов. Они лежат в основе всей DeFi-индустрии, NFT-рынков, протоколов управления DAO и выпуска стейблкоинов.

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

Разработчик пишет смарт-контракт на языке высокого уровня, чаще всего Solidity — специализированном языке для Ethereum. Код компилируется в байткод (bytecode) — машинные инструкции для EVM. Байткод деплоится в блокчейн специальной транзакцией создания контракта; контракту присваивается уникальный адрес вида 0x....

Дальше контракт существует в блокчейне как автономный агент. Любой пользователь может вызвать его функции, отправив транзакцию на адрес контракта. EVM исполняет байткод, меняет состояние (state) контракта и записывает результат в блок. Все узлы сети исполняют тот же код с теми же входными данными и получают идентичный результат — это обеспечивает консенсус.

Газ: почему транзакции стоят денег

Каждая операция в EVM потребляет единицы вычислительной работы, называемые газом (gas). Простое сложение двух чисел стоит 3 единицы газа; запись данных в хранилище — 20 000 единиц. Пользователь, вызывающий функцию контракта, платит комиссию: количество использованного газа умножается на текущую цену газа (gas price) в Gwei. Это защищает сеть от спама: бесконечный цикл в контракте истратит весь газ и остановится, не зависнув сеть.

Если транзакция исчерпывает установленный лимит газа (gas limit), она откатывается — все изменения отменяются, но уже потраченный газ не возвращается. Поэтому правильный расчёт газа важен при работе со сложными контрактами.

Применения смарт-контрактов

DeFi — децентрализованные финансы

Протоколы Uniswap, Aave, Compound, MakerDAO полностью построены на смарт-контрактах. Uniswap позволяет обменивать токены без биржи-посредника: алгоритм автоматического маркет-мейкера (AMM) определяет цену по формуле, ликвидность предоставляется пользователями. Aave и Compound позволяют брать и давать в долг под залог — автоматически, 24/7, без банков. Более $50 млрд постоянно заблокировано в DeFi-протоколах.

NFT — невзаимозаменяемые токены

Стандарт ERC-721 описывает смарт-контракт, выпускающий уникальные токены с уникальным идентификатором. Каждый NFT привязан к записи в блокчейне о праве собственности. Маркетплейсы OpenSea, Blur работают через смарт-контракты: листинг, покупка, роялти выплачиваются автоматически без централизованного оператора.

Токены ERC-20

Большинство криптовалютных токенов — это смарт-контракты стандарта ERC-20. Контракт хранит балансы всех адресов в таблице (mapping) и исполняет переводы через функцию transfer(). USDT, USDC, UNI, LINK, SHIB — всё это смарт-контракты Ethereum.

DAO — децентрализованные автономные организации

DAO используют смарт-контракты для управления: держатели токенов голосуют за предложения, и при достижении кворума контракт автоматически исполняет решение — меняет параметры протокола, переводит средства из казны, обновляет код через прокси.

Ключевые функции, которые должен знать каждый пользователь

transfer() и transferFrom()

Функция transfer(адрес, сумма) переводит токены от вашего кошелька получателю. Функция transferFrom(отправитель, получатель, сумма) позволяет контракту перевести токены от вашего имени — но только если вы предварительно выдали разрешение через approve().

approve() — самая опасная функция для рядового пользователя

Функция approve(адрес контракта, сумма) даёт контракту право тратить указанное количество ваших токенов в любой момент. Когда DeFi-протокол просит вас «approve», он запрашивает разрешение. Стандартная практика — выдавать бесконечное разрешение (uint256 max) для удобства, но это означает, что если контракт окажется вредоносным или будет взломан, он сможет вывести все ваши токены.

mint() и burn()

Функция mint() создаёт новые токены, burn() — уничтожает. В легитимных протоколах эти функции доступны только авторизованным адресам. В мошеннических контрактах mint() часто скрыта в коде и позволяет создателю неограниченно выпускать токены, размывая долю других держателей (rug pull).

Уязвимости смарт-контрактов

Reentrancy (повторный вход)

Классическая уязвимость, использованная при взломе The DAO в 2016 году ($60 млн). Происходит когда контракт вызывает внешний контракт до обновления своего состояния. Вредоносный контракт может вызвать уязвимую функцию снова до её завершения, рекурсивно выводя средства. Именно эта атака привела к форку Ethereum / Ethereum Classic.

Integer overflow / underflow

В старых версиях Solidity (до 0.8.x) математические операции не проверяли выход за границы целого числа. Сложение 255 + 1 для uint8 давало 0, а вычитание 0 - 1 давало 255. Это позволяло обнулить балансы или создать огромное количество токенов из ничего. Solidity 0.8+ проверяет переполнения автоматически.

Backdoor-функции

Намеренно оставленные «чёрные ходы» — owner-only функции, позволяющие создателю изменить логику контракта, заморозить вывод, изменить цену, вывести все средства. Эти функции могут быть скрыты за безобидными названиями или активироваться только при определённых условиях.

Как мошенники создают вредоносные контракты

Схемы мошенничества со смарт-контрактами разнообразны, но большинство сводятся к нескольким паттернам:

  • Rug pull: разработчики запускают токен, собирают ликвидность, затем вызывают скрытую функцию, позволяющую вывести все LP-токены или торговую пару. Цена токена падает до нуля.
  • Honeypot: контракт разрешает покупать токены, но блокирует продажу. Жертвы видят растущую цену, покупают, но не могут продать.
  • Drainer: вредоносный контракт запрашивает approve() с максимальной суммой, затем в удобный момент вызывает transferFrom() и выводит все токены.
  • Fake token: контракт выпускает токен с именем известного проекта (например, USDT2), но без реального обеспечения.

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

Перед тем как одобрить любую транзакцию с незнакомым контрактом, выполните базовые проверки:

  1. Etherscan / BscScan: введите адрес контракта. Проверьте: верифицирован ли исходный код (зелёный чекмарк), сколько транзакций, когда создан, есть ли лейблы (verified contract, scam report).
  2. Аудит: найдите в документации проекта ссылку на аудит. Откройте отчёт и убедитесь, что критические уязвимости устранены. Отчёт должен быть от известной компании: CertiK, OpenZeppelin, Trail of Bits, Quantstamp, Hacken.
  3. Token Sniffer / RugCheck: автоматические инструменты анализируют контракт на наличие типичных признаков rug pull и honeypot. Не являются исчерпывающими, но помогают отсеять явные мошенничества.
  4. Сумма разрешения: при approve проверяйте точную сумму в MetaMask. Если контракт просит unlimited approval на стейблкоин — ограничьте её суммой текущей операции.
  5. TVL и история: протокол с $500 млн TVL и двухлетней историей без взломов значительно надёжнее только что запущенного.

Языки программирования смарт-контрактов

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

  • Solidity — основной язык Ethereum, синтаксически схожий с JavaScript и C++. Объектно-ориентированный, поддерживает наследование, модификаторы функций, события. Используется в 95%+ EVM-контрактов. Ключевой недостаток — историческая подверженность уязвимостям (reentrancy, integer overflow в старых версиях).
  • Vyper — язык с упором на безопасность и читаемость, синтаксически близкий к Python. Намеренно ограниченный: нет рекурсии, наследования, бесконечных циклов. Это делает код более предсказуемым и аудируемым. Используется в Curve Finance и ряде других протоколов.
  • Rust — используется для смарт-контрактов в экосистемах Solana (через Anchor), Near Protocol, Polkadot (через Ink!). Более производительный, чем Solidity, но сложнее для разработки.
  • Move — язык, разработанный Facebook для Libra/Diem, теперь используется в Aptos и Sui. Проектировался с учётом безопасности управления ресурсами.

Крупнейшие взломы смарт-контрактов в истории

История смарт-контрактов — это одновременно история их эксплуатации. Крупнейшие инциденты стали поворотными точками в развитии индустрии.

The DAO (2016, $60 млн). Первый и наиболее известный взлом смарт-контракта. Атакующий воспользовался уязвимостью reentrancy в коде The DAO — децентрализованного венчурного фонда на Ethereum. Рекурсивный вызов функции вывода позволил многократно извлекать средства до обновления баланса. Последствием стал хардфорк Ethereum, разделивший сообщество на Ethereum и Ethereum Classic.

Poly Network (2021, $611 млн). На тот момент крупнейший взлом в истории DeFi. Атакующий нашёл уязвимость в механизме верификации подписей кросс-чейн контракта и получил права привилегированного пользователя. Примечательно: взломщик впоследствии вернул почти все средства, объяснив это желанием «показать уязвимость».

Ronin Network (2022, $625 млн). Самый крупный взлом на сегодняшний день. Атакующие (позднее идентифицированные как группа Lazarus, связанная с Северной Кореей) скомпрометировали 5 из 9 валидаторов сети Ronin (сайдчейн для Axie Infinity). Технически это не уязвимость смарт-контракта, а компрометация ключей валидаторов — но именно смарт-контракт моста выполнил авторизованный вывод средств.

Wormhole Bridge (2022, $320 млн). Уязвимость в верификации подписей контракта Wormhole позволила атакующему создать 120 000 wETH «из воздуха» без реального обеспечения. Средства были выведены и частично отмыты через миксеры.

Предупреждение: Взаимодействие с неаудированными смарт-контрактами несёт высокий риск полной потери средств. Отсутствие публичного аудита от известной компании — стоп-сигнал для любого DeFi-протокола или NFT-проекта. Анонимная команда + отсутствие аудита + агрессивный маркетинг = классический rug pull.

Аудит смарт-контрактов: что это и насколько надёжен

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

Важно понимать ограничения аудита. Даже после аудита от топовых компаний протоколы взламываются: аудит охватывает только проверенную версию кода; новый код после обновлений может содержать уязвимости; некоторые уязвимости появляются только при взаимодействии нескольких протоколов (composability risks). Аудит снижает риск, но не устраняет его полностью. Ведущие компании по аудиту: OpenZeppelin, Trail of Bits, CertiK, Quantstamp, Hacken, Dedaub.

Смарт-контракты и криминалистика: как отследить кражу

Каждый вызов функции смарт-контракта записывается в блокчейн как транзакция с уникальным идентификатором TXID. Это делает смарт-контракты парадоксально прозрачными: даже после кражи полная цепочка движения средств доступна для анализа публично и навсегда.

Криминалистический анализ взлома смарт-контракта включает несколько этапов. Первый — реконструкция атаки: анализ транзакций, выявление эксплуатированной уязвимости, восстановление хронологии событий. Второй — трейсинг средств: отслеживание движения украденных активов по цепочке транзакций, выявление промежуточных адресов, идентификация точек обналичивания (биржи, OTC-столы). Третий — идентификация атакующего: IP-адреса, биржевые аккаунты, метаданные транзакций могут раскрыть личность или геолокацию злоумышленника.

KarCrypto использует профессиональные инструменты блокчейн-аналитики (Chainalysis, TRM Labs, Elliptic) для расследования взломов смарт-контрактов. Украденные средства нередко выходят на биржи с KYC — в этот момент возможна их заморозка при взаимодействии с compliance-отделом биржи или через правоохранительный запрос. В ряде случаев удавалось заморозить до 30–40% украденных активов на этапе обналичивания.

Связанные термины

Полезные материалы

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

Что такое газ в смарт-контракте?
Газ (gas) — единица измерения вычислительной работы в сети Ethereum. Каждая операция смарт-контракта стоит определённое количество газа. Пользователь указывает цену газа в Gwei, и валидаторы получают комиссию. Чем сложнее контракт, тем больше газа он потребляет. Неверно рассчитанный лимит газа приводит к провалу транзакции с потерей уже потраченного газа.
Можно ли изменить смарт-контракт после деплоя?
По умолчанию — нет. Код смарт-контракта неизменен после развёртывания. Однако разработчики могут использовать паттерн Proxy (прокси-контракт), где логика хранится в отдельном контракте, на который можно переключить прокси. Это вводит администраторский риск: владелец прокси может обновить логику в любое время, что потенциально опасно для пользователей.
Как понять что смарт-контракт безопасен?
Проверьте: наличие аудита от известных компаний (OpenZeppelin, Trail of Bits, CertiK) с отчётом без критических уязвимостей; открытый верифицированный исходный код на Etherscan; возраст контракта и объём заблокированных средств (TVL); отсутствие функций owner-only для вывода средств. Совокупность этих факторов существенно снижает риск.
Что значит «audited contract»?
Audited contract означает, что код смарт-контракта был проверен независимой компанией по безопасности. Аудиторы ищут уязвимости: reentrancy, integer overflow, неправильную обработку прав доступа. Отчёт публикуется публично. Важно: наличие аудита не гарантирует 100% безопасности — он лишь снижает вероятность критических ошибок.
Можно ли потерять деньги взаимодействуя со смарт-контрактом?
Да. Способы потерь: взаимодействие с вредоносным контрактом (drainer), уязвимость протокола (reentrancy hack), выдача неограниченного approve, rug pull создателями. В 2023–2025 годах через уязвимости смарт-контрактов было похищено более $3 млрд. Если вы потеряли средства через смарт-контракт — обратитесь к KarCrypto: блокчейн-трассировка может помочь идентифицировать получателей.