July 29, 2023

Абстракция аккаунта: прошлое, настоящее, будущее 

Перевод

Это - вольный перевод: metamask.io/news/latest/account-abstraction-past-present-future.

Дисклеймер

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

Введение

Даже в условиях бушующего медвежьего рынка мало кто сомневается в том, что криптовалюты останутся - например, такие кошельки, как MetaMask, уже могут похвастаться миллионами пользователей. Но, тем не менее, вопрос остаётся открытым: "Как привлечь к Web 3.0 следующий миллиард пользователей?".

В зависимости от того, кого вы спросите, ответы на этот вопрос будут разными. Но все согласны с некоторыми моментами, в частности, с необходимостью улучшения опыта взаимодействия пользователей с блокчейн-приложениями. Если не сделать Web 3.0 более удобным, то у людей не будет стимула переходить с Web 2.0, которым они пользуются каждый день.

"Абстракция аккаунта" - предложение, направленное на улучшение взаимодействия пользователей с Ethereum, которое становится предметом многочисленных дискуссий в криптосообществе. Однако, возможно, вы думаете: "Что именно представляет собой абстракция счета и почему она должна меня волновать?".

Эта статья призвана помочь разобраться в абстракции аккаунта, рассказав о прошлом, настоящем и будущем. Мы ответим на все вопросы, которые могут возникнуть у вас в связи с этой темой, а именно: кто, что, почему, как и когда абстрагируется (и зачем).

Краткое изложение основных тезисов

Программируемые, самоокупаемые аккаунты ("смарт-аккаунты") могут снизить трение при вводе новых пользователей в экосистему Web 3.0. Однако ограничения, накладываемые дизайном Ethereum, препятствуют широкому внедрению и использованию смарт-счетов.

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

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

Что такое абстракция аккаунта?

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

Абстракция (n): (довольно сложный) термин в информатике, который примерно означает сокрытие информации о системе или приложении, чтобы его можно было использовать, не зная о процессах, протекающих в фоновом режиме. Также определяется как "процесс сокрытия сложности системы путём предоставления интерфейса, облегчающего работу с ней".

Аккаунт (n): представление пользователя в блокчейне, которое может отправлять или получать транзакции и взаимодействовать с другими ончейн-аккаунтами. В Ethereum существует два типа счетов:

  • Внешние счета (Externally Owned Accounts, EOA);
  • Счета смарт-контрактов (они же "смарт-контракты").

2a. Аккаунты, принадлежащие внешнему владельцу (Externally Owned Accounts, EOA): Счета Ethereum, созданные с помощью программного обеспечения кошелька (например, MetaMask) и управляемые криптографической парой открытого и закрытого ключей. EOA является "активным" (он может инициировать транзакции и оплачивать газ для выполнения EVM). Однако его возможности ограничены выполнением базовых операций, таких как отправка ETH или взаимодействие с контрактами.

2b. Счета контрактов: Счета Ethereum, развернутые в виде смарт-контракта и управляемые логикой, написанной в коде (вместо закрытого ключа). Контрактный аккаунт является "пассивным": он может отправлять транзакции только в ответ на транзакцию от EOA и не может платить за газ. Однако он является программируемым и может выполнять произвольную логику в зависимости от кода, хранящегося по адресу.

Кошелёк (n): интерфейс для управления средствами на вашем аккаунте (счёте) Ethereum - принцип работы кошелька зависит от типа счета, с которым он связан.

Кошелёк на базе EOA, например MetaMask, требует приватного ключа для авторизации транзакций. В то же время кошелек смарт-контракта связан со счётом контракта и может использовать произвольную логику для авторизации транзакций (например, схему мульти-подписи).

С этими определениями разобрались, теперь можно дать определение абстракции аккаунта.

Определение абстракции аккаунта

Абстракция аккаунта - предложение по увеличению гибкости в управлении и поведении счетов Ethereum. Для этого вводятся контракты счета: специализированные смарт-контракты, которые определяют и управляют счётом Ethereum пользователя (теперь он называется смарт-аккаунтов (смарт-счётом)).

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

