Аккаунты
Аккаунт — это метка, привязанная к одному пути деривации BIP32 внутри единственного сида кошелька.
Кошелёк хранит столько аккаунтов, сколько вы создадите; один с именем default существует с момента
инициализации кошелька.
Запись состоит из двух полей: метки и родительского пути деривации (libwallet/src/types.rs:992). Метка является ключом
хранения (impls/src/backends/lmdb.rs:823), поэтому после создания она неизменна. Всё, что кошелёк хранит о монетах,
индексируется по пути.
Что входит в аккаунт
| Относится к одному аккаунту | Общее для всего кошелька |
|---|---|
| Выходы и вычисленный из них баланс | Файл сида и фраза восстановления |
| Записи лога транзакций, нумерация с 0 в каждом аккаунте | Пароль |
| Следующий индекс дочерней деривации | Финализированные транзакции в saved_txs/ |
| Последняя подтверждённая высота | Кэш слейтов (slate) в процессе обработки |
| Адреса epicbox и доказательства платежа | Высота последнего просканированного блока |
Сводка баланса, список выходов (outputs) и список транзакций — всё это читается из одного аккаунта
(libwallet/src/internal/updater.rs:479). Идентификаторы журнала транзакций начинаются с 0 для каждого аккаунта (impls/src/backends/lmdb.rs:721), поэтому
идентификатор уникален только внутри аккаунта, которому он принадлежит.
epic-wallet address выводит идентификаторы одного аккаунта, и у каждого аккаунта есть свой (controller/src/command.rs:1360). См.
addresses.
Деривация
default — это идентификатор глубины 2, у которого все дочерние индексы равны нулю. Аккаунт n берёт
наибольший существующий первый индекс и прибавляет единицу (libwallet/src/internal/keys.rs:81), поэтому пути выделяются в порядке
создания и никогда не используются повторно.
Метод accounts возвращает метку и идентификатор пути в виде hex: один байт глубины, за которым следуют
четыре дочерних индекса в формате big-endian:
[
{
"label": "default",
"path": "0200000000000000000000000000000000"
}
]
Снято с кошелька, работающего на 4.0.0, 2026-08-26. Аккаунт, созданный вторым, возвращает
0200000001000000000000000000000000
(api/src/owner_rpc_s.rs:99).
Под каждым путём аккаунта располагаются две ветви. Ключи выходов (outputs) — m/<n>/0/<index>, ключи адресов —
m/<n>/1/<index>, хешированные через blake2b в секрет (secret) secp256k1 (libwallet/src/address.rs:31). Инструмент, владеющий сидом,
может вывести оба для любого аккаунта без базы данных кошелька. Метка — единственное, что хранится
только в базе данных.
Из командной строки
epic-wallet account # вывести все метки с путями деривации
epic-wallet account -c savings # создать один
epic-wallet -a savings info # выполнить любую команду для него
-a по умолчанию равно default (src/cmd/wallet_args.rs:81) и вступает в силу при открытии кошелька, поэтому выбирает
аккаунт для данного вызова. Листинг выводит два столбца: имя и родительский путь деривации BIP-32
(controller/src/display.rs:431).
Какой аккаунт использует перевод
Отправка тратит средства из аккаунта, выбранного -a. В Owner API src_acct_name в InitTxArgs задаёт его для
одного вызова, а метка, отсутствующая в accounts, разрешается в активный аккаунт (libwallet/src/api_impl/owner.rs:383). Передавайте
метку, которую вернул метод accounts.
Получение через file или http зачисляет средства на аккаунт, выбранный -a. Foreign API
принимает его как dest_acct_name в receive_tx.
Получение через epicbox зачисляет средства на аккаунт, который был активен в момент открытия
кошелька слушателем (impls/src/adapters/epicbox.rs:513). Этот слушатель подписывается с адресом данного аккаунта, поэтому один
процесс обслуживает один аккаунт.
Перемещение средств между двумя аккаунтами одного кошелька использует транспорт self, где -d
задаёт аккаунт назначения:
epic-wallet -a savings send -m self -d default 1.5
См. transports.
Обновление и сканирование
refresh_from_node обновляет активный аккаунт (libwallet/src/internal/updater.rs:245). scan обходит все аккаунты, поскольку восстанавливает выходы
(outputs) по пути деривации, который несёт каждый из них (libwallet/src/internal/scan.rs:376). Курсор сканирования является общим
для всего кошелька, тогда как последняя подтверждённая высота блока хранится отдельно для каждого
аккаунта; после сканирования высота каждого аккаунта устанавливается по его собственным выходам.
После восстановления
Кошелёк, восстановленный из фразы, восстанавливает пути деривации, но не метки. default сохраняет своё
имя, а каждый другой обнаруженный путь получает метку account_1, account_2 и так далее в порядке обнаружения
(libwallet/src/internal/scan.rs:512). Средства попадают в ту ветвь, из которой они были выведены.
См. what recovery does not bring back.