Место для вашей рекламы

Смарт-контракты: архитектура, языки программирования и применение

Место для вашей рекламы
как работают смарт-контракты
Когда мы подписываем официальные документы, то используем традиционный договор. Это несколько листов бумаги, на которых стоят печати, подписи сторон, и в оформлении которых принимают участие юрист, нотариус, бухгалтер, возможно, другие специалисты. Но ни один договор не может гарантировать, что стороны будут придерживаться взятых на себя обязательств. Смарт-контракт - это важный элемент цифровой экономики, он представляет собой технологию, которая обеспечивает выполнение контракта (договора) без посредников и человеческого фактора.

Что такое смарт-контракт с технической точки зрения

С технической точки зрения, смарт-контракт - это программа, в которую заложены определенные условия и инструкции. Если условия достигаются, программа выполняет инструкции. При этом человек или организация не принимают участия в поддержании его работы. Фактически это изолированный, независимый и неподконтрольный программный код.
Обычную программу, расположенную на сервере, можно изменить, а смарт-контракт - нет.  

Как выполняется смарт-контракт в блокчейне

Для выполнения необходимо наступление определенных условий в среде выполнения. Порядок действий, то есть что необходимо сделать, определяется заранее.
как работают смарт-контракты
как работают смарт-контракты

EVM, gas, состояние контракта

EVM (виртуальная машина Ethereum) - это среда выполнения смарт-контрактов, реализованная каждым узлом сети Ethereum. Запуск кода на сотнях и тысячах узлов сети защищает от подделок. Для мотивации пользователей и защиты сети разработана концепция газа (gas). Ее смысл заключается в том, что каждая операция в EVM имеет определенную стоимость, например, несколько единиц газа. Пользователь, который вызывает функцию, устанавливает Gas Limit (максимальное количество газа), которое он может потратить, а также цену за единицу газа.
Состояние контракта - это совокупность данных, которая находится в памяти storage блокчейна. Это включает значения переменных, настройки протокола, балансы пользователей, список пользователей, владеющих NFT и некоторые другие данные. При выполнении контракта происходят три последовательных процесса:
  • Считывание данных из состояния контракта;
  • Осуществление вычислений;
  • Запись данных обратно.
Записанные обратно данные попадают в сеть и распределяются по компьютерам пользователей так, чтобы их нельзя было изменить.
схема выполнения контракта в EVM
схема выполнения контракта в EVM

Языки разработки

В 2026 году блокчейн-разработчики используют три главных языка - Solidity, Rust и Move.

Solidity (Ethereum)

Solidity - это первый и самый популярный язык для создания смарт-контрактов. Он напоминает JavaScript, специально адаптированный под EVM. Это объектно-ориентированная среда с огромной экосистемой и большим количеством последователей на Reddit, Discord и в других социальных сетях. Из плюсов можно отметить большое количество открытых библиотек, а также высокую гибкость. Важный минус - уязвимость, которая является следствием высокой гибкости. Простота языка приводит к тому, что код подвержен взломам, поэтому разработчики должны обладать высокой экспертностью.

Rust (Solana)

Rust - язык программирования, основная особенность которого - повышенная безопасность при работе с памятью. Он используется для написания смарт-контрактов в сети Solana и других блокчейнах. Из особенностей можно отметить разделение кода программы и данных. Программы в блокчейне Solana не хранят состояние внутри себя, а обрабатывают внешние аккаунты с данными. Кроме этого, в число преимуществ можно записать высокую скорость транзакций и хорошую производительность. Минус - сложность, необходимость изучать концепцию lifetimes (время жизни переменных), а также другие аспекты, которые повышают порог входа. Как результат, если для проекта планируется привлечение разработчиков, необходимо искать квалифицированных специалистов и рассчитывать свой бюджет. В отличие от Solidity, с разработкой на Rust итоговых затрат будет больше.

Move (Aptos, Sui)

Язык Move разработан программистами Meta, на сегодня он является фундаментом для создания решений в сетях Aptos и Sui. Одним из его главных элементов является концепция цифровых токенов. В отличие от других языков, в Move они представляют собой виртуальные ресурсы, перемещаемые из одного кошелька в другой, а не просто строчки в реестре, которые могут быть уничтожены. Безопасность обеспечивает встроенный Move Prover (верификатор кода) и другие решения.

Стандарты и паттерны (ERC-20, ERC-721, proxy-контракты)

При разработке смарт-контрактов возникает проблема: изначально они не могут работать друг с другом. Чтобы решить этот вопрос, разработаны единые стандарты:
  • ERC-20 - взаимозаменяемые токены. Они широко используются для стандартных криптовалют, в частности, стейблкоинов. В них описан базовый набор функций - общий объем эмиссии, проверка баланса, перевод токенов и так далее. Просто, доступно, удобно, объединяет смарт-контракты сотен и тысяч разработчиков;
  • ERC-721 - невзаимозаменяемые токены - это стандарт, где каждому токену присвоен уникальный идентификатор - TokenID. NFT-токены используются для создания игровых предметов, цифрового искусства, подтверждения права владения. На сегодняшний день ажиотаж вокруг NFT, где цифровые объекты являются альтернативной реальным, утрачивает свою популярность, но сама идея ERC-721 широко используется в game разработке и других случаях;
  • Proxy-контракты - паттерны обновляемости. Предположим, в развернутом контракте содержится ошибка. Код в блокчейне изменить нельзя, но с помощью proxy-контрактов этот вопрос решается. В частности, пользователь может отправить запрос на своего рода заглушку (proxy-контракт), который не содержит логики, а лишь выполняет перенаправление вызова на контракт с логикой. Когда необходимо провести обновление кода, владелец разворачивает новый контракт с новой логикой и после изменяет адрес ссылки в proxy.

