Атомарность в блокчейне: принцип «все или ничего»

Атомарность в блокчейне: принцип «все или ничего»

Редакция не дает инвестиционных советов, материал опубликован исключительно в ознакомительных целях. Криптовалюта — это волатильный актив, который может привести к финансовым убыткам.

Атомарность — принцип «все или ничего» в пределах одной транзакции. Пока виртуальная машина Ethereum выполняет ее команды, изменения не считаются окончательными. Необработанный «revert», то есть команда отмены, возвращает состояние к моменту перед началом операции, пишет РБК Крипто.

Что именно отменяется

Контракт может получить USDC пользователя, обменять их на ETH и отправить ETH в другой протокол. Если последний шаг завершается необработанной ошибкой, предыдущие изменения тоже исчезают.

Восстанавливаются балансы токенов и записи контрактов. Не сохраняются события — служебные сообщения, по которым приложения отслеживают действия в сети. Если внутри операции создавался новый контракт, его также не будет в итоговом состоянии.

Сама транзакция при этом остается в блокчейне. В квитанции — записи о результате выполнения — поле status будет равно 0. Значение 1 означает успех.

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

Почему комиссия все равно списывается

Газ — единица измерения вычислительной работы в Ethereum. До ошибки контракт мог выполнить тысячи команд, прочитать данные и вызвать другие контракты. Узлы уже проделали эту работу, поэтому она оплачивается независимо от результата.

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

Ошибка внутри вызова не всегда отменяет все

Контракт может вызвать другой контракт, получить сообщение об ошибке и продолжить выполнение. Solidity позволяет явно обрабатывать такие сбои. Низкоуровневый вызов также может вернуть информацию о неудаче вместо автоматической остановки всей внешней операции.

Так работает Universal Router от Uniswap — контракт, который собирает несколько обменов и других действий в одну транзакцию. Для отдельной команды можно разрешить продолжение после сбоя. Остальные шаги тогда выполнятся.

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

Как это используют финансовые приложения

Децентрализованные финансовые сервисы часто объединяют несколько действий: обмен, погашение долга, изменение залога, вложение полученного актива. Все это можно выполнить одним пакетом.

Флеш-кредиты — один из самых наглядных примеров. В Aave V3 пользователь может получить актив без обычного предварительного залога, использовать его внутри транзакции и до ее завершения вернуть заем вместе с комиссией.

Если денег для возврата не хватает, транзакция отменяется.Так можно взять ликвидность, провести арбитраж между площадками и вернуть заем в одной операции. Если сделка оказалась убыточной, непогашенного кредита после блока не останется. Пользователь потеряет только комиссию сети.

Между сетями единого отката нет

Одна транзакция Ethereum работает с состоянием одной сети. Межсетевой перевод уже состоит из нескольких самостоятельных действий.

CCTP (Cross-Chain Transfer Protocol — протокол межсетевого переноса) компании Circle переносит USDC через сжигание и выпуск. Монеты сначала уничтожаются в исходной сети. Затем Circle подписывает подтверждение этого события, после чего такой же объем USDC можно выпустить в сети назначения.

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

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

Неудачная операция поэтому не всегда означает, что «ничего не произошло». В Ethereum при status = 0 отменяются изменения контрактов и балансов, но сама транзакция остается в истории, ее порядковый номер использован, а вычисления оплачены. В межсетевой операции часть предыдущих действий может быть уже окончательной.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Bitcoin

Fidelity: Медвежья фаза биткоина может продолжиться до ноября

Несмотря на августовское ралли первой криптовалюты, говорить о завершении медвежьего рынка пока рано. Аналитики Fidelity допустили, что дно могло сформироваться в июле, но при сохранении исторической цикличности новый минимум возможен примерно в ноябре. Новое дно ближе к концу года Предыдущий минимум медвежьего рынка сформировался в ноябре 2022 года, отметили специалисты. Если четырехлетняя закономерность сохранится, следующий […]

Читать дальше
Bitcoin

OpenAI представляет GPT-6 Astra: шаг к AGI

AGI — искусственный общий интеллект (ИОИ). Это система, которая справляется с умственными задачами на уровне человека. Долгое время такое казалось фантастикой: подобное показывали разве что в кино. Теперь OpenAI выпустила GPT-6 Astra и прямо заговорила об «эре AGI» — правда, официально называть модель искусственным общим интеллектом компания все же не спешит. В теории ИОИ читает […]

Читать дальше
Bitcoin

Биткоин и золото упали на сильных данных по занятости в США

Биткоин (BTC) и золото резко снизились в считанные минуты после публикации июньского отчета по занятости в США. В августе число новых рабочих мест оказалось почти втрое выше ожиданий аналитиков. Эти данные усилили ожидания повышения ставки Федеральной резервной системы (ФРС) США в сентябре. На фоне недели роста на ставках неизменности, обе активы перешли к падению. Занятость […]

Читать дальше