Итак, как же вписывается во все это понятие "абстракция"?

С точки зрения сетевого уровня "абстракция аккаунтов" означает, что детали типов счетов невидимы для протокола Ethereum. Каждый аккаунт - просто смарт-контракт, и пользователи вольны сами определять, как управлять и обслуживать отдельные аккаунты (счета).

С точки зрения пользователя "абстракция аккаунта" означает, что некоторые технические детали взаимодействия с аккаунтами Ethereum скрыты за интерфейсами более высокого уровня. Это улучшает дизайн кошельков и значительно снижает сложность использования Web 3.0 приложений (dApps).

Это пояснение необходимо, поскольку путаница в абстрагировании аккаунтов возникает из-за того, что мы не знаем (а) что абстрагируется и (б) где происходит абстрагирование.

Аккаунты не обязательно абстрагируются от пользователей (даже если они абстрагируются от протокола). У вас по-прежнему есть адрес кошелька для получения средств и ключ подписи, гарантирующий, что только вы можете расходовать свои средства.

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

С помощью абстракции аккаунта разработчики кошельков могут создавать системы, которые выполняют эти процессы в фоновом режиме и упрощают работу с Web 3.0 (TL;DR: кошельки становятся "невидимыми").

Некоторые примеры использования (о которых расскажем позже) включают: устранение необходимости хранить seed-фразы/приватные ключи, оплачивать газ за транзакции или даже самостоятельно настраивать ончейн-аккаунты.

Преимущества абстракции аккаунта

Как уже говорилось, абстракция аккаунтов устраняет большинство трений, связанных с использованием кошельков Web 3.0 и взаимодействием с dApps. Это приближает Web 3.0 к идеалу Web 2.0, где все пользователи - как начинающие, так и опытные - могут пользоваться одинаковой степенью гибкости, безопасности и простоты использования. [Прим. Menaskop: и абсолютно нарушает блокчейн философию и всю идеологию Web 3.0 соответственно].

В частности, абстракция аккаунтов имеет огромное значение для будущего самоохраны (счетов). Благодаря возможностям, предоставляемым контрактами счетов, использование Web 3.0 кошелька будет похоже на использование банковского счёта или приложения, (но) без необходимости доверять банку.

В последующих разделах коснёмся различных аспектов абстракции аккаунта и обсудим, как они улучшают опыт использования Ethereum. В частности, поговорим об абстракции подписи, абстракции комиссии и абстракции nonce.

Абстракция подписи

Сегодня для того, чтобы транзакции с вашего EOA были действительными, они должны иметь подпись, сгенерированную закрытым ключом счёта с использованием алгоритма цифровой подписи на основе эллиптической кривой (ECDSA). Это даёт большинству EOA простую модель безопасности: средства в безопасности, если закрытые ключи остаются в распоряжении пользователя.

Однако она имеет и ряд ограничений:

  • EOA, как известно, сложно защитить, тем более что злоумышленники постоянно разрабатывают новые способы компрометации закрытых ключей. В MetaMask на собственном опыте убедились, что фишинг, социальная инженерия, спуфинг, внедрение вредоносных программ и другие подобные атаки создают проблемы для безопасности пользователей в Web 3.0.
  • Самостоятельное обеспечение безопасности может показаться экстремальным видом спорта. В отличие от обычного банковского счёта, кошелек EOA невозможно "восстановить" в случае утери seed-фразы / закрытого ключа. Это создаёт проблему для начинающих пользователей, которым приходится сталкиваться с последствиями полной потери активов, хранящихся на счетах Ethereum, без каких-либо средств правовой защиты.

Абстракция подписи решает эти проблемы путём отказа от подписей ECDSA в качестве механизма авторизации по умолчанию… Вместо этого пользователям разрешается определять собственные правила авторизации кошельков для инициирования транзакций. Или, говоря иначе, можете сами определять, что означает легальность транзакции.

Реализация абстракции подписи открывает возможности для более сложных схем авторизации. Таким образом, работа с кошельком Web 3.0 будет по ощущениям похожа, если не лучше, чем работа с банковским приложением Web 2.0.

