Глоссарий / Адреса и ключи
Дескриптор вывода
Другие названия: Дескриптор, Кошелек-дескриптор.
- Что такое дескриптор вывода?
- Дескриптор вывода представляет собой одну строку текста, которая указывает, какой тип скрипта, какие ключи и какую ветвь производных ключей должен использовать кошелек, а в конце стоит контрольная сумма.
Определено в BIP-380.
Дескрипторы существуют потому, что расширенный ключ сам по себе неоднозначен. Один и тот же xpub может порождать адреса legacy, вложенного SegWit, нативного SegWit или Taproot, и только функция-обертка решает этот вопрос. Bitcoin Core по умолчанию создает кошельки-дескрипторы начиная с версии 23.0, выпущенной в апреле 2022 года, а резервная копия кошелька с мультиподписью без дескриптора часто не поддается восстановлению.
Как это работает
Дескриптор представляет собой функцию, примененную к выражению ключа, за которым следуют знак решетки и восемь символов контрольной суммы. Функция называет скрипт: pkh для legacy, sh(wpkh(...)) для вложенного SegWit, wpkh для нативного SegWit, tr для Taproot и wsh(sortedmulti(2,...)) для хранилища с мультиподписью 2-из-3.
Все остальное несет выражение ключа. В квадратных скобках указывается происхождение, то есть отпечаток мастер-ключа и путь, использованный для получения этого ключа, как в [1a2b3c4d/84h/0h/0h]. Далее идет расширенный ключ, затем суффикс, например /0/*, где звездочка является подстановочным знаком, обозначающим по очереди каждый индекс адреса. Дескриптор с подстановочным знаком называется диапазонным, и запрос адресов от 0 до 999 по нему представляет собой один вызов RPC, а не тысячу импортов.
Получение и сдача представляют собой два дескриптора, а не один, поэтому кошельки импортируют их парами, оканчивающимися на /0/* и /1/. BIP-389 упорядочил это с помощью многоветвевой записи, записывая пару как /<0;1>/ в одной строке.
Контрольная сумма невелика и несет важную нагрузку. BIP-380 определяет восьмисимвольный код для текста дескриптора, рассчитанный на обнаружение того типа повреждений, которые действительно случаются с длинной строкой: переставленный символ, обрезанный при вставке фрагмент, перевод строки, вставленный почтовым клиентом. Bitcoin Core отклоняет любой дескриптор, контрольная сумма которого не совпадает, а getdescriptorinfo вычислит правильную для строки, которую вы набрали сами.
Где это встречается
Дескрипторы являются форматом резервной копии для всего, что сложнее одной сид-фразы. Sparrow, Nunchuk и Specter экспортируют дескриптор для каждого создаваемого кошелька, а Coldcard записывает дескриптор на microSD при настройке мультиподписи, чтобы эту схему можно было восстановить без исходного координирующего программного обеспечения.
Именно в Bitcoin Core они стали стандартом. Версия 0.17.0, выпущенная в октябре 2018 года, представила их для сканирования и генерации адресов; importdescriptors и listdescriptors превратили их в родной язык кошелька; и кошелек-дескриптор теперь единственный тип, который создает это программное обеспечение. Восстановление кошелька Core из дескриптора вместе с повторным сканированием является поддерживаемым способом, который переживает переустановку программного обеспечения с нуля.
Для обычного кошелька с одной подписью можно обычно обойтись без того, чтобы когда-либо увидеть дескриптор, поскольку вашей сид-фразы и стандартного пути достаточно. Для мультиподписи дескриптор является недостающей половиной резервной копии: три сид-фразы без записи о типе скрипта, порядке ключей или происхождении каждого соподписанта могут оставить вас без возможности восстановить адреса, на которых находятся ваши биткоины.
Дескриптор вывода vs расширенный ключ
Расширенный ключ является ингредиентом, а дескриптор рецептом. Xpub сообщает программному обеспечению, какие ключи существуют; дескриптор сообщает ему, что из них построить и с чего начать отсчет. Поэтому импорт xpub в два разных приложения может дать два разных списка адресов, тогда как импорт одного и того же дескриптора не может. Оба раскрывают одинаковую приватность: любой, у кого есть один из них, может перечислить вашу ветвь, поэтому дескриптор заслуживает такого же обращения, как и ключ внутри него.