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

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

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

В 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

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

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

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

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

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 удаляет неподтверждённые выходы (outputs), разблокирует заблокированные выходы и удаляет связанные с ними записи журнала транзакций.

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

Далее​