ЗНАНИЯ БЕЗ ЛИШНЕГО ШУМА

Абстракция аккаунта Ethereum: что меняется в кошельке с ERC-4337

UserOperation вместо транзакции, пакет от бандлера и оплата газа пеймастером: на конкретном примере — что меняется в кошельке Ethereum с абстракцией аккаунта и ERC-4337.

Латунный ключ лежит рядом с полупрозрачной карточкой со светящимся узором дорожек — переход от одного ключа к программируемому аккаунту

Абстракция аккаунта не меняет то, как Ethereum исполняет транзакции. Она меняет сам кошелёк: вместо аккаунта на одном приватном ключе появляется контракт — смарт-аккаунт со своими правилами доступа, а заявка пользователя доходит до сети не напрямую, а через посредников. Ниже разберём, что из этого следует на практике: заявку — UserOperation, сборку в пакет и отдельного плательщика газа, на примере одной обменной операции.

От одного ключа к программе

Обычный аккаунт Ethereum (EOA) — это пара «приватный ключ и адрес». Ключ решает всё: подписывает транзакцию, платит газ с баланса ETH, действует в одиночку. Потеряли ключ — потеряли аккаунт, и заменить логику доступа нельзя: протокол понимает только стандартную подпись.

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

  • проверка подписи настраивается: один ключ, пороговая схема «два из трёх», ключи устройства (passkeys) — зависит от конкретной реализации;
  • собственные ограничения: например, дневной лимит трат или запрет вызывать незнакомые контракты;
  • восстановление доступа через хранителей вместо единственной сид-фразы.

Сеть ничего об этих правилах не знает: в блок попадают обычные транзакции, вся новая логика живёт в коде конкретного кошелька. Стандарт ERC-4337 описывает, как связать такие контракты с сетью через общую точку входа, не трогая ядро протокола.

UserOperation — заявка, а не транзакция

В классической схеме вы подписываете транзакцию, и она уходит в сеть как есть: для цепочки транзакция — подписанная инструкция от аккаунта, и ничего другого не существует. В абстракции вы подписываете UserOperation — структуру с адресом отправителя, данными вызова, лимитами газа и привычными полями maxFeePerGas и maxPriorityFeePerGas. Это заявка о желаемом действии: напрямую в блок она не попадёт.

Дальше работает цепочка из трёх шагов:

  1. Кошелёк помещает UserOperation в отдельный пул заявок.
  2. Бандлер забирает оттуда несколько операций разных пользователей и упаковывает их в одну обычную транзакцию к контракту EntryPoint.
  3. EntryPoint проверяет каждую операцию через код её кошелька и выполняет нужные вызовы.

Снаружи блокчейн видит одну транзакцию от адреса бандлера. Новой механики в самом протоколе не появилось — она вся на уровне контрактов.

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

Пример: approve, обмен и оплата в трёх отдельных частях

Знакомый сценарий: перед обменом токена кошелёк сначала просит подписать approve — разрешение контракту биржи тратить ваш токен, и только потом сам обмен. Две транзакции, два подтверждения, газ в ETH за каждую. Если approve прошло, а обмен сорвался, разрешение остаётся висеть без дела.

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

Операция. Одна UserOperation с вызовом executeBatch: внутри два вызова — approve на нужный объём и обмен. Подтверждение одно. Если второй вызов не проходит, откатывается вся операция вместе с approve — так устроена стандартная схема; конкретная реализация кошелька может обрабатывать ошибки по-своему.

Пакет. Бандлер собирает все шесть заявок в одну транзакцию к EntryPoint. Снаружи это один вызов, внутри EntryPoint разбирает операции по очереди: проверяет подпись каждой через код её кошелька, берёт оплату газа, исполняет вызовы. Ваша операция проверяется независимо от соседних.

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

Кто платит за газ: paymaster

У обычного аккаунта плата привязана к отправителю: нет ETH — нет транзакции, даже если вы переводите токен. Смарт-аккаунт отделяет плательщика: paymaster — контракт, который заявляет «эту операцию оплачу я», и EntryPoint списывает ETH с его депозита, а не с вашего.

Зачем это сервисам: приложение может спонсировать первые действия новичка, которому нечем платить за газ, или принимать компенсацию токенами. Граница здесь такая: протокол принимает оплату только в ETH; берёт ли paymaster с вас возмещение и в чём — его собственные правила. Кто-то спонсирует целиком, кто-то берёт наценку в токене, у кого-то лимиты по адресам контрактов. Это политика сервиса, а не свойство сети.

Тарификация при этом прежняя: газ меряется в единицах, базовая плата сгорает, чаевые получает тот, чья транзакция попала в блок, — здесь это бандлер. Поля maxFeePerGas и maxPriorityFeePerGas в UserOperation значат то же, что и в обычной транзакции; чем различаются max fee и priority fee в Ethereum — тема отдельного разбора. Сколько газ стоит в деньгах, зависит от курса ETH — прикинуть сумму можно на странице курса Ethereum.

Что это даёт кошельку на практике

  • Одна подпись вместо цепочки: approve плюс обмен, серия переводов на несколько адресов — все вызовы в одной операции.
  • Газ без ETH на балансе, если операцию спонсирует paymaster.
  • Гибкие правила доступа: ключи устройства, пороговые схемы, хранители для восстановления.
  • Адрес можно рассчитать до первого действия: смарт-аккаунт разворачивается фабрикой в момент первой операции, а не раньше.

При этом адрес остаётся адресом конкретной сети: одинаковый контрактный адрес в разных сетях не делает балансы общими, об этом разобрано в материале про chain ID Ethereum.

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

Что осталось прежним и на что смотреть

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

Нюансы, которые стоит знать заранее:

  • код кошелька-контракта нельзя переписать по желанию после развёртывания — ошибка в реализации остаётся с аккаунтом;
  • часть сервисов проверяет подписи по схеме обычных ключей и не понимает контрактные подписи — совместимость лучше проверять заранее;
  • механика абстракции аккаунта на разных сетях может отличаться от ERC-4337 — сверяйтесь с документацией конкретной сети и кошелька.

Итого: Ethereum исполняет транзакции, как раньше. Абстракция аккаунта меняет кошелёк: операция, пакет и плательщик разделяются, доступ превращается в программу, а газ может платить кто-то другой. Прежними остаются газ, комиссии в ETH и ответственность за каждую подпись.

Поиск по сайту