Создание и восстановление смарт-аккаунтов
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 запрашивает смарт-аккаунт:
- Pali проверяет, настроена ли инфраструктура смарт-аккаунтов Pali в активной сети.
- Pali выводит следующий детерминированный дескриптор аккаунта и контрфактический адрес.
- Pali создаёт или нормализует запрошенный аутентификатор.
- Pali показывает хост dapp, метку аккаунта, тип аутентификатора и внешних владельцев ECDSA, если они указаны.
- Pali создаёт аккаунт локально и развёртывает его в сети с начальным валидатором.
- Если запрошенный валидатор отличается от начального, Pali устанавливает запрошенный валидатор и удаляет начальный через выполнение смарт-аккаунта.
- Pali ожидает подтверждения, сохраняет долговечные метаданные смарт-аккаунта и подключает аккаунт к dapp.
Если полученный адрес уже существует локально, Pali может повторно использовать этот локальный смарт-аккаунт.
Что определяет адрес?
Адрес смарт-аккаунта выводится из фабрики, реализации аккаунта, данных инициализации начального валидатора и детерминированной соли развёртывания Pali. Pali выводит соль из опорного значения кошелька и индекса аккаунта, поэтому аккаунты можно восстановить по метаданным кошелька, а не по случайному локальному состоянию.
Если пользователь потеряет локальные данные Pali

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

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