Вот некоторые примеры использования:

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

Многосторонние согласования: можете делегировать частичный контроль над своим счётом доверенным лицам, так называемым "опекунам". Хранителями могут быть друзья, члены семьи, поставщики услуг или даже отдельное устройство, принадлежащее вам (например, аппаратный кошелек). Таким образом, можно включить многофакторную аутентификацию (MFA) в стиле Web 2.0 для своего кошелька, требуя одобрения опекуна на операции по снятию средств со смарт-аккаунта.

Ротация и отзыв ключей: С помощью интеллектуальных учётных записей можно сгенерировать новый ключ подписи, если предыдущий ключ был утерян или украден. Для обеспечения дополнительной безопасности можно поручить опекунам заморозить учётную запись на время процесса восстановления и потребовать разрешения на ротацию/отмену ключей (т.е. социальное восстановление). Это аналогично тому, как можно заморозить кредитную карту в случае её утери или кражи, не теряя при этом доступа к банковскому счёту.

Доверенные сеансы: вам не нравится, что при взаимодействии с dApp в браузере необходимо подтверждать каждое действие? Отлично! Можете создать специальные "сеансовые ключи" с помощью смарт-аккаунта, чтобы dApp автоматически подписывали транзакции на определённый период. Это означает, что можете взаимодействовать с dApps, например, играть в блокчейн-игру, не досаждая всплывающими окнами кошельков.

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

Автоматические платежи: Аналогично идее сеансовых ключей, можете разрешить поставщикам услуг "снимать" средства с вашего смарт-счета (с учётом заданных правил). Это позволяет настроить повторяющиеся платежи и подписки с помощью кошелька Web 3.0. Представляете, как можно оплачивать подписку на Netflix или счета за коммунальные услуги с помощью счёта в Ethereum?

Абстракция от комиссий

В настоящее время каждая транзакция Ethereum должна иметь "плату за газ", обозначающую, сколько отправляющая EOA готова заплатить за её выполнение. Плата за газ выражается в Ether - нативном токене Ethereum. Это создаёт проблемы, особенно для новых пользователей, которым теперь придётся искать ETH перед отправкой транзакции.

Абстракция аккаунта не устраняет необходимость платить за газ, но она абстрагирует детали того, как и когда пользователи решают платить за газ (абстракция платы). Например, абстракция аккаунтов позволяет проводить "спонсируемые транзакции", когда другой счёт покрывает стоимость газа для транзакции пользователя. Некоторые преимущества спонсируемых транзакций:

Отсутствие необходимости платить за газ: Хотелось ли вам когда-нибудь оплатить комиссию за транзакции токенами ERC-20 в своём кошельке? С помощью спонсируемых транзакций можете привлечь ретранслятора с ETH для оплаты стоимости ваших транзакций и вернуть их в виде другого токена, например DAI или USDC.

Безналичные транзакции: Разработчики Dapp могут спонсировать транзакции и минимизировать трение при входе в систему для новых пользователей Ethereum. По сути, можете использовать приложения Web 3.0, ничего не зная о "газе", и пользоваться теми же возможностями, которые предоставляют приложения Web 2.0, одним щелчком мыши.

Социальные логины: dApp может развернуть контрактный кошелёк от вашего имени, решая проблему настройки кошелька перед отправкой транзакций. Что самое интересное? Кошельки могут использовать инфраструктуру аутентификации (например, Web3Auth и WebAuthn), позволяющую пользователям создавать учётные записи Web 3.0 с помощью существующих учётных данных, таких как адрес электронной почты или учётная запись Facebook/Twitter.

Абстракция Nonce

Смарт-счета на Ethereum имеют ещё одну особенность: пакетируемость транзакций. Пакетные транзакции позволяют объединить несколько операций в одну транзакцию и снизить стоимость и сложность взаимодействия с dApps. Вот почему пакетная обработка транзакций важна:

В вашем EOA хранится значение, известное как "nonce", которое показывает, сколько транзакций вы уже отправили (считайте это счётчиком транзакций). Новая транзакция должна строго увеличивать nonce на 1, чтобы считаться действительной - это правило не позволяет кому-то другому "переиграть" ту же транзакцию, чтобы украсть ваши средства (да, такое бывает).

