Путь деривации: что значит m/44'/0'/0'/0/0
Путь деривации (derivation path) — это адрес ключа в дереве, которое кошелёк строит из сид-фразы. Запись m/44'/0'/0'/0/0 перечисляет шаги от главного ключа до конкретного приватного ключа и его адреса. Сама фраза путь не хранит: одни и те же 12 или 24 слова по разным путям дают разные адреса, поэтому восстановленный кошелёк иногда показывает ноль. Эта статья объясняет каждое число в записи, сравнивает пути Bitcoin, Ethereum и других сетей и показывает, как увидеть их на тестовой фразе.
Из чего состоит путь m/44'/0'/0'/0/0
Слова мнемонической фразы (обычно из английского списка BIP39: русского в стандарте нет, но на сайте есть словарь списка с переводом) по BIP39 превращаются в 512-битный сид. Из сида по BIP32 получается главный ключ m, и каждый следующий шаг пути выводит дочерний ключ. Значение уровней задаёт BIP44:
| Уровень | В примере | Что означает |
|---|---|---|
m | m | главный ключ, полученный из сида |
purpose' | 44' | схема дерева: номер BIP, по которому оно построено (BIP43) |
coin_type' | 0' | монета по реестру SLIP-44: 0 — Bitcoin, 60 — Ethereum |
account' | 0' | номер аккаунта (счёта) внутри кошелька, с нуля |
change | 0 | 0 — адреса для получения, 1 — адреса для сдачи |
address_index | 0 | номер адреса: 0, 1, 2… |
Значит, m/44'/0'/0'/0/0 — первый адрес получения первого аккаунта Bitcoin, m/44'/0'/0'/0/1 — второй, m/44'/0'/0'/1/0 — первый адрес сдачи, а m/44'/0'/1'/0/0 — первый адрес второго аккаунта. Как слова превращаются в сид, рассказано в статье что такое сид-фраза.
Что значит апостроф
Апостроф отмечает усиленный (hardened) шаг: к номеру прибавляется 2³¹, так что 44' — это индекс 0x8000002C. В программах вместо апострофа пишут h или H: 44h.
Обычные шаги можно вычислить из расширенного публичного ключа родителя (xpub): так кошелёк «только для просмотра» строит адреса, не зная приватных ключей. Но BIP32 предупреждает: xpub вместе с любым приватным ключом из обычной ветки под ним раскрывает приватный ключ родителя. Поэтому уровни до аккаунта включительно усиленные — утечка ключей одного аккаунта не затрагивает главный ключ и другие аккаунты, — а change и index обычные, чтобы по xpub аккаунта можно было получать адреса.
Bitcoin: BIP44, BIP49, BIP84 и BIP86
В Bitcoin номер purpose задаёт тип адреса. Таблица показывает первые адреса для публичной тестовой фразы abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about без парольной фразы. Это официальные тестовые векторы SLIP-132 и BIP86; не отправляйте на эти адреса деньги.
| Стандарт | Путь | Тип адреса | Начало | Первый адрес |
|---|---|---|---|---|
| BIP44 | m/44'/0'/0'/0/0 | Legacy (P2PKH) | 1… | 1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA |
| BIP49 | m/49'/0'/0'/0/0 | вложенный SegWit (P2WPKH в P2SH) | 3… | 37VucYSaXLCAsxYyAPfbSi9eh4iEcbShgf |
| BIP84 | m/84'/0'/0'/0/0 | нативный SegWit (P2WPKH) | bc1q… | bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu |
| BIP86 | m/86'/0'/0'/0/0 | Taproot (P2TR) | bc1p… | bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr |
BIP49, BIP84 и BIP86 намеренно несовместимы с BIP44: кошелёк, который не поддерживает нужный стандарт, такие аккаунты просто не обнаружит. Если старые адреса начинаются с bc1q, а новый кошелёк ищет только по BIP44, баланс будет нулевым.
Ethereum: MetaMask и Ledger считают аккаунты по-разному
Тип монеты Ethereum — 60, но какой номер увеличивать для следующего аккаунта, приложения решают по-своему. MetaMask выводит все аккаунты из ветки m/44'/60'/0'/0 и меняет последнее число. Ledger Wallet (до 2025 года — Ledger Live) меняет номер аккаунта: m/44'/60'/x'/0/0. Старое приложение Ledger для Chrome выводило единственный адрес m/44'/60'/0'/0, а MyEtherWallet и MyCrypto перебирали для Ledger адреса m/44'/60'/0'/x; в MetaMask при подключении Ledger этот путь называется Legacy (MEW/MyCrypto). Адреса для той же тестовой фразы:
| Аккаунт | MetaMask | Ledger Wallet |
|---|---|---|
| первый | m/44'/60'/0'/0/0: 0x9858EfFD232B4033E47d90003D41EC34EcaEda94 | тот же путь и адрес |
| второй | m/44'/60'/0'/0/1: 0x6Fac4D18c912343BF86fa7049364Dd4E424Ab9C0 | m/44'/60'/1'/0/0: 0x78839F6054d7ed13918bAe0473BA31b1Ca9D7265 |
MetaMask при импорте фразы поддерживает только свой стандартный путь, поэтому второй и следующие аккаунты Ledger в нём не появятся.
Сети на ed25519: только усиленные шаги
Solana, TON, Stellar и некоторые другие сети используют кривую ed25519 и деривацию SLIP-10. Для ed25519 она допускает только усиленные шаги, поэтому апостроф стоит у каждого числа, а вычислить дочерние ключи по публичному ключу родителя нельзя. Кроме того, главный ключ для ed25519 вычисляется по SLIP-10 с другой константой, чем в BIP32 («ed25519 seed» вместо «Bitcoin seed»), так что одинаковый на вид путь даёт в этих сетях другие ключи. В Solana встречаются варианты m/44'/501'/0'/0' и m/44'/501'/0', а консольная утилита solana-keygen по умолчанию выводит ключ по базовому пути m/44'/501'; Phantom при импорте фразы по умолчанию берёт m/44'/501'/0'/0', а аккаунты на двух других поддерживаемых путях показывает, только если на них уже была активность. Классическая 24-словная фраза TON путей не использует вовсе: ключ из неё вычисляется по собственной схеме TON. Схемы и пути 12 сетей сравнивает статья форматы сид-фраз в разных сетях.
Таблица распространённых путей
| Сеть, приложение | Тип монеты | Путь первого ключа | Следующий аккаунт или адрес |
|---|---|---|---|
| Bitcoin, BIP84 | 0 | m/84'/0'/0'/0/0 | m/84'/0'/0'/0/1 |
| Ethereum, MetaMask | 60 | m/44'/60'/0'/0/0 | m/44'/60'/0'/0/1 |
| Ethereum, Ledger Wallet | 60 | m/44'/60'/0'/0/0 | m/44'/60'/1'/0/0 |
| Ethereum, Legacy (MEW/MyCrypto) | 60 | m/44'/60'/0'/0 | m/44'/60'/0'/1 |
| TRON, библиотека TronWeb | 195 | m/44'/195'/0'/0/0 | зависит от кошелька |
| Solana | 501 | m/44'/501'/0'/0' | m/44'/501'/1'/0' |
| TON, фраза из 12 слов | 607 | m/44'/607'/0' | m/44'/607'/1' |
| Stellar (SEP-0005) | 148 | m/44'/148'/0' | m/44'/148'/1' |
Тип монеты 1 зарезервирован за тестовыми сетями всех монет. TRON устроен как Ethereum (та же кривая secp256k1), но из-за другого типа монеты ключи у него свои, а адреса записываются в Base58 и начинаются с T.
xpub, ypub и zpub
Расширенный публичный ключ аккаунта позволяет вычислить все его адреса без приватных ключей: его импортируют в кошельки «только для просмотра». По BIP32 он записывается с префиксом xpub, но тип адресов в нём не указан, поэтому реестр SLIP-132 закрепил для Bitcoin отдельные байты версии:
| Префикс | Байты версии | Тип адресов | Стандарт |
|---|---|---|---|
| xpub | 0x0488b21e | P2PKH или P2SH (1…, 3…) | BIP44 |
| ypub | 0x049d7cb2 | P2WPKH в P2SH (3…) | BIP49 |
| zpub | 0x04b24746 | P2WPKH (bc1q…) | BIP84 |
| Ypub, Zpub | 0x0295b43f, 0x02aa7ed3 | мультиподпись: P2WSH в P2SH и P2WSH | — |
В тестовой сети им соответствуют tpub, upub и vpub. Для Taproot отдельного префикса нет: BIP86 использует обычный xpub. Отличаются только байты версии, сам ключ тот же: для тестовой фразы конвертер на этом сайте показывает ключ аккаунта BIP84 как xpub6CatWdiZ…, а кошелёк с поддержкой SLIP-132 покажет его как zpub6rFR7y4Q…. Однозначно путь и тип адреса фиксирует дескриптор (BIP380), например wpkh([отпечаток/84h/0h/0h]xpub…/0/*). Не публикуйте xpub: по нему видны все адреса и весь баланс аккаунта.
Почему восстановленный кошелёк показывает ноль
Если фраза принята, а баланс нулевой, кошелёк почти наверняка смотрит не в ту ветку дерева:
- Тип адреса. Адреса на bc1q обычно означают BIP84, на bc1p — BIP86, на 3 — BIP49. Выберите тот же тип при импорте.
- Аккаунт. По BIP44 кошелёк ищет аккаунты по порядку и останавливается на первом без транзакций, а в Ethereum номер аккаунта стоит на разных уровнях пути.
- Сеть. Адрес Ethereum одинаков во всех EVM-сетях, но балансы у них свои; у TRON и Solana собственные ветки дерева.
- Лимит в 20 адресов. По BIP44 поиск прекращается после 20 неиспользованных адресов подряд (gap limit), и более дальние адреса кошелёк сам не найдёт.
- Парольная фраза. Другая парольная фраза — другой сид и другое дерево целиком; подробнее — в статье парольная фраза BIP39.
Порядок восстановления описан в статье как восстановить кошелёк по сид-фразе. Если кошелёк не принимает саму фразу, дело не в пути: см. статью неверная сид-фраза.
Как посмотреть пути в конвертере
Конвертер сид-фразы в приватный ключ вычисляет ключи в браузере и показывает путь каждого адреса.
- Вставьте тестовую фразу (все 12 слов приведены выше) в поле «Мнемоническая фраза BIP39», парольную фразу не указывайте.
- По умолчанию выбраны Bitcoin и вкладка BIP44: в строке «Полный путь» будет
m/44'/0'/0'/0, а в первой строке таблицы адресов —m/44'/0'/0'/0/0и адрес 1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA. - Переключите вкладки BIP49, BIP84 и BIP86: меняется только purpose, а первые адреса становятся 37Vuc…, bc1qcr8… и Taproot-адрес bc1p5cyx…
- Нажмите ETH: путь станет
m/44'/60'/0'/0, а вторая строка таблицы — второй аккаунт MetaMask. - Впишите 1 в поле «Аккаунт»: первая строка покажет
m/44'/60'/1'/0/0, второй аккаунт Ledger Wallet. Список «Внешние / внутренние (сдача)» переключает change между 0 и 1. - На вкладке BIP32 путь задаётся вручную: если он заканчивается обычным числом, конвертер подставляет вместо него номер строки, так что
m/44'/60'/0'/0покажет адреса пути Legacy.
Сети на ed25519 конвертер не показывает: пути Solana, Aptos и Sui, а также путь, по которому ключи Polkadot выводит Ledger, приведены на странице генератора приватных ключей. Polkadot.js и Subkey путь BIP44 не используют: по умолчанию они получают ключ sr25519 из самой фразы. Кнопки быстрого выбора над списком монет сразу выставляют самые частые сочетания: Bitcoin BIP84, BIP86 и BIP44, Ethereum, TRON, Litecoin и Dogecoin.
Частые вопросы
Где узнать путь деривации своего кошелька?
В документации или настройках кошелька: Ledger Wallet, например, показывает путь в расширенных параметрах счёта. Если записей нет, ориентируйтесь на старый адрес: по его началу определяется стандарт Bitcoin, а для Ethereum проверьте варианты MetaMask, Ledger и Legacy.
Можно ли потерять средства, выбрав не тот путь?
Нет. Выбор пути ничего не меняет в блокчейне: кошелёк просто показывает другие, пустые адреса, а средства остаются на прежних. Вернитесь к правильному пути, и баланс появится. Риск возникает, только если принимать платежи на адреса нестандартного пути, а потом его забыть.
Нужно ли записывать путь деривации?
Путь не секретен и сам по себе доступа к средствам не даёт, поэтому его можно записать рядом с резервной копией вместе с названием кошелька, типом адреса и номерами аккаунтов. При стандартных настройках это не обязательно, при нестандартных сэкономит время при восстановлении.
Чем путь деривации отличается от парольной фразы?
Путь выбирает ветку внутри одного дерева ключей, а парольная фраза меняет сам сид и даёт совершенно другое дерево. Путь можно не скрывать, а парольную фразу нужно беречь так же, как сид-фразу.