«Я импортировал сид-фразу, а баланс нулевой»: пути деривации простыми словами

·5 мин. чтения·Автор: SSP Editorial Team
Обложка SSP Academy: сид импортирован, баланс нулевой - пути деривации

«Я импортировал сид-фразу, а баланс нулевой»: что такое пути деривации

Вы вводите свои двенадцать или двадцать четыре слова в новый кошелёк, импорт проходит успешно, а на балансе ноль. Момент неприятный, но в большинстве случаев ничего не потеряно. Слова верные — новый кошелёк просто ищет средства в другом месте.

В этом руководстве объясняется, почему так происходит, как найти, где находятся ваши монеты, и почему сид-фраза SSP сама по себе ведёт себя иначе.

Одна сид-фраза — много кошельков

Фраза восстановления не хранит адреса. Из неё получается мастер-ключ, а от мастер-ключа кошелёк проходит по пути деривации — маршруту по дереву ключей — чтобы дойти до каждого адреса. Измените любой шаг маршрута, и вы попадёте в другой, совершенно корректный и обычно пустой набор адресов. Никакой ошибки не появится, потому что ничего неправильного не произошло.

Путь выглядит так:

m / purpose' / coin_type' / account' / change / index

purpose задаёт стандарт, coin_type — блокчейн, account разделяет счета, change отделяет адреса для получения (0) от адресов сдачи (1), а index нумерует адреса по возрастанию начиная с 0. Подробнее о дереве рассказывает статья о BIP-48.

Обычные причины

Если после импорта баланс нулевой, причина почти всегда в одном из следующих пунктов.

Тип адреса (Bitcoin). Одна и та же сид-фраза даёт четыре разных семейства биткоин-адресов:

  • BIP-44, m/44'/0'/0' — устаревшие (legacy) адреса, начинающиеся с 1
  • BIP-49, m/49'/0'/0' — обёрнутый SegWit, начинается с 3
  • BIP-84, m/84'/0'/0' — нативный SegWit, начинается с bc1q
  • BIP-86, m/86'/0'/0' — Taproot, начинается с bc1p

Если старый кошелёк использовал нативный SegWit, а новый по умолчанию работает с legacy, вы ничего не увидите. Какой вариант выбрать, подскажет префикс одного из старых адресов для получения.

Вариант Ethereum. Большинство Ethereum-кошельков используют m/44'/60'/0'/0/i, увеличивая последнее число для каждого нового адреса. Ledger Live вместо этого увеличивает уровень счёта: m/44'/60'/i'/0/0. Самый первый адрес у обоих совпадает, поэтому расхождение часто остаётся незамеченным, пока вы не начнёте искать второй или третий адрес.

Парольная фраза. Парольная фраза BIP-39 («25-е слово») превращает ту же сид-фразу в совершенно отдельный кошелёк. Если её не ввести или ошибиться хотя бы в одном символе, откроется другой, пустой кошелёк — без всякого предупреждения. В руководстве о плюсах и минусах парольной фразы объясняется, почему это одновременно и сила этой функции, и её опасность.

Индекс счёта. Если в старом кошельке вы пользовались «Счётом 2», ваши средства находятся под account' = 1, а не 0. Многие кошельки восстанавливают только первый счёт, пока вы не добавите остальные.

Лимит разрыва (gap limit). Кошелёк не может проверять индексы бесконечно, поэтому он сканирует адреса по порядку и останавливается после серии неиспользованных — по общепринятому соглашению после 20. Если вы когда-то выдали адрес №35, а адреса с №15 по №34 так и остались неиспользованными, стандартное сканирование остановится раньше. Увеличение лимита разрыва в настройках кошелька, если такая опция есть, обычно помогает найти недостающие монеты.

Как спокойно найти причину

  1. Не паникуйте и ничего не переводите. Нулевой баланс после импорта почти всегда означает вопрос пути, а не кражу.
  2. Найдите один адрес, на котором точно были средства — в старой квитанции, истории выводов с биржи или собственных заметках. Проверьте его в обозревателе блоков, чтобы убедиться, что монеты на месте.
  3. Обратите внимание на формат. Префикс (1, 3, bc1q, bc1p, 0x) указывает на семейство адресов; затем выберите такое же в новом кошельке.
  4. Выясните, какой кошелёк создал сид-фразу — в его документации указаны используемые пути.
  5. Пробуйте индексы счетов, вариант Ledger и лимит разрыва по одному, сравнивая адреса с тем, который вам известен.
  6. Никогда не вводите сид-фразу на сайте, который обещает «найти» ваши средства. Пользуйтесь только проверенными кошельками, способными работать офлайн.

Почему одна сид-фраза SSP показывает пустой кошелёк

SSP — это мультиподписной кошелёк 2-из-2, и это полностью меняет картину. У SSP Wallet в браузере и у SSP Key на телефоне своя сид-фраза. В коде оба получают свои ключи по BIP-48 — m/48'/coin'/0'/script' — а для Bitcoin тип скрипта — нативный SegWit-мультиподпись (P2WSH), так что счёт находится по пути m/48'/0'/0'/2'. Каждый адрес SSP затем строится из двух публичных ключей, по одному с каждой стороны, объединённых в скрипт 2-из-2. Хранилища EVM и Solana точно так же принимают на вход оба ключа.

Поэтому если импортировать сид-фразу SSP Wallet в обычный кошелёк с одной подписью, он получит адреса с одним ключом, которые SSP никогда не использовал. Они будут пустыми, и это ожидаемо. Ваши монеты находятся на мультиподписных адресах, которые невозможно восстановить из одной сид-фразы: кошельку нужен публичный ключ другой стороны даже для того, чтобы узнать адрес, и обе подписи — чтобы потратить с него средства.

Восстановить SSP можно, только восстановив обе половины в SSP. Восстановите SSP Wallet из его сид-фразы, затем синхронизируйте его с SSP Key, чтобы кошелёк снова получил публичные данные ключа. Если потерян только браузер, SSP Key может вернуть его без сид-фразы — см. восстановление SSP после потери браузера. В статье Восстановление: основы описано, что нужно в каждом сценарии.

Одна особенность SSP, касающаяся сканирования адресов: SSP Wallet не использует сканирование с лимитом разрыва. В каждом блокчейне хранятся добавленные вами адреса — до 20 на блокчейн, — создаваемые по порядку начиная с индекса 0. Если после восстановления не хватает адреса, которым вы пользовались раньше, повторное добавление адресов заново создаст те же адреса в том же порядке.

Честный итог

Сид-фраза — это ключ к дереву, а не к единственному списку адресов. Тип адреса, путь монеты, парольная фраза, индекс счёта и лимит разрыва определяют, на какую ветку смотрит кошелёк, и нулевой баланс после импорта обычно означает не ту ветку, а не пропавшие монеты.

В SSP одна сид-фраза никогда не является всем кошельком. Ваши средства находятся на адресах 2-из-2, построенных из SSP Wallet и SSP Key вместе, поэтому восстановление означает восстановление обеих половин внутри SSP, а не импорт одной сид-фразы куда-то ещё.

Поделиться статьёй

Похожие статьи