Дескрипторный кошелёк Bitcoin: описание адресов
Иерархический ключ объясняет происхождение адресов, но не полностью описывает условия расходования. Дескриптор соединяет тип скрипта, ключевой материал, происхождение и пути в одном формальном описании. В уроке разберём его смысл и подготовим модель дескрипторного кошелька библиотеки.
Весь материал остаётся локальным описанием. Пример дескриптора ниже содержит обозначения, а не реальные ключи. Его нельзя импортировать буквально; действительное значение должно быть получено вашим инструментом и проверено встроенной справкой.
Что описывает выражение
Простой дескриптор P2WPKH может выглядеть в объясняющей записи как wpkh(KEY). Внешняя функция задаёт тип условия, а аргумент сообщает ключ. Для семейства адресов ключ может включать расширенный публичный материал и путь с завершающим индексом.
wpkh([FINGERPRINT/ACCOUNT_PATH]PUBLIC_ACCOUNT/0/*)#CHECKSUM
FINGERPRINT, ACCOUNT_PATH, PUBLIC_ACCOUNT и CHECKSUM здесь являются метками. Звёздочка обозначает последовательность дочерних значений в предусмотренном формате. Ветвь 0 в нашей модели используется для получения; ветвь 1 отдельно описывает сдачу.
Происхождение помогает инструменту сопоставить публичный ключ с нужным подписантом. Отпечаток и путь не являются доказательством честности источника сами по себе. Если злоумышленник подменил весь дескриптор, корректная контрольная сумма подтвердит только отсутствие случайного повреждения строки.
Контрольная сумма
Дескриптор может включать специальную контрольную сумму. Она полезна при передаче длинного выражения между устройствами или при восстановлении из документа. Ошибка символа или пути должна быть обнаружена до выдачи адресов.
Но контрольная сумма не заменяет доверенную сверку. Как и адресная сумма, она может быть вычислена для нового корректного выражения атакующим. Поэтому библиотека сохраняет подписанное досье конфигурации или независимый канал согласования, а не принимает любую строку с правильным суффиксом.
В будущем оператор может обратиться к getdescriptorinfo, чтобы получить каноническое описание и связанные признаки. Этот метод не делает неизвестный ключ собственностью библиотеки. Он проверяет структуру и возвращает сведения, которые нужно интерпретировать в контексте выбранного кошелька.
Дескрипторный кошелёк
Современный профиль Core использует дескрипторы для описания наблюдаемых условий. В закреплённом справочнике Core 31.0 createwallet описывает параметры создания, а importdescriptors — добавление наблюдаемого материала. Для конкретного будущего запуска нужно сверить установленную версию: мы не создаём кошелёк этим текстом автоматически.
Кошелёк может иметь дескрипторы получения и сдачи, активные для выдачи адресов, а также импортированные исторические условия. Наличие выражения не всегда означает, что кошелёк располагает секретами. Наблюдающий набор способен находить поступления и помогать подготовке, но подпись может выполняться отдельно.
Для библиотеки разделим конфигурацию:
| Часть | Назначение |
|---|---|
| Получение | Адреса новых счетов |
| Сдача | Выходы собственных расходов |
| Исторические условия | Поиск ранее созданных назначений |
| Подписант | Разрешение конкретного расходования |
Каждая часть должна быть включена в досье восстановления. Если экспортировали только первый активный дескриптор, это не доказывает полноту кошелька. Он мог использовать другие типы адресов или аккаунты в прежних версиях.
Диапазон и время поиска
Для выражения с последовательностью индексов требуется диапазон наблюдения. Если библиотека выдала адрес индекса 2500, а восстановленный инструмент ищет лишь 0–999, он может не увидеть поступление. Ключи при этом не потеряны: проблема находится в границе поиска.
Время или высота начала исторического сканирования также влияют на результат. Если задать слишком позднюю точку, старые выходы могут остаться неизвестными наблюдателю. Если начать раньше, потребуется больше работы и доступ к нужным данным блоков. При pruning некоторых исторических данных локально может не быть.
Прикладной журнал адресов помогает определить минимальную полноту диапазона и историю выдачи. Но он не заменяет сканирование фактических поступлений. Запись «адрес показан» не означает, что читатель оплатил, а отсутствие записи в повреждённой базе не означает отсутствие перевода.
Описание нескольких участников
Для политики нескольких подписей дескриптор включает несколько ключей и порог. Например, wsh(sortedmulti(2,KEY_A,KEY_B,KEY_C)) объясняет модель двух подписей из трёх с предусмотренным сортированием. Эта строка снова является схемой с обозначениями, не готовым импортом.
Сортирование и порядок участников имеют значение для воспроизводимого условия. Если сотрудники восстановят те же ключи в ином несогласованном шаблоне, адрес может отличаться. Поэтому сохраняем полную политику, а не список трёх ключей без указания конструкции.
Для Taproot выражения описывают другую структуру, включая внутренний ключ и возможное дерево скриптов. Нельзя заменить внешнюю функцию на tr и считать любую прежнюю политику автоматически перенесённой. Возможность подписания и совместимость инструментов рассматриваются отдельно.
Наблюдение результата
После будущего импорта ожидается способность получить заранее согласованные адреса и найти относящиеся к ним выходы при достаточном диапазоне и доступной истории. Пока это критерий, а не выполненная проверка. Наличие корректного выражения в файле ещё не подтверждает обнаружение всех средств.
Обновление политики
Если организация добавила второго подписанта, новый дескриптор задаёт новую форму получения. Старые выходы сохраняют прежние условия до разрешённого расходования. Поэтому миграционная опись содержит одновременно старый и новый набор, дату начала выдачи и правило прекращения новых счетов на старые назначения. Публичное выражение не обновляет уже созданный выход задним числом. Пользователь со старой ссылкой всё ещё может оплатить прежний адрес, и наблюдение должно сохранить такую возможность.
Для проверки конфигурации полезен независимый контрольный индекс: например, адрес получения с заранее выбранной позиции и адрес сдачи. Их сравнение раскрывает ошибку пути или функции, которую не видно из общего названия аккаунта. Один контрольный адрес не доказывает весь диапазон, но является предметным основанием ранней сверки перед историческим поиском.
Подробный язык приведён в документе дескрипторов Core 31.0, а импорт — в importdescriptors. Теперь кошелёк библиотеки описывается воспроизводимой политикой. Следующим шагом отделим такую публичную модель от полномочий подписанта.