Клиент пришел со старой как этот мир проблемой: блокчейном больно пользоваться.
Что имеется в виду:
- Чтобы отправить токен адресату, необходимо раздобыть нативную валюту для оплаты газа
- Сид-фразу невозможно запомнить, поэтому ее надо куда-то записать. А потеряв ее, ваши средства теперь ничьи навсегда
В итоге, нам поставили задачу:
Создать полноценный веб3 кошелек, где новичку в блокчейне не нужно париться из-за газа и сидфраз, и он может получить доступ к user-friendly экосистеме с токенами и NFT.
В команде обсуждалось два решения:
- Уже обкатанный на практике релеер (на базе ERC-2771)
- Новый, но заманчивый Account Abstraction (ERC-4337)
На первый взгляд кажется, что лучше использовать проверенное временем решение, чем использовать стандарт, который все еще находится в драфте. Но у клиента были серьезные планы сотрудничать со сторонними DeFi протоколами, чтобы договориться о спонсировании газа пользователей, которые будут пользоваться кошельком.
Идея гениальная! Прекрасный пример win-win: протоколы оплачивают газ за пользование сервисом и получают больше юзеров из-за лучшего UX, а пользователь не делает до 4-х лишних операций, чтобы получить нативный токен сети для оплаты газа. Вместо этого, он заплатит сопоставимую сумму в этом же токене, которым оперирует.
Так же, наш клиент предусмотрел он-рамп (типа MoonPay) интеграцию, которая позволит покупать крипту на кошелек с кредитки, Apple pay и т.п.
Для всего этого relayer не подходит, так как он требует вносить изменения в смарт-контракты сервисов, с которыми мы хотим дружить. Будем откровенны — желающие адаптировать свои приложения под ещё не вышедшие кошельки в очереди не стояли.
А вот Account abstraction вообще не требовали никаких изменений на стороне других DeFi приложений. Нужно было просто подключиться к нашему решению и определить некоторые правила, что в разы проще, чем переписывание и доработка дополнительной логики.
Другой фишкой АА было упаковка нескольких транзакций одну. В то время, как одна мета-транзакция от relayer могла содержать в себе лишь одну транзакцию, АА бандлер позволял упаковать несколько пользовательских операций (UserOperations) в одну транзакцию. Это позволяет экономить затраты для потенциальных спонсоров газа.