Глоссарий / Адреса и ключи
Деривация BIP-84
- Что такое Деривация BIP-84?
- Деривация BIP-84 представляет собой схему, которая задает уровень назначения в пути BIP-32 равным 84', так что одна сид-фраза дает нативные адреса SegWit bc1q с инкапсуляцией P2WPKH из BIP-141.
Определено в BIP-84.
BIP-84 повторно использует пятиуровневую структуру BIP-44 и меняет только значение назначения. Он был присвоен 28 декабря 2017 года и ставит в соответствие каждому счету расширенный ключ zpub, байты версии которого равны 0x04b24746. Для вас он решает, найдет ли восстановленная сид-фраза ваш баланс bc1q или покажет пустой кошелек.
Как это работает
BIP-84 делает две вещи, и первая состоит в закреплении одного числа внутри пути. Ключи строятся на основе структуры, которую ввел BIP-44, записанной как m / purpose' / coin_type' / account' / change / address_index, и единственный уровень, который эта спецификация объявляет своим, представляет собой назначение, зафиксированное на 84'. Тип монеты, счет, сдача и индекс адреса сохраняют значения, которые им уже дали BIP-44 и BIP-49, а автор, Pavol Rusnak, прямо повторно использует обоснование из BIP-49, а не пересказывает его.
Вторая вещь представляет собой формат выхода. BIP-84 заимствует инкапсуляцию из BIP-141: поле scriptPubKey состоит из 0x0014, за которым следует 20-байтовый хеш публичного ключа, поле scriptSig остается пустым, а свидетель несет подпись, а затем ключ. Ничто в этом выходе не записывает, какое значение назначения его создало.
Расширенные ключи на ветви получают собственные байты версии. Публичные ключи используют 0x04b24746, что отображается как zpub, приватные ключи используют 0x04b2430c для zprv, а тестовая сеть использует 0x045f1cf6 и 0x045f18bc для vpub и vprv. Эти значения не уникальны для биткоина. SLIP-0132, реестр, который их собирает, перечисляет Groestlcoin и Syscoin под теми же 0x04b24746, потому что формат сериализации не содержит поля для типа монеты, так что zpub сообщает вам тип скрипта и ничего не говорит о цепочке, к которой он относится.
Спецификация называет себя "not backwards compatible by design" и говорит, что несовместимый кошелек "will not discover accounts at all". Это сделано намеренно. Отдельное значение назначения держит программное обеспечение, написанное до SegWit, вне счета, с которым оно плохо справилось бы, и баланс, который показывает ноль, является лучшей ошибкой, чем кошелек, который молча восстанавливается наполовину.
Где это видно
BIP-84 проявляется в трех местах, которые ваш кошелек уже показывает: путь счета m/84'/0'/0', расширенный ключ, начинающийся с zpub, и адреса получения, начинающиеся с bc1q. SLIP-0132 связывает эту строку zpub для биткоина с путем m/84'/0', и именно такую связь заявляет приложение, когда выдает вам такой ключ. Sparrow, получивший оценку 4,7 в нашем обзоре, поддерживает кошельки с одной подписью и с мультиподписью для распространенных типов скриптов, так что вы открываете именно выбранный вами счет, а не значение по умолчанию, перешедшее к вам.
Та часть документа, которую стоит позаимствовать, представляет собой блок тестовых векторов, который превращает вопрос «реализует ли этот кошелек BIP-84 так же, как все остальные» в проверку, занимающую минуту. BIP публикует результаты для мнемоники "abandon", повторенной одиннадцать раз, а затем "about":
- m/84'/0'/0'/0/0 дает bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
- m/84'/0'/0'/0/1 дает bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g
- m/84'/0'/0'/1/0 дает bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el
Загрузите эту фразу в незнакомое программное обеспечение на машине, где нет биткоинов, выберите нативный SegWit и сравните первый адрес получения и первый адрес сдачи с этими строками. Совпадение обоих означает, что реализация согласуется со стандартом и на ветви сдачи, а именно эту половину люди забывают проверить. Никогда ничего не отправляйте на эти адреса: BIP печатает соответствующие приватные ключи, а SLIP-0132 печатает ту же мнемонику, так что любой, кто прочтет любой из двух документов, сможет потратить то, что туда попадет.
Деривация BIP-84 vs P2WPKH
Деривация BIP-84 говорит, откуда пришел ключ, а P2WPKH говорит, как заблокированы биткоины. Только второе является консенсусом. Кошелек мог бы вывести ключ по пути, в котором нигде нет 84', заблокировать выход тем же шаблоном 0x0014, и полученный адрес bc1q был бы неотличим от вашего в цепочке. Поэтому «адрес BIP-84» является сокращением, а не утверждением, которое может подтвердить любой обозреватель блоков, а значение назначения вы записываете в заметке к резервной копии, потому что позже вы не сможете прочитать его обратно из блокчейна.