WATS Wallet logoWATS Wallet
Руководство8 мин чтения

Что такое смарт-контракт? Код, который двигает деньги

Смарт-контракт — это программа, развёрнутая в блокчейне, которая хранит и перемещает средства по фиксированным правилам, причём каждый узел сети проверяет исполнение, и никого посередине нет. Как они работают в EVM, Solana и TON, когда их можно изменить, почему ошибки стоят реальных денег — и как WATS Hot Wallet использует контракт-paymaster по ERC-4337, чтобы взимать комиссии в одном токене.

Смарт-контракт — это программа, развёрнутая в блокчейне, которая хранит и перемещает средства по фиксированным правилам и исполняется детерминированно — один и тот же ввод всегда даёт один и тот же результат, — при этом каждый узел сети проверяет это исполнение, и ни компании, ни клерка посередине нет. Почти всё, что вы делаете ончейн, — это смарт-контракт: токены, свопы, рынки кредитования и те самые одобрения, которые позволяют протоколу двигать ваш баланс. Поскольку контрагент — это сам код, его нельзя уговорить и на него нельзя подать апелляцию; именно поэтому уязвимость — это опустошённое хранилище, а не обращение в поддержку. В EVM-сетях их называют смарт-контрактами, в Solana — программами, а TON моделирует как контракт даже ваш кошелёк, но механизм везде один и тот же. Кошельки тоже построены на них: WATS Hot Wallet использует контракт-paymaster по ERC-4337 в EVM-сетях и эквивалентного плательщика комиссии в Solana и TON, так что любая комиссия взимается в одном токене, ATS, вместо нативной газовой монеты каждой сети.

Код, который двигает деньги

Смарт-контракт — это программа, развёрнутая в блокчейне, которая хранит и перемещает средства по фиксированным правилам. После развёртывания она исполняется детерминированно — один и тот же ввод всегда даёт один и тот же результат, — и каждый узел сети проверяет это исполнение, а ни компании, ни клерка посередине нет. Токены, свопы и рынки кредитования — всё это смарт-контракты: код, который сам и есть контрагент.

Важна именно последняя фраза. Когда вы пользуетесь банком, вам должно учреждение, а ваше требование поддерживает правовая система. Когда вы пользуетесь смарт-контрактом, всё соглашение — это код: его нельзя уговорить и нельзя обжаловать. Именно это свойство делает возможным Web3, и оно же делает его сбои такими беспощадными.

Торговый автомат — честная версия

Классическая аналогия говорит, что смарт-контракт — это торговый автомат: бросил монету, получил снек, продавец не нужен. Правила и есть услуга. Эта часть верна и хорошо передаёт детерминизм — автомат не может решить, что сегодня вы ему не нравитесь.

А вот что аналогия скрывает. Поставить автомат может кто угодно, и никакой инспектор не проверяет его перед тем, как он начнёт принимать монеты, — контракт может быть ошибочным или намеренно враждебным с первого дня. Ещё автомат хранит настоящие деньги: пулы и рынки кредитования держат средства пользователей внутри самого контракта, так что изъян — это не застрявший снек, а опустошённое хранилище. И, в отличие от торговых автоматов, контракты вызывают друг друга. Эта композируемость — суперсила, стоящая за DeFi, — и она же означает, что один сломанный автомат может утянуть за собой каждый подключённый к нему.

С чем вы взаимодействуете каждый день?

Если вы хоть немного пользовались криптой, вы пользовались смарт-контрактами — обычно несколькими за транзакцию:

  • Токены — это контракты. «Баланс» ERC-20 — это не монеты, лежащие у вас в кошельке; это запись во внутреннем реестре токен-контракта, отображение адресов в суммы. Отправить токены — значит попросить этот контракт обновить две записи.
  • Свопы — это контракты. Пул DEX — это контракт, который держит два токена и оценивает сделки по формуле: ни книги ордеров, ни торгового деска по ту сторону.
  • Одобрения — это вы, настраивающий контракт. Прежде чем DEX сможет двигать ваши токены, вы говорите токен-контракту, сколько ему позволено взять, — это allowance, записанный ончейн. Поскольку такое разрешение переживает саму сделку, в нём стоит разобраться; материал о токен-одобрениях и Permit объясняет ровно то, что вы выдаёте.

