Skip to main content
Improvado
Международный агрегатор рекламных кампаний
60 млн $
капитализация
22 млн $
инвестиции в серии А
Создаем стартапы на блокчейне Cardano с использованием платформы Plutus, написанной на Haskell
Узнать больше

Account abstraction: как сделать криптотранзакции безгазовыми для пользователя

wallet
Account abstraction “действительно элегантен”, поскольку не требует изменений в базовом протоколе, как другие обновления до него. Это обновление может стать одним из движущих факторов внедрения Web3 по всему миру.
Виталик Бутерин
Сооснователь Ethereum

В 2016 году Виталик впервые озвучил идею аккаунт-абстракций и спустя 7 лет, в марте 2023 года, мы увидели его реализацию в виде стандарта ERC-4337. 

Технология  многообещающая и позволяет реализовать:

  • безгазовые транзакции для пользователей,
  • оплату газа токеном (например USDT) 
  • рекуррентные платежи
  • восстановление доступа к кошельку через почту или СМС.

Все это звучало так круто, что нам даже было сложно поверить, что это будет работать как задумывалось. 

Мы потратили кучу времени, чтобы детально разобраться, как именно это все работает и чем это отличается от привычных для всех аккаунтов с сид-фразами (ЕОА). Наш Solidity разработчик Паша Найданов расписал подробнее как устроена технология в своей статье Account Abstraction: что это такое и зачем нужен криптомиру.

А в этом материале мы расскажем, как внедряется такая технология и какую задачу нашего давнего клиента она решила. 

Где мы это применили и почему было сложно

Клиент пришел со старой как этот мир проблемой: блокчейном больно пользоваться. 

Что имеется в виду:

  • Чтобы отправить токен адресату, необходимо раздобыть нативную валюту для оплаты газа
  • Сид-фразу невозможно запомнить, поэтому ее надо куда-то записать. А потеряв ее, ваши средства теперь ничьи навсегда

В итоге, нам поставили задачу:

Создать полноценный веб3 кошелек, где новичку в блокчейне не нужно париться из-за газа и сидфраз, и он может получить доступ к user-friendly экосистеме с токенами и NFT. 

В команде обсуждалось два решения:

  1. Уже обкатанный на практике релеер (на базе ERC-2771)
  2. Новый, но заманчивый Account Abstraction (ERC-4337)

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

Идея гениальная! Прекрасный пример win-win: протоколы оплачивают газ за пользование сервисом и получают больше юзеров из-за лучшего UX, а пользователь не делает до 4-х лишних операций, чтобы получить нативный токен сети для оплаты газа. Вместо этого, он заплатит сопоставимую сумму в этом же токене,  которым оперирует. 

Так же, наш клиент предусмотрел он-рамп (типа MoonPay) интеграцию, которая позволит покупать крипту на кошелек с кредитки, Apple pay и т.п.

Для всего этого relayer не подходит, так как он требует вносить изменения в смарт-контракты сервисов, с которыми мы хотим дружить. Будем откровенны — желающие адаптировать свои приложения под ещё не вышедшие кошельки в очереди не стояли. 

А вот Account abstraction вообще не требовали никаких изменений на стороне других DeFi приложений. Нужно было просто подключиться к нашему решению и определить некоторые правила, что в разы проще, чем переписывание и доработка дополнительной логики.

Другой фишкой АА было упаковка нескольких транзакций одну. В то время, как одна мета-транзакция от relayer могла содержать в себе лишь одну транзакцию, АА бандлер позволял упаковать несколько пользовательских операций (UserOperations) в одну транзакцию. Это позволяет экономить затраты для потенциальных спонсоров газа.

Что решили с сид-фразой?

Другим важным требованием было избавить клиента от риска хранения средств юзеров. Такое требование было навеяно все еще свежим в памяти кейсом FTX. 

У клиента не было в планах распоряжаться средствами пользователя, поэтому мы предложили использовать Fireblocks в качестве custody - провайдера. 

Это проверенный и надежный сервис, который будет хранить приватные ключи пользователей и по запросу предоставлять подпись транзакций.

Вот несколько причин, почему мы выбрали Fireblocks:

  • Разделение ключей: Вместо того чтобы создавать один целостный ключ, MPC (Multi-Party Computation) генерирует несколько частей ключа. Каждая часть ключа хранится отдельно и безопасно.
  • Управление транзакциями: Когда нужно совершить транзакцию, все стороны (например, разные модули вашего сервиса) должны дать свое согласие. Это делается путем объединения их отдельных частей ключа, но без их полного раскрытия.
  • Безопасность: Приватный ключ никогда не собирается в одном месте полностью. Даже если злоумышленник получит доступ к одной части ключа, он не сможет использовать ее, не имея остальных частей.
  • Гибкость и контроль: MPC кошельки позволяют настраивать правила и политики для транзакций, что дает дополнительный контроль над средствами.

Убедившись, что у нас есть все ресурсы и инструменты, чтобы решить поставленные задачи, мы приступили к разработке!

Разработка 

Для того чтобы все работало, нужно было поднимать свой сервис (Bundler) для переупаковки привычных транзакций и контракты (кошелек, фабрика кошельков, paymaster и т.д.). Нужно было решить: делаем все с нуля или пользуемся услугами поставщика (account provider).

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