Уязвимости и аудит

По сути, задача смарт-контрактов - это управление ликвидностью, поэтому они привлекают хакеров. Незначительная ошибка в коде может привести к потере миллионов долларов.

Reentrancy, oracle manipulation, integer overflow

  • Reentrancy - это популярная, можно даже сказать, классическая уязвимость. Ее суть заключается в том, что контракт может отправить средства пользователю еще до того, как баланс обновится непосредственно в самом хранилище. С помощью специальной функции вывода через свой смарт-контракт взломщик получает средства. Борьба с reentrancy - checks-effects-interactions:
  • Первый этап - проверка условия;
  • Второй - изменение внутреннего состояния (баланса);
  • Третий - только после первых двух взаимодействие со внешними адресами.
Пример псевдокода уязвимости Reentrancy:
// Баланс обновляется ПОСЛЕ отправки денег
function withdrawBalances() public {
    uint amount = userBalances[msg.sender];
    require(amount > 0);
    
    // Контракт отправляет деньги. Если получатель — контракт, 
    // он может снова вызвать withdrawBalances() ДО выполнения следующей строки!
    (bool success, ) = msg.sender.call{value: amount}(""); 
    require(success);
    
    userBalances[msg.sender] = 0; // Строка не успевает выполниться
}
Еще один способ мошенничества - oracle manipulation (манипуляция оракулами). Смысл следующий: несмотря на свою технологичность, смарт-контракты не имеют связи с реальным миром, поэтому не обладают информацией об актуальной стоимости доллара или ETH. чтобы получить значения цен, они прибегают к использованию оракулов. Oracle manipulation состоит в том, чтобы совершить крупную сделку на бирже, перекосить цену и в эту же секунду взять дешевый займ в смарт-контракте, который использует этот оракул. Для борьбы с этим используют децентрализованные сети оракулов, TWAP (среднюю цену за период времени), защиту от мгновенных займов.
Integer overflow - переполнение целых чисел. Суть в том, что в старых версиях Solidity при уменьшении 0 на 1 результат превращался в максимально возможное число для данного типа. За счет этого хакеры генерировали миллиарды бесплатных токенов. В наше время данная проверка выполняется по умолчанию.

Применение за пределами DeFi: RWA, supply chain, DAO

Может показаться, что практическое применение смарт-контрактов весьма скромное - они просто позволяют обмениваться токенами внутри DeFi-протоколов. Это не так, данная технология с успехом интегрируется в разные отрасли экономики:
  • Токенизация реальных активов. Любой физический объект (например, золотое кольцо, земельный участок или акция компании Apple) может быть токенизирован, то есть превращен в цифровой токен (RWA - real world asset) . Такой подход убирает многочисленных посредников и повышает простоту использования. Пример из мира финансов - tokenized stocks;
  • Цепочки поставок (supply chains) - технология автоматизации логистики. Суть заключается в интеграции смарт-контрактов с датчиками Интернета вещей. Например, смарт-контракт перечисляет оплату поставщику без бухгалтера, созвонов и дополнительных подтверждений в тот момент, когда контейнер с товаром прибывает в порт;
  • Децентрализованные автономные организации (DAO) - это организации без директора или совета директоров. Управление заложено в смарт-контракт. Решения принимаются по принципу голосования токенами. Если то или иное предложение набрало кворум (необходимое количество голосов), смарт-контракт выделяет необходимое финансирование на адрес разработчика.

Эволюция смарт-контрактов: от скриптов BTC до account abstraction

Эволюция смарт-контрактов стремительная и многообразная:
  • Bitcoin скрипты - начальная стадия. В Bitcoin заложен базовый язык, с помощью которого можно выполнять простые команды - временная блокировка, мультиподпись и др.;
  • Код в Ethereum - полноценная среда выполнения с циклами, сложными разветвлениями и практически неограниченной логикой взаимодействия;
  • Account abstraction - современный этап эволюции Web3. Суть заключается в превращении кошелька в полноценный смарт-контракт. Благодаря этому газ можно оплачивать в любых стейблкоинах, также доступны настройка автоплатежей, восстановление доступа через доверенных лиц и другие возможности.
Мнение эксперта
Главное преимущество смарт-контрактов - исполнение кода, вне зависимости от мнения сторон, справедливости, контекста. На примере смарт-контрактов в DAO мы видим на самом деле демократическое голосование и принятие решений. Для широкого внедрения этой технологии в блокчейн необходимо особое внимание уделять безопасности и защите от взлома. Только в этом случае возможна дальнейшая интеграция смарт-контрактов в реальную экономику.
Александр Савушкин, финансовый эксперт
Александр Савушкин, финансовый эксперт

Комментарии

Комментариев пока нет. Будьте первым!