Но здесь есть одна загвоздка. Nonce заставляет вас обрабатывать транзакции по принципу "первый пришёл - первый ушёл" (FIFO). Представьте себе, что у вас есть две транзакции (A и B) с nonce 0 и 1 соответственно. В этом случае вы отправляете транзакцию A и ждёте подтверждения (её выполнения) перед отправкой B.

Отправка B в то время, когда A ещё не выполнена, приведёт к тому, что первая будет просто отклонена, поскольку nonce окажется выше установленного диапазона (текущий nonce EOA + 1). Фактически, это одна из основных причин "застревания" транзакций при использовании кошелька.

Абстракция Nonce позволяет создавать собственные механизмы защиты от воспроизведения (вместо того, чтобы протокол Ethereum навязывал строгий порядок транзакций). Например, можно реализовать схему nonce, позволяющую обрабатывать несколько транзакций параллельно. Это позволит решить проблему забитых / застрявших транзакций и существенно улучшить взаимодействие с dApps.

При этом абстракция nonce трудно реализуема на практике и потенциально может нарушить некоторые инварианты, важные для безопасности UX, например, уникальность хэша транзакции. Именно здесь на помощь приходит пакетная обработка транзакций:

Поскольку смарт-аккаунты могут обрабатывать несколько транзакций одновременно, необходимость в сложных схемах абстракции nonce в значительной степени отпадает. Возвращаясь к предыдущему примеру: можем представить, что транзакции A и B - всего лишь части одной гипотетической операции, например обмена активами на Uniswap:

Транзакция A: одобрение контракта Uniswap для доступа к вашим токенам

Транзакция B: завершение обмена токенами.

С помощью пакетной обработки транзакций можно объединить процесс одобрения и обмена в одну транзакцию. Результат: снижение платы за газ и сокращение времени ожидания при использовании dApps. Круто, да?

Как работает абстракция аккаунта

На данный момент вы уже знаете, что абстракция аккаунтов (счетов / учётных записей) позволяет добавлять пользовательскую функциональность и политики авторизации к аккаунтам (учётным записям) пользователей. Но мы ещё не говорили о том, как всё это возможно. В этом разделе рассматриваются различные подходы к реализации абстракции в Ethereum...

Существует два общепринятых способа достижения абстракции счета: (а) позволить EOA выполнять EVM-код и (б) позволить смарт-контрактам инициировать транзакции. Таким образом, во многих предложениях по абстрагированию аккаунтов можно обнаружить, что либо EOA должны вести себя как смарт-контракты, либо контрактные счета должны вести себя как EOA.

В связи с этим, естественно, возникают вопросы:

  • "Чем именно отличаются эти подходы?"
  • "Почему важно, какой подход примем?".

Абстрагирование счетов: Подход № 1 (модернизация EOA для выполнения кода)

Предоставив EOA возможность выполнять код, можем добавить сложную функциональность к учётным записям, управляемым пользователем. Это повышает эффективность EOA и превращает их в "умные" аккаунты (счета), создавая основу для "родной" абстракции аккаунтов (счетов). Важно отметить, что такой подход позволяет пользоваться преимуществами программируемого кошелька без затрат на развертывание нового контрактного счёта.

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

Ниже приведена инфографика, показывающая различные предложения по абстракции счетов в лагере (сторонников) "сделать EOA программируемыми", а также их ключевые особенности и статус реализации:

Абстракция аккаунта: Подход № 2 (модернизация смарт-контрактов)

В этом подходе модернизируются счета контрактов, чтобы они могли одобрять транзакции и оплачивать газ (так же, как и EOA). Это предоставляет ещё один путь к достижению абстракции аккаунта за счёт внедрения "сверхмощных контрактов", которые могут действовать как EOA (т.е. контракты-счета). Кроме того, это решает насущную проблему Ethereum: отсутствие поддержки кошельков контрактов на уровне протокола.