Решили обратиться к провайдерам. Было несколько вариантов и отличались они в первую очередь тем, кто и что успел реализовать. Например, ZeroDev на тот момент поддерживала оплату газа только USDT и PEPE, чего нашему проекты явно было не достаточно. 

Альтернативой было решение Alchemy, который как раз начали разработку своего бандлера и у которого были партнёрские отношения с нашим клиентом. К тому же, Alchemy очень уважаемый бренд в веб3 и выбор пал на них. 

Мы были одними из первых, кто начал работу с ними, поэтому набивали все шишки вместе с их командой.

Больше всего вопросов вызывала документация. Это был набор step-by-step туториалов. Любой вопрос в сторону — нужно идти копаться в довольно замысловатых исходниках.  Также процесс тормозило то, что некоторые фичи, такие как webhooks notification, работали не по документации. GraphQL переменные можно было выставить, но в самом запросе они не подтягивались на стороне Alchemy. По итогу это решалось только костылями, т.к. команда Alchemy не смогла помочь с этим вопросом. Еще, подход Alchemy базируется на переиспользовании других продуктов компании и жестко завязывает проект на их инфраструктуру. Клиенту было важно, чтобы продукт не был зависимым только от Alchemy. Задача оказалась сложной, но очень важной, ведь на кону устойчивость всего проекта. Тем не менее, мы это сделали за приемлемые сроки и теперь АА провайдер в приложении легко заменяемый. В итоге, несмотря на многие трудности, я очень доволен нашим взаимодействием с командой Alchemy, от работы с ними остались только позитивные впечатления. В какой-то момент у нас появились общие чаты и звонки с командой Alchemy. Мы давали очень много обратной связи по их решению, а их техническая команда довольно быстро принимала наши рекомендации и обновляла свой продукт. Мы бок о бок работали над внедрением технологии и поучаствовали во многих улучшениях.
Антон Корпусенко
Backend Lead проекта

Итоги работы

Мы справились за 6 недель. И это включая исследования, огромное количество коммуникаций с командой провайдера и другими сервисами. Настроив инфраструктуру для АА мы передали код в руки инхаус команды, а они занялись фронтендом, подключением он-рамп сервиса и другими фичами.

Над проектом трудились два Node.js разработчика фулл-тайм. Так же был тех лид, который проводил код-ревью и прорабатывал системный дизайн сервиса. 

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

Приятным бонусом и плюсом в карму было поработать с Alchemy и внести вклад в продукт, которым, на наш взгляд, будут пользоваться миллионы людей. 

Теперь у команды MetaLamp есть практически коробочное решение по имплементации АА в любой кошелек или dApp и сделать жизнь пользователей этих приложений легче. 

В конце концов, мы реализовали все фичи, которые ждал клиент, не уходя в тотальную централизацию и не храня ни одного приватника пользователя. Пользователи проекта получили возможность избежать все традиционные издержки web3 (заботы о сид-фразе, оплату газа и пр.), сохранив при этом множество преимуществ и получив удобное окно в криптовалютный мир.
Антон Корпусенко
Backend Lead проекта

Подписывайтесь на нашу еженедельную рассылку, чтобы получать самые интересные материалы на свою почту. В рассылку мы не вставляем рекламу, только материалы Журнала :)

Больше статей о web3

sharding
выбор редакции
ton
bottle_wine
выбор редакции
Зачем вину блокчейн: как токенизируют премиальный алкоголь

Елизавета Черная

Редактор Бренд-медиа

Статьи

web3
nft
business
launchpad
twa
Тренды блокчейна и криптоиндустрии 2024: Telegram Mini Apps (TMA)

Елизавета Черная

Редактор Бренд-медиа

Статьи

web3
buildings
anonymus
выбор редакции
Zero-knowledge proof: один из трендов 2024 в блокчейне

Евгений Биктимиров

Венчурный аналитик

Статьи

ethereum
web3
dApps
cpay
выбор редакции
AA zksync
zero knowledge proofs
выбор редакции
stock market chart
выбор редакции
planets
fundraising
выбор редакции
cto
wallet
tokens
выбор редакции
rocket computer
выбор редакции
Как создать дизайн для MVP стартапа за 7 дней

Юлия Черепанова

Head of Design Office

Статьи

startup
MVP
design
nft
AI
crypto wallets
выбор редакции
Account Abstraction: что это такое и зачем нужно криптомиру

Павел Найданов

Solidity разработчик

Статьи

ethereum
web3
business
red space
выбор редакции
speed up development
myths
выбор редакции
Мифы о разработке блокчейн продуктов

Николай Бордуненко

Project manager at MetaLamp

Статьи

web3
dApps
startup
launching
выбор редакции
Кого нужно нанимать в команду для запуска MVP?

Алексей Сухарев

Head of Sales Department

Статьи

business
startup
MVP
galaxy
magazine
spaceman
выбор редакции
coffee
investors
nft
Первый NFT marketplace на Cardano

Станислав Жданович

Haskell разработчик

Статьи

cardano
web3
nft
stair
выбор редакции
bridge
rocket
abstraction
Как мы нанимаем Plutus инженеров через собственную программу обучения

Светлана Дульцева

Супервизор программы обучения

Статьи

education
cardano
web3
mountains
blockchain
salary
salary increase
app
developer with books
keyboard
abstract