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

Глоссарий / Адреса и ключи

Индекс ключа

Что такое индекс ключа?
Индекс ключа представляет собой число, выбираемое на каждом шаге HD-деривации, от 0 до 4 294 967 295, которое определяет, к какому дочернему ключу от родительского ключа вы попадете.

Определено в BIP-32.

Кошелек считает с помощью индексов. Каждый уровень дерева принимает 32-битное число, поэтому у одного родителя есть 4 294 967 296 возможных дочерних ключей, а вся верхняя половина этого диапазона, начиная с 2 147 483 648, зарезервирована для усиленной деривации. В повседневном использовании вы встречаете только последний индекс в пути: тот, который увеличивается каждый раз, когда вы нажимаете «Получить».

Как это работает

Индекс является единственным, что различается у соседних дочерних ключей. При деривации он сериализуется как четырехбайтовое число в порядке от старшего байта к младшему и добавляется к материалу родительского ключа перед хешированием, поэтому индекс 0 и индекс 1 дают результаты без какой-либо видимой связи друг с другом. Больше в этом шаге ничего не меняется.

Диапазон делится на две части в точке 2 147 483 648. Ниже этой границы деривация обычная, и родительского расширенного публичного ключа достаточно, чтобы вычислить дочерний публичный ключ без каких-либо секретов. На границе и выше нее деривация усиленная: в ней должен участвовать родительский приватный ключ, а одного публичного материала недостаточно. Запись скрывает арифметику: запись 84' или 84h означает индекс 2 147 483 732, то есть 84 плюс усиленное смещение.

Две записи одного и того же вызывают больше путаницы, чем следовало бы. Более старая документация и большинство экранов кошельков используют апостроф, как в m/84'/0'/0', тогда как вывод дескрипторов в Bitcoin Core предпочитает m/84h/0h/0h. Они идентичны. Буквенная форма существует потому, что апостроф внутри аргумента оболочки создает проблему с кавычками, и его вставка в bitcoin-cli ломается так, что отладка становится утомительной.

Где это видно

Последнее число в пути является индексом, с которым вы сталкиваетесь ежедневно. В m/84h/0h/0h/0/7 число 0 выбирает цепочку получения, а 7 обозначает восьмой адрес, который выдал кошелек, считая с нуля. У сдачи есть свой счетчик в цепочке 1, поэтому первый вывод сдачи совершенно нового кошелька оказывается по адресу m/84h/0h/0h/1/0, и два счетчика движутся независимо.

Последовательный счет делает восстановление возможным, и он же заставляет его не срабатывать. BIP-44 предписывает восстанавливающему кошельку перебирать вперед 20 подряд неиспользованных адресов, а затем прекращать поиск, поэтому биткоины, полученные на индексе 45 после долгого пустого участка, будут показываться как нулевой баланс, пока вы не увеличите лимит разрыва вручную. Bitcoin Core обходит эту проблему, поддерживая пул заранее полученных ключей, по умолчанию 1000, и пополняя его по мере расходования.

Обнаружение работает так же на уровень выше. Восстанавливающий кошелек проверяет счет 0', находит историю, переходит к счету 1' и останавливается на первом счете, где транзакций нет вовсе. Поэтому создание счета 5' с пустыми счетами ниже является надежным способом заставить будущее восстановление пропустить ваши биткоины.

Индекс ключа vs путь деривации

Индекс является одним числом, а путь является упорядоченным списком таких чисел. m/84h/0h/0h/0/7 содержит пять индексов, и при обычном использовании меняется только последний, потому что назначение, тип монеты, счет и цепочка остаются неизменными на протяжении всей жизни кошелька. Это различие важно, когда статья поддержки просит проверить путь деривации. Она имеет в виду фиксированный префикс, а не счетчик адресов, и сколько бы раз вы ни нажали «Получить», это не спасет баланс, который отсутствует из-за неверного префикса.

Не путать с

Часто задаваемые вопросы

Что означает апостроф после числа?

Он помечает индекс как усиленный, что прибавляет к нему 2 147 483 648. Так, 0' означает индекс 2 147 483 648, а 84' означает индекс 2 147 483 732. Некоторые программы пишут h вместо апострофа, и обе формы означают совершенно одно и то же.

Почему в восстановленном кошельке меньше адресов, чем было раньше?

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

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском