MSTR Cat

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

Частично подписанные транзакции (PSBT)

Контейнер, позволяющий постороннему проверить, что именно подписывает устройство

МатериалыАппаратный кошелёк с поддержкой PSBTBitcoin Core с доступной командой 'decodepsbt'Компьютер или устройство с изолированной сетевой средой

Любопытство

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

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

  1. Стандартная сырая транзакция — это компактный финальный артефакт, готовый к отправке в сеть. Частично подписанная биткоин-транзакция (Partially Signed Bitcoin Transaction, PSBT), описанная в BIP174 Эндрю Чоу в 2017 году, устроена иначе: это контейнер, содержащий незавершённую транзакцию вместе со всеми метаданными, необходимыми для её последующего завершения. Она существует в трёх состояниях: полностью собранная, но не подписанная; частично подписанная, когда одни входы уже подписаны, а другие ещё нет; полностью подписанная и готовая к извлечению в сырой hex. Этот формат позволяет недоверенной программе сформировать шаблон, который проверит доверенное устройство, не нуждающееся в доступе к сети.
  2. Процесс работы с PSBT определяет шесть ролей: Creator (создатель), Updater (обновляющий), Signer (подписант), Combiner (объединяющий), Finalizer (финализатор) и Extractor (извлекающий); версия 2 добавляет седьмую — Constructor (конструктор). После того как создатель собирает транзакцию, обновляющий прикладывает тратимые предыдущие выходы, их скрипты и пути деривации ключей, чтобы подписант мог точно проверить, что он одобряет, включая суммы и комиссию. Из-за явного включения метаданных файл получается заметно менее компактным, чем при стандартной сериализации, но это принципиально важно: аппаратные кошельки могут проверять структуру транзакции без обращения к ноде с выходом в интернет, которая может быть скомпрометирована или работать с вредоносным ПО.
  3. Главная движущая сила PSBT — совместимость. До появления этого стандарта разные кошельки использовали несовместимые способы передачи данных между горячим кошельком и устройством холодного хранения, привязывая пользователя к конкретному производителю. BIP174 решил эту проблему, введя универсальный язык; сегодня координатор, например Sparrow, может передать один и тот же PSBT устройствам подписи разных производителей — через USB, SD-карту или QR-код. Это делает мультисиг на устройствах разных производителей практичным: каждый подписант добавляет в файл свою подпись, и ни один приватный ключ никогда не покидает своё устройство.
  4. У PSBT версии 0 есть жёсткое структурное ограничение: после создания глобальная неподписанная транзакция зафиксирована. Версия 0 хранит полную неподписанную транзакцию в глобальном поле, поэтому после её создания нельзя добавить ни входы, ни выходы. Из-за этой негибкости, если кто-то начинал собирать сложную многостороннюю транзакцию и понимал, что нужен дополнительный выход для сдачи, приходилось отбрасывать весь процесс и начинать с нуля с новым шаблоном.
  5. BIP370 вводит PSBT версии 2, чтобы решить проблему неизменяемости. В версии 2 вся информация о конкретном входе или выходе собрана в его собственном поле, а не разделена между локальными и глобальными данными. Благодаря этому участники могут добавлять входы или выходы после создания, если это разрешают флаги «modifiable» в PSBT. Это упрощает совместную работу: глядя на отдельный вход, вы видите все относящиеся к нему данные прямо в нём, что упрощает проверку для аппаратных устройств и снижает риск рассинхронизации состояния.
  6. Практическое применение — от подписи на аппаратном кошельке до совместных транзакций, таких как payjoin и coinjoin, где участники передают PSBT друг другу, пока все не подпишут. Для обычного пользователя это значит, что можно создать транзакцию на телефоне, подключить аппаратный кошелёк, чтобы безопасно подписать её офлайн, а затем извлечь итоговую сырую транзакцию для отправки в сеть, — причём каждое устройство видит именно то, что подписывает.

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

  • BIP174 определяет PSBT версии 0, где требуется глобальное поле с неподписанной транзакцией, которое нельзя изменить после создания.
  • BIP370 определяет версию 2 (PSBTv2), позволяющую добавлять входы и выходы после создания за счёт сведения данных в поля соответствующих входов и выходов.
  • PSBT намеренно менее компактен, чем стандартная сериализация, поскольку хранит значительный объём метаданных для проверки устройствами подписи.
  • Исходный процесс включает шесть ролей: Creator (создатель), Updater (обновляющий), Signer (подписант), Combiner (объединяющий), Finalizer (финализатор) и Extractor (извлекающий).
  • PSBT обеспечивает совместимость между разными программными кошельками и аппаратными устройствами подписи.
  • Координаторы, такие как Sparrow, и устройства для подписи, такие как Coldcard, обмениваются PSBT через файлы или QR-коды.

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

9СобратьПеречислите 9 различных ролей или состояний в жизненном цикле биткоин-транзакции — от создания до финальной отправки в сеть.
6СгруппироватьСгруппируйте 9 пунктов в 6 категорий в зависимости от того, связаны ли они с добавлением данных, проверкой структуры, наложением криптографических подписей, объединением вкладов участников, финализацией формата или отправкой результата в сеть.
3Выделить главноеСведите 6 групп к 3 основным функциям, которые должна выполнять любая система управления транзакциями для обеспечения безопасности и совместимости.
1КристаллизоватьНапишите одно предложение о том, почему незавершённой транзакции нужно больше данных, чем завершённой.

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

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

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

EN PT ES ZH JA KO DE FR MS