Опубликовано

Путь деривации: что значит m/44'/0'/0'/0/0

Путь деривации: что значит 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:

УровеньВ примереЧто означает
mmглавный ключ, полученный из сида
purpose'44'схема дерева: номер BIP, по которому оно построено (BIP43)
coin_type'0'монета по реестру SLIP-44: 0 — Bitcoin, 60 — Ethereum
account'0'номер аккаунта (счёта) внутри кошелька, с нуля
change00 — адреса для получения, 1 — адреса для сдачи
address_index0номер адреса: 0, 1, 2…
Дерево пути деривации m/44'/0'/0'/0/0: мастер-ключ m, назначение 44', тип монеты 0', счёт 0', цепочка 0 и индекс адреса 0, с соседними ветвями; усиленные уровни отмечены апострофом.
Путь деривации m/44'/0'/0'/0/0 как дерево ключей: каждый уровень выбирает один дочерний ключ, а апостроф обозначает усиленный (hardened) индекс i + 2³¹. Адреса — для тестовой фразы «abandon ×11 about».

Значит, 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; не отправляйте на эти адреса деньги.

СтандартПутьТип адресаНачалоПервый адрес
BIP44m/44'/0'/0'/0/0Legacy (P2PKH)1…1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA
BIP49m/49'/0'/0'/0/0вложенный SegWit (P2WPKH в P2SH)3…37VucYSaXLCAsxYyAPfbSi9eh4iEcbShgf
BIP84m/84'/0'/0'/0/0нативный SegWit (P2WPKH)bc1q…bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
BIP86m/86'/0'/0'/0/0Taproot (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). Адреса для той же тестовой фразы:

АккаунтMetaMaskLedger Wallet
первыйm/44'/60'/0'/0/0: 0x9858EfFD232B4033E47d90003D41EC34EcaEda94тот же путь и адрес
второйm/44'/60'/0'/0/1: 0x6Fac4D18c912343BF86fa7049364Dd4E424Ab9C0m/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, BIP840m/84'/0'/0'/0/0m/84'/0'/0'/0/1
Ethereum, MetaMask60m/44'/60'/0'/0/0m/44'/60'/0'/0/1
Ethereum, Ledger Wallet60m/44'/60'/0'/0/0m/44'/60'/1'/0/0
Ethereum, Legacy (MEW/MyCrypto)60m/44'/60'/0'/0m/44'/60'/0'/1
TRON, библиотека TronWeb195m/44'/195'/0'/0/0зависит от кошелька
Solana501m/44'/501'/0'/0'm/44'/501'/1'/0'
TON, фраза из 12 слов607m/44'/607'/0'm/44'/607'/1'
Stellar (SEP-0005)148m/44'/148'/0'm/44'/148'/1'

Тип монеты 1 зарезервирован за тестовыми сетями всех монет. TRON устроен как Ethereum (та же кривая secp256k1), но из-за другого типа монеты ключи у него свои, а адреса записываются в Base58 и начинаются с T.

xpub, ypub и zpub

Расширенный публичный ключ аккаунта позволяет вычислить все его адреса без приватных ключей: его импортируют в кошельки «только для просмотра». По BIP32 он записывается с префиксом xpub, но тип адресов в нём не указан, поэтому реестр SLIP-132 закрепил для Bitcoin отдельные байты версии:

ПрефиксБайты версииТип адресовСтандарт
xpub0x0488b21eP2PKH или P2SH (1…, 3…)BIP44
ypub0x049d7cb2P2WPKH в P2SH (3…)BIP49
zpub0x04b24746P2WPKH (bc1q…)BIP84
Ypub, Zpub0x0295b43f, 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.

Порядок восстановления описан в статье как восстановить кошелёк по сид-фразе. Если кошелёк не принимает саму фразу, дело не в пути: см. статью неверная сид-фраза.

Как посмотреть пути в конвертере

Конвертер сид-фразы в приватный ключ вычисляет ключи в браузере и показывает путь каждого адреса.

  1. Вставьте тестовую фразу (все 12 слов приведены выше) в поле «Мнемоническая фраза BIP39», парольную фразу не указывайте.
  2. По умолчанию выбраны Bitcoin и вкладка BIP44: в строке «Полный путь» будет m/44'/0'/0'/0, а в первой строке таблицы адресов — m/44'/0'/0'/0/0 и адрес 1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA.
  3. Переключите вкладки BIP49, BIP84 и BIP86: меняется только purpose, а первые адреса становятся 37Vuc…, bc1qcr8… и Taproot-адрес bc1p5cyx…
  4. Нажмите ETH: путь станет m/44'/60'/0'/0, а вторая строка таблицы — второй аккаунт MetaMask.
  5. Впишите 1 в поле «Аккаунт»: первая строка покажет m/44'/60'/1'/0/0, второй аккаунт Ledger Wallet. Список «Внешние / внутренние (сдача)» переключает change между 0 и 1.
  6. На вкладке 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.

Можно ли потерять средства, выбрав не тот путь?

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

Нужно ли записывать путь деривации?

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

Чем путь деривации отличается от парольной фразы?

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