Перейти к содержанию

PSBT в Bitcoin: подготовка транзакции к подписанию

Наблюдающий сервер библиотеки знает нужные выходы, но не хранит приватные ключи. Чтобы подготовить расходование и передать его подписанту, нужен пакет, который описывает транзакцию и дополнительные сведения. PSBT предназначен для такого обмена между участниками подготовки и подписания.

В уроке разберём этапы пакета на заявке возврата 10 000 сатоши. Мы не создаём настоящую PSBT, не подписываем и не отправляем её. Листинг показывает маршрут будущего использования закреплённого Bitcoin Core, а значения обозначений должны поступить из вашей изолированной лаборатории.

Частично подписанный пакет

PSBT означает формат частично подписанной Bitcoin-транзакции. Он может быть полностью неподписанным, содержать часть подписей или быть готовым к завершению. Поэтому слово «подписанный» в названии не доказывает готовность всех входов.

В пакете есть сведения об общем объекте, отдельных входах и выходах. Подписанту могут требоваться предыдущие выходы, суммы, скрипты и пути происхождения ключей. Точный набор зависит от типа расходования и возможностей инструментов. Один список идентификаторов входов без необходимого контекста может оказаться недостаточным.

PSBT не является обычной сырой транзакцией для отправки. Он содержит служебные данные обмена, которые сеть не обязана принимать как сериализацию завершённого кандидата. Финализация собирает необходимые данные расходования, а извлечение получает окончательный транзакционный объект.

Кто готовит данные

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

Схема команды для будущей лаборатории:

bitcoin-cli -regtest -rpcwallet=library \
  walletcreatefundedpsbt '[]' \
  '[{"RETURN_ADDRESS":0.00010000}]'

RETURN_ADDRESS — метка для отдельно согласованного локального адреса. Здесь показано место назначения суммы; полный запуск требует явного datadir, проверки версии, параметров комиссии и кошелькового состояния. Команда в текущей работе не выполнялась и не является готовой заявкой реального возврата.

Сумма 0.00010000 BTC соответствует 10 000 сатоши. Формат параметра RPC и внутренний целочисленный формат сайта различаются. При реализации адаптера число не строится случайным округлением дробного Number: преобразование должно сохранить точное значение.

Подготовка не равна согласованию

Сервер может правильно оформить пакет на неправильный адрес. Поэтому подпись должна опираться на независимую заявку. Подписант проверяет сумму получателя, каждый внешний выход, собственную сдачу, выбранные входы и бюджет комиссии.

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

Оператор также проверяет отсутствие неожиданного второго получателя. При заявке на возврат 10 000 пакет может содержать правильный выход читателю и дополнительный выход атакующему. Проверка только одного «главного» назначения пропустит эту подмену. Все выходы должны объясняться заявкой либо распознанной сдачей.

Несколько этапов обработки

Маршрут PSBT можно записать так:

заявка → подготовка → дополнение контекста
       → независимый разбор → подписи
       → финализация → извлечение → отправка → наблюдение

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

Не объединяем пакеты только потому, что они относятся к одному номеру заявки. Они должны описывать совместимое содержание и не противоречить согласованной транзакции. Если подготовитель изменил входы или выходы после первой подписи, подпись может перестать подходить либо защищать иной набор согласно своему режиму.

Финализация также не означает, что сеть приняла расход. После неё остаются проверка допустимости в текущем состоянии и отправка. Вход мог уже быть израсходован конфликтующим кандидатом, а размер или политика могли измениться. Досье сохраняет последующие наблюдения отдельно.

Данные пакета могут раскрывать историю

PSBT содержит полезный контекст, включая происхождение ключей и связанные транзакции. Передача такого пакета может раскрыть сведения о кошельке. Поэтому его не следует помещать в публичный URL, общедоступный журнал или статью с действительной выручкой.

Учебные обозначения безопасны своей искусственностью, но готовый будущий пакет должен храниться в согласованном внутреннем канале. Подписант получает только необходимое. Архивирование для аудита также требует контроля доступа и срока хранения.

Если формат содержит неизвестные расширения, инструмент должен сохранять или обрабатывать их согласно требованиям, а не молча удалять данные без понимания роли. Совместимость PSBT — отдельное свойство выбранных программ. Использование одного названия формата не гарантирует поддержку любого нового типа входа.

Критерий готовности

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

Версия формата и совместимость

PSBT развивается через отдельные спецификации и расширения. При передаче подписанту нужно знать, какую версию и типы полей он принимает. Поддержка базового формата не гарантирует поддержку любого нового пути Taproot или конкретного устройства. В досье сохраняем выбранные инструменты и ожидаемую роль каждого. Неизвестные поля не превращаем автоматически в ошибку всей транзакции, но и не игнорируем их влияние без чтения правил.

Если библиотека экспортирует пакет в печатной форме или QR, передаваемый текст должен полностью соответствовать согласованным байтам пакета. Укороченная строка пригодна как метка сверки, но не как сам перенос. После получения участник разбирает действительный пакет и видит назначения, а не принимает визуальную подпись «возврат» как содержание операции.

Необходимость подписи определяется каждым входом отдельно. Готовность одного входа не переносится на остальные даже тогда, когда суммы и принадлежность кошельку выглядят одинаково.

Формат задан в BIP 174, а роли инструментов Core — в документе PSBT. Результат урока — маршрут передачи полномочий без экспорта приватного ключа. Следующая страница превратит независимую сверку в конкретную процедуру подписанта.

Оглавление серии