Резервное копирование и восстановление кошелька
Восстановление из фразы восстанавливает ваши средства, но не ваши записи.
В 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 must match the node's.owner_api_secret кошелька восстанавливается при следующем запуске. Его .api_secret — это учётные данные, которые
кошелёк предъявляет узлу, поэтому удаление этого файла нарушает вызовы к узлу до тех пор, пока
значение не будет скопировано обратно из узла. См. учётные данные, которые кошелёк предъявляет
узлу.
Резервное копирование
Фраза — единственное, что строго необходимо, и она выводится один раз командой 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 помечает кошелёк как требующий сканирования, поэтому этот шаг обязателен, а не опционален. До
завершения сканирования кошелёк не знает, что ему что-либо принадлежит.
Сканирование проходит по цепочке, проверяя выходы на соответствие вашим ключам. Требуется полностью
синхронизированный узел, и на mainnet процесс небыстрый. -s запускает сканирование с указанной
высоты, а не с 0:
epic-wallet scan -s <height>
Выберите высоту, равную или меньшую блока, создавшего первый выход кошелька. Любой из следующих способов даёт её:
confirmation_heightсамой ранней записи вepic-wallet txsна устройстве, на котором ещё сохранилась история.- Высота вершины цепочки на момент создания кошелька, из обозревателя блоков.
- Круглое число, заведомо меньшее любого из двух. Слишком низкое начало увеличивает время сканирования; начало выше первого выхода незаметно пропустит его, и баланс окажется неполным.
Без -s сканирование начинается с 0 — это всегда корректно и всегда наиболее медленно.
Что не восстанавливается
Восстанавливается через init -r и scan | Не восстанавливается |
|---|---|
| Все выходы (outputs), принадлежащие вашему сиду | История транзакций: кому и когда отправлено |
| Корректный баланс, доступный к трате | Метки аккаунтов — заменяются сгенерированными |
| Возможность потратить всё, чем вы владеете | Сообщения слейтов (slate), прикреплённые к прошлым переводам |
| Адреса epicbox, доказательств и Tor | Записи доказательств платежей для прошлых переводов |
Сохранённые объекты транзакций — repost не будет работать для старых переводов | |
| Любой перевод, находившийся в процессе выполнения в момент потери кошелька |
Использование одной и той же фразы восстановления на нескольких устройствах не синхронизирует
кошельки. Каждый экземпляр выводит одни и те же ключи и после сканирования против
синхронизированного узла определяет одни и те же текущие выходы и вычисляет корректный баланс.
Журнал транзакций — это состояние локальной базы данных, поэтому каждое устройство записывает только
те переводы, в которых оно участвовало, и одно устройство может показывать корректный баланс, не
имея переводов и деталей статуса, записанных на другом. scan восстанавливает состояние выходов и
баланса; слияния этих записей не выполняет.
Сканирование восстановления восстанавливает пути деривации, поэтому выходы (outputs) возвращаются в
ветку аккаунта, под которой были выведены. Метки не сохраняются: 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>
См. accounts.
Незавершённые переводы не восстанавливаются
Если перевод был частично построен в момент потери кошелька, он утрачен. Контрагент может по-прежнему хранить слейт (slate), ссылающийся на выходы, которыми вы теперь владеете, но ваша сторона не имеет записи об обмене, а состояние зарезервированных выходов находилось в утраченной базе данных.
После сканирования восстановления эти выходы снова отображаются как доступные к трате. Если контрагент позднее отправит финализированную транзакцию, построенную на их основе, подтверждение получит та транзакция, которая будет подтверждена первой, а другая станет недействительной. Согласуйте с контрагентом, какая попытка актуальна, прежде чем отправлять повторно. См. interactive transactions.
Восстановление из полной резервной копии каталога
Если вы сохранили весь каталог wallet_data, восстановите его вместо восстановления из фразы. Это вернёт
историю, метки и записи доказательств, а также средства. Подставьте архив, который вы фактически
создали в backing up; дата в имени файла — день его создания.
- 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 удаляет неподтверждённые выходы, разблокирует
заблокированные выходы и удаляет связанные с ними записи журнала транзакций.
Основание для этого — кошелёк с зарезервированными выходами, переводы по которым завершены и которые
cancel не может очистить. Это удаляет историю. Сначала попробуйте cancelling individual
transfers.