Кошельки

Bitcoin descriptors: как кошелёк описывает адреса и условия траты

Bitcoin descriptor записывает тип выходного скрипта, ключи и пути деривации, из которых кошелёк строит адреса. Разбираем checksum, ranged-дескрипторы и отличие от резервной копии секрета.

Bitcoin descriptors: как кошелёк описывает адреса и условия траты

Короткий ответ: Bitcoin descriptor – это текстовое описание того, какие скрипты кошелёк должен отслеживать или использовать для получения адресов. В нём задаются тип скрипта, ключ или расширенный ключ, происхождение и путь деривации, а иногда диапазон адресов. Descriptor помогает точно передать правила кошелька другой совместимой программе, но не является универсальной заменой секретному резервному материалу.

Зачем понадобилось описание адресов

Фразы «у меня есть приватный ключ» или «у меня сохранена seed-фраза» не всегда сообщают программе, какие именно адреса и скрипты нужно восстановить. Один набор ключей может участвовать в разных типах выходов: legacy, SegWit, nested SegWit, Taproot, мультиподписи. Кошелёк также может использовать определённые пути BIP32 и порождать много адресов по индексу. Если восстановитель не знает ожидаемый тип скрипта и путь, он может построить другой набор адресов и не показать прежние UTXO. Отдельно о путях деривации можно прочитать в статье что такое derivation path.

BIP 380 задаёт общую грамматику output script descriptors и checksum. Отдельные расширения описывают конкретные выражения, например обёртки для SegWit и Taproot. Descriptor делает правила явными: его можно сравнить глазами, сохранить в резервной документации или импортировать в кошелёк, который поддерживает этот формат.

Для общего контекста о модели неизрасходованных выходов можно прочитать обзор Bitcoin, UTXO и Taproot. Descriptor связывает именно адреса и условия расходования с ключевыми данными, а не записывает сами транзакции в отдельный кошелёк.

Из чего состоит descriptor

Обычно выражение начинается с функции скрипта, затем содержит ключ. В условном виде wpkh(KEY) указывает на распространённый SegWit-шаблон, а tr(KEY) – на Taproot. Функции могут вкладываться, когда описание включает несколько уровней скрипта. Конкретный синтаксис стандартизирован, поэтому нельзя свободно менять порядок элементов или угадывать значение символов.

Ключевая часть может включать fingerprint и путь происхождения. Расширенный публичный ключ плюс производные индексы позволяет описать целое семейство адресов, не раскрывая возможность подписи. Звёздочка в конце ключевого пути часто обозначает изменяемый индекс, но точный смысл зависит от конкретного выражения. Такой ranged descriptor нужен кошельку, чтобы отслеживать последовательность адресов, а не один заранее известный адрес.

Описание может содержать и приватный материал. Поэтому не следует автоматически считать любой текст descriptor безопасным для публикации. Если в нём есть приватный ключ или расширенный приватный ключ, утечка может дать возможность распоряжаться средствами. Публичные данные удобнее для watch-only проверки, но даже их стоит передавать только ожидаемому получателю.

Зачем нужна контрольная сумма

После выражения может стоять знак решётки и восемь символов checksum. Она помогает обнаружить случайную опечатку при копировании. Checksum не доказывает, что descriptor принадлежит нужному кошельку, что ключи безопасны или что в нём указан правильный путь. Это защита от ошибок строки, а не цифровая подпись владельца.

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

Не вводите неизвестный descriptor с приватными данными в онлайн-сервис ради проверки. Для проверки формата используйте доверенное программное обеспечение, полученное из официального источника. В Bitcoin Core есть операции импорта и просмотра descriptors, однако конкретные параметры и поддерживаемые выражения зависят от версии и типа кошелька.

Как descriptor связан с восстановлением

Резервная копия должна включать данные, необходимые именно вашему сценарию. Descriptor может подсказать восстановителю тип адреса и путь, а публичный descriptor пригоден для отслеживания баланса без ключа подписи. Такой сценарий близок к модели watch-only кошелька. Но возможность потратить монеты требует контроля над соответствующими секретами и выполнения условия скрипта. При мультиподписи могут понадобиться ключи нескольких участников и согласованная политика.

Практический порядок такой: установите, какой кошелёк и тип адресов использовались; получите экспорт descriptor штатной функцией; сохраните checksum и отметки о внешнем или внутреннем диапазоне, если они присутствуют; проверьте контрольный адрес и диапазон на отдельном устройстве или в доверенной программе. Не тестируйте восстановление единственной копии, изменяя оригинал.

Импорт может запустить поиск по истории начиная с указанного времени или блока. Неправильная временная отметка, диапазон или derivation path способны привести к неполному просмотру истории. Например, если descriptor описывает ограниченный набор индексов, следующий адрес за границей не будет найден, пока диапазон не расширен корректным способом.

Частые недоразумения

  • Descriptor – не seed-фраза. Он описывает скрипты и ключевые пути, а не всегда содержит секреты, нужные для подписи.
  • Адрес не равен ключу. Адрес получается из скриптовых условий, а descriptor описывает семейство таких условий.
  • Checksum не подтверждает владельца. Она только помогает выявлять ошибки строки.
  • Поддержка формата не универсальна. Старые или узкоспециализированные кошельки могут не понимать используемое выражение.
  • Экспорт может содержать секрет. Проверьте, нет ли в строке приватного ключа, перед тем как куда-либо её отправлять.

Если wallet показывает новые адреса, но ваш обозреватель или другое приложение их не распознаёт, не начинайте с произвольной смены скрипта. Сравните публичный ключ, origin fingerprint, derivation path, тип выражения и границу диапазона. Условия траты важны не меньше, чем сама последовательность ключей.

Итог

Bitcoin descriptor делает структуру кошелька переносимой и понятной: указывает скриптовый тип, ключи, происхождение и правила генерации адресов. Сохраняйте строку целиком, проверяйте checksum и первый адрес, осторожно относитесь к расширенным ключам и помните, что descriptor сам по себе не гарантирует доступ к средствам. Перед восстановлением выясните, что именно нужно программе для просмотра адресов и для подписи транзакций.