PSBT — стандартный формат передачи незавершённой транзакции Bitcoin между кошельками и устройствами, которые её проверяют и подписывают. Название расшифровывается как Partially Signed Bitcoin Transaction, то есть частично подписанная транзакция, хотя в файле может пока не быть ни одной подписи. Он содержит проект, вспомогательные данные и подписи, а не приватные ключи. Когда нужные материалы собраны, из него можно получить обычную транзакцию для отправки в сеть. Цифровая подпись — это проверяемое согласие, созданное с помощью приватного ключа: секретных данных, позволяющих подписывать. Сам ключ при этом не раскрывается.
Анна хочет отправить Павлу 60 000 sat — шестьдесят тысяч минимальных единиц биткоина. Кошелёк использует один ранее полученный и ещё не потраченный выход на 100 000 sat. Выход содержит сумму и условия, при которых её можно потратить. В этом примере кошелёк предлагает отправить Павлу 60 000 sat, вернуть Анне 39 000 sat сдачи и оставить 1 000 sat на комиссию. Пока это лишь инструкции. Приложение помещает их в PSBT и передаёт аппаратному кошельку: по кабелю, через QR-код или карту памяти, в зависимости от устройства. Анна проверяет платёж на его экране и разрешает добавить подпись. Обратно возвращается подпись, а не секретный ключ. Поэтому готовить платёж необязательно на том же устройстве, которое вправе его подписать. [1] [4]
Расширение .psbt само по себе не делает платёж безопасным. Компьютер, создавший файл, может быть взломан или просто неверно настроен. Анна сверяет получателя с адресом, надёжно полученным от Павла, проверяет сумму, общую комиссию и возврат сдачи в собственный кошелёк. При работе с аппаратным кошельком она ориентируется на доверенный экран устройства и порядок действий производителя. Подписывающее ПО тоже проверяет вспомогательные данные и то, что именно закрепляет подпись. Технический термин sighash описывает, какие части транзакции подпись защищает от изменений. Новичку не следует одобрять необычный режим, не разобравшись в нём. Если адрес неверен или комиссию нельзя проверить, нужно пересмотреть проект, а не обходить проверку. [1]
В кошельке Multisig с условием «два из трёх» Анна может добавить первую подпись, а Павел вторую, каждый на своём устройстве. Им не нужно обмениваться словами восстановления или одновременно находиться онлайн. Координатор — приложение, организующее процесс, — собирает материалы одного и того же платежа и объединяет подписи. Но каждый подписант всё равно сам проверяет, соответствует ли платёж его намерению; координатор не решает за него. В BIP 174 создатель проекта называется creator, участник, добавляющий данные, — updater, подписывающий — signer, объединяющий соответствующие версии — combiner. Finalizer собирает окончательные данные, выполняющие условия расходования входов, а extractor извлекает обычную транзакцию для сети. Одна программа часто выполняет несколько ролей. Это названия работ, а не требование участия шести человек. [1] [4]
PSBT может раскрыть, какие монеты вы собираетесь потратить, кому платите, сколько получаете сдачи и как связаны адреса. В нём также могут быть xpub — публичные данные для получения других публичных ключей, а вместе с правилами кошелька и адресов — или пути деривации, указывающие положение ключей в структуре кошелька. Не отправляйте файл случайному веб-сервису только ради просмотра содержимого. Подписанный PSBT может позволить другому человеку завершить и передать в сеть конкретную одобренную вами транзакцию, если все необходимые материалы доступны. Удаление своей копии не отзывает подпись. Файл также не заменяет Seed Phrase (слова резервной копии для восстановления ключей) или полную резервную копию конфигурации Multisig: он нужен для отдельного платежа, а не для восстановления всего кошелька. [1] [4]
Добавление подписи ещё не означает, что сеть знает о платеже. Когда окончательная транзакция собрана, кто-то должен передать её в сеть. Узел — это компьютер с программой, проверяющей транзакции и блоки Bitcoin. Узел проверит её по правилам сети и своей политике приёма транзакций, а майнер сможет включить в блок. Недостающая подпись, уже потраченный вход и недостаточная комиссия — разные проблемы, которые кнопка «готово» сама по себе не решает. Прежде чем полагаться на процесс, проверьте конкретное сочетание приложения, устройства и типа кошелька. В Bitcoin Core 29 команда analyzepsbt может показать недостающие данные или подписи. finalizepsbt может сформировать завершённую транзакцию; отправка — следующий шаг. Даже успешное завершение не равно подтверждению в блоке. [4] [5] [6]
BIP 174 определяет PSBT как двоичный формат, хранящий сведения в парах «ключ — значение». Здесь ключ означает идентификатор поля, а не приватный ключ от биткоинов. Глобальная карта описывает транзакцию целиком, карты входов — расходуемые выходы, а карты выходов — создаваемые новые выходы. Помимо проекта, они могут содержать скрипты, то есть условия расходования, сведения о происхождении ключей и частичные подписи. Данные можно сохранить в файле .psbt или представить в Base64 — кодировке двоичных данных в виде текста. Base64 не является шифрованием. PSBT не вводит новый тип транзакций в правила Bitcoin: сеть получает итоговую транзакцию, а не весь рабочий файл. [1]
Устройство без подключения к сети должно знать, что ему предлагают подписать. UTXO — ранее созданный и ещё не потраченный выход; новый вход ссылается на него. Non-Witness UTXO может содержать всю предыдущую транзакцию, а Witness UTXO — конкретный выход с его суммой и условиями. Нужные доказательства зависят от типа входа и правил подписывающего ПО. Проверяются идентификатор предыдущей транзакции и соответствующий выход, связи между скриптами, а также допустимый sighash. Отсутствующую сумму нельзя считать нулевой комиссией, а нехватку доказательств — успешной проверкой. Данные нужно получить надёжным способом, а не угадывать. [1]
Версия PSBT описывает устройство формата, а не число подписей и не версию самой транзакции Bitcoin. PSBT v0 хранит неподписанную транзакцию в глобальном поле; если версия PSBT не указана, это означает v0. PSBT v2 из BIP 370 исключает это поле и разделяет информацию для построения транзакции по отдельным полям. Это позволяет добавлять входы и выходы с учётом разрешённых изменений и уже имеющихся подписей. Свободно переписывать подписанный платёж это не разрешает. Обе стороны должны понимать нужную версию, поэтому заявления «поддерживает PSBT» недостаточно для точного описания совместимости. [2]
BIP 371 добавляет сведения для Taproot, включая подписи, скрипты и происхождение ключей. Эти поля работают и с PSBT v0, и с PSBT v2. Поэтому кошелёк может обрабатывать Taproot в первом формате, не поддерживая второй. И наоборот, поддержка v2 сама по себе не означает, что устройство умеет работать со всеми сценариями Taproot. Подпись по пути ключа и расходование через ветвь скрипта — разные способы выполнить условия выхода Taproot. Для пользователя вопрос прост: справится ли моя конкретная конфигурация с платежом, который я хочу подписать? Ответ дают документация и проверенный процесс, а не аббревиатура в списке возможностей. [3]
Для полной картины прочитайте эту статью вместе с Multisig, Hardware Wallet, Cold Storage, Output Descriptor. На эту статью также ссылаются Multisig, Cold Storage, Hardware Wallet, Watch-only Wallet.