В некоторых сетях даже ваш кошелёк — это контракт, что подводит нас к различиям между крупными экосистемами.

Чем различаются контракты в EVM, Solana и TON?

Идея везде одна — детерминированный код, проверяемый сетью, — но архитектура различается так, что это чувствуется на уровне пользователя.

EVM-сетиSolanaTON
Обычное названиеСмарт-контрактыПрограммыКонтракты (акторы)
Где живёт состояниеКод и хранилище вместе по одному адресуКод в программе; состояние — в отдельных аккаунтах, передаваемых в каждую транзакциюКаждый контракт держит собственное состояние и общается с другими асинхронными сообщениями
Модель токенаОдин контракт ERC-20 записывает баланс каждого держателяПрограмма токенов SPL управляет токен-аккаунтами каждого держателяБаланс jetton каждого держателя живёт в собственном маленьком дочернем контракте
Обновляем по умолчанию?Нет — байткод неизменяем, если не используется проксиДа — пока не отозваны полномочия на обновлениеТолько если это позволяет собственный код контракта

TON доводит модель до предела: всё в сети, включая ваш кошелёк, — это контракт, обменивающийся сообщениями с другими контрактами.

Можно ли изменить смарт-контракт после развёртывания?

В EVM-сетях сам развёрнутый байткод редактировать нельзя. Но многое из того, с чем вы взаимодействуете, стоит за прокси: вы обращаетесь к фиксированному адресу, который переадресует каждый вызов в отдельный контракт-реализацию, — и администратор может перенаправить прокси на новый код. Ваш адрес остаётся прежним; правила за ним оставаться прежними не обязаны.

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

Почему ошибки в смарт-контрактах так важны?

Поскольку контрагент — это код, баг здесь не обращение в поддержку, а открытая дверь, за которой лежат деньги. Нет отдела по борьбе с мошенничеством, который отменит перевод, и в большинстве сетей нет никого, кто мог бы поставить реальность на паузу, пока дверь открыта.

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

Делает ли аудит контракт безопасным?

Более безопасным — но не безопасным. Аудит — это платный разбор одной версии кода в один момент времени, выполненный инженерами по безопасности. Он ловит известные классы ошибок и небрежные паттерны; он не доказывает корректность кода, не покрывает будущие обновления и не учитывает, как контракт поведёт себя в связке с протоколами, которых аудиторы никогда не видели. Хорошо проаудированные протоколы всё равно взламывали.

Практический вывод для пользователя: предпочитайте контракты, которые проаудированы и проверены временем и объёмом средств, относитесь к новым непроаудированным контрактам как к экспериментам, держите токен-одобрения узкими и никогда не вносите больше, чем заслужил код контрагента.

Где здесь WATS

В WATS Hot Wallet рельсы смарт-контрактов — это и есть модель комиссий: каждая транзакция, которую вы подписываете, — перевод, вызов контракта — оплачивается одним токеном, ATS, вместо нативного газа сети, через paymaster по ERC-4337 в EVM и эквивалентного плательщика комиссии/релеера в Solana и TON. ATS — это OFT на LayerZero, поэтому один баланс работает в EVM, Solana и TON, а собранный ATS сжигается со 100M к уровню в 30M. Кошелёк остаётся некастодиальным — ключи держите вы, а WATS никогда не держит ключ — и WATS является первым и единственным кошельком, который объединяет единый токен для комиссий на основе ERC-4337 + OFT, взимаемых вместо нативного газа, с этим сжиганием.

