181 / 691BIP370

PSBT v2

Вторая версия формата частично подписанной транзакции

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

PSBT v2 — формат BIP 370 для обмена незавершённой транзакцией Bitcoin и данными для подписания. Номер обозначает версию оболочки PSBT, а не автоматически версию транзакции или новый способ сетевой проверки.

PSBT v0 по BIP 174 содержит глобальную неподписанную транзакцию. BIP 370 переносит её конструкционные данные в отдельные поля. Участники могут по правилам добавлять входы и выходы после создания оболочки. Это не разрешает произвольно менять уже подписанные части и не превращает сам файл в платёж. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]

PSBT_GLOBAL_VERSION должно равняться 2, а PSBT_GLOBAL_UNSIGNED_TX должно отсутствовать. Обязательное PSBT_GLOBAL_TX_VERSION отдельно задаёт версию создаваемой транзакции; глобальная карта также содержит количество входов и выходов. Простая замена номера версии в старом файле не создаёт корректный PSBT v2. [BIP 370 — PSBT Version 2]

Вход должен указывать предыдущий TXID и индекс расходуемого выхода. Выход должен содержать сумму в satoshi и scriptPubKey; при добавлении обновляется соответствующий глобальный счётчик. Отсутствующая sequence входа означает 0xffffffff. Эти данные не заменяют проверку UTXO и других материалов, необходимых подписывающему устройству. [BIP 370 — PSBT Version 2]

В PSBT_GLOBAL_TX_MODIFIABLE бит 0 разрешает изменения входов, бит 1 — выходов. Бит 2 предупреждает о подписи SIGHASH_SINGLE: требуется сохранить пару входа и выхода по соответствующему индексу. Конструктор должен проверить конкретные подписи; установленный флаг сам по себе не делает иначе недопустимое изменение безопасным. [BIP 370 — PSBT Version 2]

Для nLockTime выбирают тип требования, совместимый со всеми входами, и его наибольшее значение. Если возможны оба типа, приоритет получает высота блока; несовместимый вход добавлять нельзя. Без требований входов используется глобальное резервное значение либо ноль. Новый вход не должен менять nLockTime, если подписи уже существуют. [BIP 370 — PSBT Version 2]

Подписант обновляет флаги в соответствии с SIGHASH. Без SIGHASH_ANYONECANPAY он запрещает изменения входов; без SIGHASH_NONE — изменения выходов, а при SIGHASH_SINGLE отмечает нужное парное соответствие. После финализации экстрактор собирает сетевую транзакцию из полей. Отправка и принятие сетью — следующие шаги, а не свойства переданной оболочки. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]

PSBT v0 и v2 не являются непосредственно взаимозаменяемыми. Преобразование в v0 требует сборки неподписанной транзакции и соблюдения правил полей этой версии. BIP 371 отдельно определяет данные Taproot для обеих версий. Поддержка PSBT или Taproot сама не доказывает, что кошелёк умеет импортировать, подписывать и экспортировать PSBT v2. [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]

На доверенном устройстве сравни получателей, суммы, собственный выход сдачи и комиссию с первоначальным намерением. Проверь данные UTXO, скрипты и используемый SIGHASH; метаданные вывода ключей сами не доказывают принадлежность выхода. Пробный проход через конкретный координатор и устройство проверяет совместимость, а не безопасность всех будущих транзакций. [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]

Для полной картины прочитайте эту статью вместе с PSBT, Hardware Wallet, Multisig, Taproot.

DOC · 001BIP 370 — PSBT Version 2СпецификацияDOC · 002BIP 174 — Partially Signed Bitcoin Transaction FormatСпецификацияDOC · 003BIP 371 — Taproot Fields for PSBTСпецификацияDOC · 004Bitcoin Core — PSBT workflowДокументация
Сначала источники · Не является инвестиционной рекомендацией