Резервное копирование и восстановление кошелька
Восстановление из фразы восстанавливает ваши средства, но не ваши записи.
В Bitcoin пересканирование из сида восстанавливает полную историю транзакций, поскольку история публична и постоянно связана с вашими ключами. В Epic нет публичной истории, из которой можно было бы восстановить данные. Цепочка хранит слепые обязательства (commitments) без отправителя, получателя или читаемой суммы, поэтому пересканирование позволяет определить, какие выходы (outputs) принадлежат вам, и ничего больше о том, как они там оказались.
Что резервировать
| Элемент | Содержит | Приоритет |
|---|---|---|
| Фраза восстановления | Мастер-секрет в виде слов | Критично. Потеря без файла сида означает потерю средств |
wallet_data/wallet.seed | Тот же секрет, зашифрованный вашим паролем | Критично, но бесполезно для злоумышленника без пароля |
wallet_data/db/sqlite/epic.db | История транзакций, метки аккаунтов, сообщения слейтов, записи доказательств платежей | Важно. Не восстанавливается из других источников |
wallet_data/saved_txs/ | Сохранённые объекты транзакций | Важно, если вам когда-либо понадобится repost |
epic-wallet.toml | Ваши настройки | Удобство. Новый init восстанавливает значения по умолчанию |
Можно потерять: epic-wallet.log, wallet_tor/, .owner_api_secret, а также файлы SQLite -wal и -shm, если кошелёк не запущен.
.api_secret is the node's secret, and rarely needed.owner_api_secret кошелька восстанавливается при следующем запуске, как и отсутствующий .api_secret. .api_secret — это учётные
данные, которые кошелёк предъявляет узлу; на 4.1.0 они передаются только для поиска onion-адреса
Tor, поэтому их потеря не влечёт иных последствий. Если публикуете через Tor, скопируйте значение
узла обратно. См. учётные данные, которые кошелёк предъявляет узлу.
Резервное копирование
Фраза — единственное, что строго необходимо; она выводится один раз командой init. Чтобы отобразить
её снова:
epic-wallet recover
Команда запрашивает пароль, расшифровывает сид и выводит фразу. Ничего не записывает и не выполняет восстановление.
Для полного резервного копирования остановите кошелёк и скопируйте каталог. Обе команды ниже называют архив по текущей дате, и раздел восстановления использует то же имя:
- Linux и macOS
- Windows
# Сначала остановите все процессы listener или owner_api, чтобы SQLite не находился в процессе записи.
stamp=$(date +%F)
tar czf "$HOME/epic-wallet-backup-$stamp.tar.gz" \
-C ~/.epic/main \
wallet_data epic-wallet.toml
# Проверьте содержимое архива перед использованием.
tar tzf "$HOME/epic-wallet-backup-$stamp.tar.gz" | head
# Сначала остановите все процессы listener или owner_api, чтобы SQLite не находился в процессе записи.
$stamp = Get-Date -Format 'yyyy-MM-dd'
Compress-Archive -Path "$HOME\.epic\main\wallet_data", "$HOME\.epic\main\epic-wallet.toml" `
-DestinationPath "$HOME\epic-wallet-backup-$stamp.zip"
# Verify
Expand-Archive -Path "$HOME\epic-wallet-backup-$stamp.zip" -DestinationPath "$env:TEMP\verify" -Force
Get-ChildItem -Recurse "$env:TEMP\verify" | Select-Object -First 10
Храните фразу и архив в разных местах. Архив без пароля бесполезен; фраза сама по себе достаточна для перемещения средств. Восстановите архив в тестовый каталог заранее, до того как он понадобится, используя процедуру из раздела восстановление полной резервной копии каталога.
SQLite работает в режиме WAL. Копирование epic.db во время записи процессом кошелька может создать
архив, который восстановится в повреждённую базу данных. Сначала остановите listen и owner_api.
Восстановление из фразы
- Linux и macOS
- Windows
mkdir -p ~/restored
cd ~/restored
epic-wallet init -w -r
New-Item -ItemType Directory -Force -Path "$HOME\restored"
Set-Location "$HOME\restored"
epic-wallet init -w -r
Будет запрошена фраза, затем новый пароль. Фраза проверяется при вводе, поэтому неправильно введённое слово отклоняется до создания кошелька.
-w помещает кошелёк в текущий каталог. Это флаг команды init, не принимающий значения, поэтому
epic-wallet -w . init недопустимо. Чтобы направить последующую команду на кошелёк вне ~/.epic/<network>, либо запустите её из
этого каталога, либо передайте --current_dir <path>.
Затем пересканируйте цепочку, чтобы найти свои выходы:
epic-wallet scan
epic-wallet info
init -r помечает кошелёк как требующий сканирования, поэтому этот шаг обязателен, а не опционален. До
завершения сканирования кошелёк не знает, что ему принадлежит что-либо.
Сканирование обходит цепочку, проверяя выходы (outputs) на соответствие вашим ключам. Требуется
полностью синхронизированный узел; на mainnet процесс небыстрый. -s запускает его с указанной
высоты, а не с 0:
epic-wallet scan -s <height>
Выберите высоту, равную или меньшую блока, создавшего первый выход кошелька. Любой из следующих способов даёт её:
- Высота блока (block height) самой ранней записи в
epic-wallet txsна устройстве, у которого ещё есть история, — этоconfirmation_height. - Высота вершины цепочки на момент создания кошелька, из обозревателя блоков.
- Круглое число, заведомо меньшее любого из двух. Слишком низкое начало увеличивает время сканирования; начало выше первого выхода незаметно пропустит его, и баланс окажется неполным.
Без -s сканирование начинается с 0, что всегда корректно и всегда наиболее медленно.
Что не восстанавливается
Восстанавливается через init -r и scan | Не восстанавливается |
|---|---|
| Все выходы (outputs), принадлежащие вашему сиду | История транзакций: кому и когда отправлено |
| Корректный баланс, доступный к трате | Метки аккаунтов — заменяются сгенерированными |
| Возможность потратить всё, чем вы владеете | Сообщения слейтов (slate), прикреплённые к прошлым переводам |
| Адреса epicbox, доказательств и Tor | Записи доказательств платежей для прошлых переводов |
Хранимые объекты транзакций, поэтому repost не будет работать для старых переводов | |
| Любой перевод, находившийся в процессе выполнения в момент потери кошелька |
Использование одной и той же фразы восстановления на нескольких устройствах не синхронизирует
кошельки. Каждый экземпляр выводит одни и те же ключи и после сканирования против
синхронизированного узла определяет одни и те же текущие выходы и вычисляет корректный баланс.
Журнал транзакций — это локальное состояние базы данных, поэтому каждое устройство записывает только
те переводы, в которых оно участвовало; одно устройство может показывать корректный баланс, не имея
переводов и деталей статуса, записанных на другом. scan восстанавливает состояние выходов и баланса,
но не объединяет эти записи.
Сканирование восстановления восстанавливает пути деривации, поэтому выходы возвращаются в ветку
аккаунта, из которой они были выведены. Метки не сохраняются: default сохраняет своё имя, каждый другой
найденный путь получает метку account_1, account_2 и так далее в порядке обнаружения при сканировании (libwallet/src/internal/scan.rs:512).
Переименуйте, создав нужные метки, затем переместив средства с помощью транспорта self:
epic-wallet account # список найденного сканированием с указанием каждого пути
epic-wallet account -c savings
epic-wallet -a account_1 send -m self -d savings <amount>
См. аккаунты.
Незавершённые переводы не восстанавливаются
Если перевод был частично построен в момент потери кошелька, он утрачен. Контрагент может по-прежнему хранить слейт (slate), ссылающийся на выходы, которыми вы теперь владеете, но ваша сторона не имеет записи об обмене, а состояние зарезервированных выходов находилось в утраченной базе данных.
После сканирования восстановления эти выходы снова отображаются как доступные к трате. Если контрагент позднее отправит финализированную транзакцию, построенную на их основе, подтверждается та транзакция, которая поступит первой, а другая становится недействительной. Согласуйте с контрагентом, какая попытка является актуальной, прежде чем отправлять повторно. См. интерактивные транзакции.
Восстановление из полной резервной копии каталога
Если вы сохранили весь каталог wallet_data, восстановите его вместо восстановления из фразы. Это вернёт
историю, метки и записи доказательств платежа, а также средства. Подставьте архив, который вы
фактически создали, в раздел резервное копирование; дата в имени файла — это день его
создания.
- Linux и macOS
- Windows
stamp=2026-08-22 # дата архива, из которого выполняется восстановление
mkdir -p ~/.epic/main
tar xzf "$HOME/epic-wallet-backup-$stamp.tar.gz" -C ~/.epic/main
epic-wallet info
$stamp = '2026-08-22' # дата архива, из которого выполняется восстановление
New-Item -ItemType Directory -Force -Path "$HOME\.epic\main"
Expand-Archive -Path "$HOME\epic-wallet-backup-$stamp.zip" `
-DestinationPath "$HOME\.epic\main" -Force
epic-wallet info
Если после этого цифры расходятся с цепочкой, запустите epic-wallet scan для перестройки состояния выходов.
История при этом сохраняется.
Восстановление в каталог с существующим кошельком
CLI этого не делает. init -r по-прежнему проходит через создание кошелька, которое отказывает при
наличии файла сида (impls/src/lifecycle/default.rs:188), и флага переопределения не существует.
Сначала переместите существующий кошелёк в сторону:
- Linux и macOS
- Windows
mv ~/.epic/main/wallet_data/wallet.seed ~/.epic/main/wallet_data/wallet.seed.old
epic-wallet init -r
Move-Item "$HOME\.epic\main\wallet_data\wallet.seed" "$HOME\.epic\main\wallet_data\wallet.seed.old"
epic-wallet init -r
init without -r to "reset" a walletinit без аргументов генерирует новый сид. Если удалить wallet_data/, но сохранить epic-wallet.toml, init выполнится
и вы получите пустой кошелёк без ваших средств. Доступ к ним будет возможен только через фразу.
Смена пароля
epic-wallet change_password
Сид повторно шифруется с новым паролем. Фраза не меняется, поэтому старая резервная копия фразы остаётся действительной.
change_password записывает wallet.seed.bak перед повторным шифрованием, затем удаляет его после подтверждения нового
пароля. Передача --remove-backup сохраняет файл (src/cmd/wallet_args.rs:452). Удалите сохранённую резервную копию после того, как
убедитесь, что новый пароль работает.
scan --delete_unconfirmed является деструктивным
Plain scan выполняет пересборку. Добавление -d удаляет неподтверждённые выходы (outputs),
разблокирует заблокированные выходы и удаляет связанные с ними записи журнала транзакций.
Основание для его использования — кошелёк, содержащий зарезервированные выходы, переводы по которым
завершились неудачей и которые cancel не может очистить. Это удаляет историю. Сначала попробуйте
отменить отдельные переводы.