MSTR Cat

Блокчейн/Уровень IV · Глубины протокола/4.2 Обновления/Урок 4

Дескрипторы выходов

Грамматика ключа: почему одной сид-фразы может не хватить, чтобы восстановить то, что вы построили

МатериалыЗапущенный экземпляр Bitcoin Core (версии 23 или новее)Аппаратный кошелёк, умеющий экспортировать публичные дескрипторыТекстовый редактор для просмотра и изменения строк дескрипторов

Любопытство

  1. Какой конкретной информации не хватает во фразе восстановления из 24 слов, из-за чего её недостаточно для восстановления всех адресов мультисиг-кошелька?
  2. Как контрольная сумма, добавленная к строке дескриптора, обнаруживает одну пару переставленных символов ещё до того, как программа попытается выполнить импорт?
  3. Почему в версии 23 Bitcoin Core по умолчанию перевёл новые кошельки в режим дескрипторов и что ломается, если восстанавливать кошелёк старого типа из современной резервной копии?

Исследование

  1. До появления дескрипторов кошельки HD опирались на имплицитные пути генерации адресов. Пользователь делал резервную копию фразы-семени или расширенного публичного ключа (xpub) и предполагал, что программное обеспечение будет восстанавливать адреса с использованием стандартных правил BIP44. Этот подход работал для простых кошельков с одной подписью до активации функции Segregated Witness в августе 2017 года на блоке 481,824. Появление типов адресов P2WPKH и P2WSH означало, что один лишь xpub больше не позволял полностью определить структуру генерации адресов, из-за чего возникали сбои при восстановлении — средства казались потерянными, поскольку кошелек искал не тот тип скрипта.
  2. BIP380 определяет дескрипторы выходных скриптов (Output Script Descriptors) как стандартный язык для описания наборов выходных скриптов, используемых в биткоин-HD-кошельках. BIP380 задаёт общую основу, а BIP 381–386 описывают отдельные типы выражений, такие как pk(), pkh(), sh(), wpkh() и wsh(). Дескриптор — это структурированное выражение, полностью описывающее выходной скрипт (scriptPubKey). Например, 'wpkh([d34db33f/84'/0'/0']xpub…/0/*)' явно указывает тип скрипта, происхождение ключа через отпечаток мастер-ключа и путь деривации, расширенный публичный ключ и диапазон индексов для сканирования. Ничего не остаётся на догадки.
  3. Формат включает контрольную сумму после символа '#' для выявления опечаток. Если пользователь вручную редактирует дескриптор или копирует его с ошибкой, программа проверяет контрольную сумму, прежде чем принять ввод. Это предотвращает незаметную порчу данных, при которой неверный адрес сканировался бы бесконечно без результата. Аппаратные кошельки могут экспортировать дескрипторы с публичными ключами и путями деривации, явно исключая приватные ключи, что позволяет онлайн-нодам безопасно отслеживать офлайн-активы, не раскрывая сид-фразу.
  4. Miniscript, разработанный Питером Вёйле, Эндрю Пулстрой и Санкетом Канджалкаром начиная с 2019 года и описанный в BIP379 (2023), даёт структурированный способ писать и анализировать скрипты. Он позволяет кошелькам безопасно комбинировать таймлоки, мультисиг и хешлоки, раскладывая сложную логику скриптов на простые анализируемые элементы. Благодаря этому дескрипторы могут описывать пути восстановления с таймлоком и многосторонние условия, которые одна сид-фраза передать не может.
  5. Bitcoin Core сделал дескрипторные кошельки вариантом по умолчанию для новых кошельков в версии 23 (2022), а в версии 30 (2025) полностью убрал устаревшие (legacy) кошельки: старые теперь можно только мигрировать. Тот же урок касается кошельков на основе сид-фраз BIP39: для всего, что сложнее стандартного кошелька с одним ключом, вместе с сид-фразой необходимо сохранять дескриптор. Утечка этих данных не ставит под угрозу безопасность приватных ключей, поскольку они содержат только публичную информацию, но их нужно защищать от утечек ради приватности: они раскрывают, какие именно адреса контролирует пользователь, и структуру их деривации.
  6. Чтобы увидеть это на практике, создайте новый кошелёк в Bitcoin Core и выполните 'listdescriptors', чтобы вывести его дескрипторы, — каждый заканчивается контрольной суммой после '#'. Скопируйте один из них, измените один символ и передайте в 'getdescriptorinfo': Bitcoin Core отклонит его с ошибкой контрольной суммы. Учтите, что простая команда 'listdescriptors' показывает только публичные ключи — этого достаточно для копии в режиме наблюдения (watch-only); чтобы восстановить возможность тратить средства, нужна команда 'listdescriptors true', которая выводит и приватные ключи и потому требует соответствующей защиты, либо резервная копия файла кошелька.

Ключевые факты

  • BIP380 определяет дескрипторы выходных скриптов (Output Script Descriptors) как стандартный язык для описания выходных скриптов HD-кошельков.
  • Дескриптор явно содержит тип скрипта, происхождение ключа (отпечаток/путь), публичные ключи и диапазоны индексов.
  • Контрольная сумма, добавленная после '#', проверяет целостность строки дескриптора на предмет опечаток.
  • В версии 23 (2022) Bitcoin Core сделал дескрипторные кошельки вариантом по умолчанию при создании новых кошельков.
  • Miniscript (BIP379) позволяет дескрипторам безопасно описывать сложные скрипты, такие как мультисиг и таймлоки.
  • Аппаратные кошельки экспортируют дескрипторы только с публичными ключами, что позволяет подписывать транзакции в изоляции от сети (air-gapped), используя онлайн-ноды.

Упражнение девять, шесть, три, один

9СобратьПеречислите 9 различных типов выходных скриптов или конфигураций кошелька (например, P2PKH, P2SH-P2WSH, мультисиг 2-of-3). Для каждого укажите, какие именно данные нужны для его восстановления.
6СгруппироватьСгруппируйте 9 пунктов в 6 категорий в зависимости от того, достаточно ли стандартного пути BIP44 или для корректного восстановления обязательны явные данные дескриптора.
3Выделить главноеСведите 6 групп к 3 основным причинам, по которым неявные пути деривации не работают для современных типов кошельков.
1КристаллизоватьНапишите одно предложение о том, что дескриптор добавляет к сид-фразе, делая восстановление детерминированным.

Проверка фактов

Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS