Skip to main content
5 человек
в команде
5 месяцев
в работе
Спроектировали и разработали совместно с IOHK децентрализованное приложение на платформе Plutus. Созданный DApp — это один из первых NFT-маркетплейсов на Cardano
Узнать больше

Как абстракция аккаунтов позволяет проводить безгазовые криптотранзакции

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 проекта

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

article-logo

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

ton_results
горячее
eigenlayer
новое
Polygon_zkEVM
новое

Обзор Polygon zkEVM: принцип работы L2-решения для Ethereum

Алексей Куценко

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

Статьи

ethereum
web3
zkp
bridges_overview
новое
5_rules
новое
layer_zero
новое

Обзор и архитектура протокола LayerZero v2

Роман Ярлыков

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

Статьи

ethereum
web3
bridges
Solana
новое
TON_Mintless_Jettons
L2_Bitcoin
выбор редакции
polymarket_article

Что такое Polymarket и как работает рынок предсказаний?

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

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

Статьи

web3
business
package_solutions
выбор редакции
tapalki
выбор редакции
uma_protocol
выбор редакции
AdsGram
выбор редакции

Способ монетизировать игры в Telegram

Алексей Федин

Исполнительный директор Magnetto.pro

Статьи

web3
mobile
TON
hamster_tma
выбор редакции

Как хомяк, но для трафика: привлекаем аудиторию тапалкой

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

Бизнес-аналитик MetaLamp

Статьи

web3
dApps
mobile
dao

Что такое DAO?

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

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

Статьи

education
web3
ethereum_gas
scroll

Как работает блокчейн Scroll: технический обзор

Алексей Куценко

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

Статьи

ethereum
web3
dApps
L2
nft_stacking
выбор редакции

Понимание стейкинга NFT: механизмы и преимущества

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

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

Статьи

ethereum
web3
dApps
legendary_play
выбор редакции
payments
sharding
выбор редакции
ton
выбор редакции
bottle_wine
выбор редакции
launchpad
twa
выбор редакции
buildings
выбор редакции
anonymus

Zero-Knowledge Proofs: важный тренд в блокчейне на 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
выбор редакции
red space
выбор редакции
speed up development
myths
выбор редакции
launching
выбор редакции

Кого нанимать для успешного запуска MVP

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

Head of Sales Department

Статьи

business
startup
MVP
galaxy
magazine
spaceman
выбор редакции
coffee
investors
nft

Как мы создали первый NFT-маркетплейс на Cardano

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

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

Статьи

cardano
web3
nft
stair
выбор редакции
bridge
rocket
abstraction

Как мы нанимаем инженеров Plutus через собственную программу обучения

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

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

Статьи

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