Смарт-контракты — не экзотический уголок крипты: это то, что вы подписываете каждый раз, когда двигаете токен, а код по ту сторону — единственное, что стоит между вашими средствами и тем, кто его написал. Две вещи остаются в вашей власти: что вы одобряете и где живут ваши ключи. Проверяйте одобрения до того, как их выдать, и соразмеряйте каждый депозит с тем, что код заслужил, — а сторону ключей оставьте за собой, подписывая из кошелька, который не может двигать средства от вашего имени. WATS Hot Wallet — именно такой во всех восьми сетях, которые он охватывает: Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana и TON, — ключи держит пользователь, а WATS не держит ключ никогда, и сторона комиссий работает на той самой технологии, которую описывает этот текст: контракт-paymaster по ERC-4337, взимающий плату в ATS вместо нативного газа каждой сети.

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

Токены — это действительно смарт-контракты?

Да. В EVM-сетях токен ERC-20 — это контракт, в хранилище которого адреса сопоставлены с балансами: ваши токены — это записи в этом реестре, а не объекты внутри кошелька. В Solana программа токенов SPL управляет токен-аккаунтами каждого держателя, а в TON баланс jetton каждого держателя живёт в собственном маленьком дочернем контракте. В любом случае перевести токены — значит попросить программу обновить свои записи.

Можно ли изменить смарт-контракт после развёртывания?

Иногда. В EVM-сетях развёрнутый байткод неизменяем, но многие проекты используют прокси: пользователи обращаются к фиксированному адресу, который переадресует вызов в контракт-реализацию, а его администратор может заменить. Программы Solana обновляемы по умолчанию, пока не отозваны полномочия на обновление. Так что настоящий вопрос — кто контролирует ключи обновления: мультисиг, timelock, голосование управления или никто. Проверьте это, прежде чем верить заявлению о неизменяемости.

Безопасно ли пользоваться проаудированными смарт-контрактами?

Безопаснее, но не безопасно. Аудит — это разбор одной версии кода в конкретный момент времени; он ловит известные классы ошибок, но не доказывает корректность, не покрывает более поздние обновления и не проверяет каждое взаимодействие с другими протоколами. Хорошо проаудированные контракты всё равно взламывали. Считайте аудит одним сигналом из нескольких — наряду со временем работы в продакшене, объёмом защищаемых средств и тем, сколько власти у административных ключей, — и соразмеряйте свою экспозицию.

Нужна ли мне нативная монета сети, чтобы взаимодействовать со смарт-контрактом?

Обычно да — сеть рассчитывает газ в собственной монете, поэтому кошелёк с нулевым ETH не сможет вызвать контракт в Ethereum, какие бы токены в нём ни лежали. Paymaster, который сам является смарт-контрактом, это меняет, и WATS Hot Wallet — конкретный пример: он использует paymaster по ERC-4337 в Ethereum, Arbitrum, Optimism, Base, Polygon и BNB Chain и эквивалентного плательщика комиссии в Solana и TON, так что любая комиссия взимается в одном токене, ATS, а сеть под капотом по-прежнему получает свой нативный газ. Поскольку ATS — это OFT на LayerZero, один баланс покрывает все восемь сетей, так что не нужно поддерживать газовый запас в каждой из них. Это не скидка — блочное пространство стоит столько же, меняется лишь токен, которым вы за него платите.

Означает ли использование смарт-контрактов, что я отдаю контроль над своими средствами?

Нет. Вызов контракта — это вы, подписывающий инструкцию собственным ключом, и контракт может сделать лишь то, что позволяют эта подпись и уже выданные токен-одобрения, — поэтому держать одобрения узкими важнее любого значка аудита. Главное, чтобы ключ оставался вашим: WATS Hot Wallet полностью некастодиален, ключи держит пользователь, а WATS никогда не держит ключ; WATS NFC Metal Card тоже не хранит приватных ключей — он касанием аутентифицирует доступ к ключам, которые живут в приложениях WATS. Реальный риск, который вы берёте на себя, — это код контракта и выданные ему разрешения, а не кошелёк, из которого вы подписали.