Перейти к основному содержимому

Создание и восстановление смарт-аккаунтов

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

Локальное состояние кошелька представляет смарт-аккаунты, которыми может управлять Pali. Смарт-аккаунт может управляться passkey-валидатором, ECDSA-валидатором, составным валидатором или модулями восстановления через guardians, установленными после создания.

Устройство смарт-аккаунта и фабрики​

Система смарт-аккаунтов состоит из следующих частей:

  • Фабрика: вычисляет детерминированные адреса и развёртывает аккаунты с начальными данными модулей.
  • Смарт-аккаунт: выполняет вызовы, отслеживает установленные модули и запрашивает одобрение подписей у модулей валидаторов.
  • Валидаторы: авторизуют действия. Pali поддерживает валидаторы ECDSA, P-256 WebAuthn passkey и составные валидаторы.
  • Executors: добавляют функции аккаунта. Pali использует восстановление через guardians как модуль executor.

Параметры аккаунта в фабрике включают:

ПараметрЗначение
saltДетерминированная соль развёртывания, которую Pali выводит из опорного значения кошелька, индекса аккаунта, сети и версии аккаунта.
initialValidatorМодуль валидатора для начального развёртывания. Pali использует ECDSA-валидатор под контролем кошелька для детерминированной настройки.
initDataЗакодированные данные инициализации валидатора.

После развёртывания Pali может установить запрошенный валидатор и удалить начальный валидатор в одном пакете смарт-аккаунта. Поэтому dapp может запросить аккаунт под управлением passkey, а первоначальное развёртывание в Pali останется детерминированным.

Создание аккаунта под управлением passkey​

const smartAccount = await window.ethereum.request({
method: 'wallet_prepareSmartAccount',
params: [
{
label: 'Pali Wallet Passkey',
authenticator: { id: 'p256-webauthn' },
},
],
});

Если dapp не передаёт authenticator, Pali по умолчанию использует passkey. Передавайте запрос только с идентификатором, например { id: 'p256-webauthn' }, и позвольте Pali выбрать или создать учётные данные, контролируемые кошельком. Для внешних владельцев ECDSA по-прежнему действует описанный ниже процесс с явным подтверждением.

Создание ECDSA-смарт-аккаунта​

const smartAccount = await window.ethereum.request({
method: 'wallet_prepareSmartAccount',
params: [
{
label: 'Team account',
authenticator: {
id: 'ecdsa',
config: {
owners: ['0xOwnerAddress'],
threshold: 1,
},
},
},
],
});

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

Поведение при создании и развёртывании​

Когда dapp запрашивает смарт-аккаунт:

  1. Pali проверяет, настроена ли инфраструктура смарт-аккаунтов Pali в активной сети.
  2. Pali выводит следующий детерминированный дескриптор аккаунта и контрфактический адрес.
  3. Pali создаёт или нормализует запрошенный аутентификатор.
  4. Pali показывает хост dapp, метку аккаунта, тип аутентификатора и внешних владельцев ECDSA, если они указаны.
  5. Pali создаёт аккаунт локально и развёртывает его в сети с начальным валидатором.
  6. Если запрошенный валидатор отличается от начального, Pali устанавливает запрошенный валидатор и удаляет начальный через выполнение смарт-аккаунта.
  7. Pali ожидает подтверждения, сохраняет долговечные метаданные смарт-аккаунта и подключает аккаунт к dapp.

Если полученный адрес уже существует локально, Pali может повторно использовать этот локальный смарт-аккаунт.

Что определяет адрес?​

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

Если пользователь потеряет локальные данные Pali​

Экран настроек Pali для восстановления смарт-аккаунтов
Экран восстановления помогает вернуть доступ к смарт-аккаунту: реконструировать созданные Pali аккаунты или заменить активный валидатор через восстановление с guardians.

Если профиль браузера, хранилище расширения или локальные метаданные смарт-аккаунта потеряны, восстановление зависит от текущих модулей аккаунта:

  • Детерминированные аккаунты, созданные Pali, можно реконструировать из опорного значения кошелька, сети, индекса аккаунта и конфигурации фабрики.
  • Passkey-валидаторам по-прежнему нужны соответствующие учётные данные WebAuthn для авторизации будущих действий.
  • Восстановление через guardians может заменить активный валидатор после заданной задержки, если первоначальный способ одобрения недоступен.

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

RP ID и имя учётных данных​

Запрос подтверждения passkey в браузере или операционной системе
Для восстановления и выполнения требуется WebAuthn assertion от соответствующих учётных данных passkey.

Браузер определяет фактический RP ID для WebAuthn в источнике расширения, если процесс кошелька не задаёт RP ID. Pali обозначает общие учётные данные по умолчанию как Pali Wallet Passkey и использует запрошенную метку аккаунта для отображаемой пользователю связи с аккаунтом.