Некоторые кошельки для смарт-контрактов существуют уже сегодня и обеспечивают многие преимущества абстракции аккаунтов. Но использование этих кошельков может быть невероятно сложным, поскольку Ethereum рассматривает смарт-контракты как "граждан второго сорта" и требует, чтобы все транзакции начинались с EOA.

Это ограничение также означает, что кошельки смарт-контрактов не обладают той надёжностью и самодостаточностью, которая присуща EOA-кошелькам, таким как MetaMask. Для контекста рассмотрим процесс создания и использования кошелька смарт-контракта:

Развернуть новый контрактный счёт

Отправка транзакций для вызова функций контракта кошелька. Проблема уже очевидна: теперь вам нужно управлять двумя кошельками. Почему? EOA (предварительно финансируемый за счёт ETH) должен покрывать расходы на развертывание кошелька и последующий вызов необходимых функций.

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

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

Но это криптовалюта, а мы любим системы без доверия.

Позволяя счетам контрактов утверждать транзакции и оплачивать GAS, абстракция аккаунтов делает процесс создания и использования кошелька смарт-контракта более доверительным. Точнее говоря, она позволяет любому, кто управляет ретранслятором, выполнять транзакции от вашего имени. Для этого достаточно подписать сообщение, разрешающее ретранслятору списать средства с баланса вашего кошелька после выполнения транзакции:

Теперь процесс использования кошелька смарт-контракта выглядит несколько иначе:

  • Развёртывание контракта кошелька? Используя рабочие процессы развёртывания, можете отправить средства на счёт контракта до его развёртывания и оплатить EOA ретранслятора за расходы на развёртывание с баланса вашего кошелька.
  • Взаимодействуете с контрактом кошелька? Подпишите оффчейн-сообщение и попросите ретранслятора выполнить вызов контракта вашего счёта. В сообщении будет содержаться указание на то, чтобы контракт счёта возместил ретранслятору стоимость газа.

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

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

В этом случае ретрансляторы (так называемые "бандлеры") могут конкурировать за выполнение транзакций смарт-счетов, что снижает риск цензуры или чрезмерной зависимости от провайдеров кошельков.

Ниже приведена инфографика, показывающая различные предложения по абстракции аккаунтов в лагере сторонников "наделить смарт-контракты возможностями EOA", а также их ключевые особенности и статус реализации:

О будущем абстракции аккаунтов

Спустя годы после того, как Виталик Бутерин впервые представил эту концепцию, до сих пор существуют разногласия по поводу того, как лучше реализовать абстракцию аккаунтов.

Например, реализация EIP-3074 и EIP-5003 позволила бы существующим EOA (в том числе пользователям MetaMask) перейти на смарт-счета. Однако эти предложения требуют проведения хард форка, что, учитывая сосредоточенность сообщества на более насущных обновлениях, пока представляется нецелесообразным.

EIP-4337, напротив, получил широкую поддержку, поскольку реализует абстракцию счетов, не требуя масштабных изменений в протоколе Ethereum.

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

Мы в MetaMask считаем, что абстракция счёта является ключевым фактором для обеспечения беспрепятственного входа в систему для новых пользователей Web 3.0. Мы также считаем, что EOA не может гарантировать принятие криптовалют ("Следующий миллиард пользователей не напишет 12 слов на бумажке", как красочно выразился исследователь Ethereum Foundation Йоав Вайс).

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

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

Используя Snaps, разработчики могут расширить функциональность кошелька MetaMask для поддержки различных вариантов использования абстракции аккаунта. От сессионных ключей до полных интеграций смарт-счетов с MetaMask - и всё это с помощью Snaps - мы видим, как разработчики решают задачу использования MetaMask для демократизации доступа к абстракции счетов для пользователей.

"Не позволяйте совершенству быть врагом добра". - Вольтер

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

Именно поэтому наша следующая статья на тему абстракции счетов будет иметь форму глубокого погружения в детали ERC-4337. Важно отметить, что мы обсудим, как разработчики Web 3.0 могут начать строить будущее абстракции аккунтов и привлекать следующие миллиарды пользователей - по одной строчке кода за раз - с помощью MetaMask…

А пока всё и

До!