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

Резервное копирование и восстановление кошелька

Восстановление из фразы восстанавливает ваши средства, но не ваши записи.

В 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

Команда запрашивает пароль, расшифровывает сид и выводит фразу. Ничего не записывает и не выполняет восстановление.

Для полного резервного копирования остановите кошелёк и скопируйте каталог. Обе команды ниже называют архив по текущей дате, и раздел восстановления использует то же имя:

# Сначала остановите все процессы 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

Храните фразу и архив в разных местах. Архив без пароля бесполезен; фразы одной достаточно для перевода средств. Восстановите архив во временный каталог заранее, до того как он понадобится, используя процедуру из раздела восстановление полного резервного копирования каталога.

Copy the database only while the wallet is stopped

SQLite работает в режиме WAL. Копирование epic.db во время записи процессом кошелька может создать архив, который восстанавливается в повреждённую базу данных. Сначала остановите listen и owner_api.

Восстановление из фразы

mkdir -p ~/restored
cd ~/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 помечает кошелёк как требующий сканирования, поэтому этот шаг обязателен, а не опционален. До завершения сканирования кошелёк не знает, что ему что-либо принадлежит.

Scanning takes a while and needs a synced node

Сканирование проходит по цепочке, проверяя выходы на соответствие вашим ключам. Требуется полностью синхронизированный узел, и на 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; дата в имени файла — день его создания.

stamp=2026-08-22 # дата архива, из которого выполняется восстановление
mkdir -p ~/.epic/main
tar xzf "$HOME/epic-wallet-backup-$stamp.tar.gz" -C ~/.epic/main
epic-wallet info

Если после этого цифры расходятся с цепочкой, запустите epic-wallet scan для перестройки состояния выходов. История при этом сохраняется.

Восстановление в каталог с существующим кошельком

CLI этого не делает. init -r по-прежнему проходит через создание кошелька, которое отказывает при наличии файла сида (impls/src/lifecycle/default.rs:188), и флага переопределения не существует.

Сначала переместите существующий кошелёк в сторону:

mv ~/.epic/main/wallet_data/wallet.seed ~/.epic/main/wallet_data/wallet.seed.old
epic-wallet init -r
Never run init without -r to "reset" a wallet

init без аргументов генерирует новый сид. Если удалить 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.

Далее