Перейти к содержимому
buybitcoinsmart

Глоссарий / Кошельки и хранение

PSBT версии 2

Другие названия: PSBTv2.

Что такое PSBT версии 2?
PSBT версии 2 представляет собой формат частично подписанной транзакции, в котором отсутствует фиксированная неподписанная транзакция, поэтому участник может добавить входы и выходы уже после создания файла.

Определено в BIP-370.

Версия 0 фиксирует набор входов и выходов при создании; версия 2, наоборот, переносит каждую деталь в отдельные карты для входов и выходов. BIP-370 был присвоен 14 января 2021 года и пропускает номер 1, поскольку формат BIP-174 является версией 0 и в обиходе назывался версией 1. Для владельца версия 2 важна только в сеансе подписи, когда другой участник добавляет средства к транзакции, которую вы уже начали.

Как это работает

PSBT версии 2 сохраняет внешний контейнер BIP-174 и перестраивает его содержимое. Переход определяют два правила: PSBT_GLOBAL_UNSIGNED_TX должен отсутствовать, а PSBT_GLOBAL_VERSION должен присутствовать и иметь значение 2.

То, что раньше несла удаленная транзакция, распределяется по двенадцати новым полям. Пять из них глобальные: версия транзакции (0x02), резервный locktime (0x03), число входов (0x04), число выходов (0x05) и байт изменяемых флагов (0x06). Пять относятся к каждому входу: предыдущий txid длиной 32 байта (0x0e), индекс расходуемого выхода (0x0f), номер последовательности (0x10) и два обязательных locktime, один на основе отметки времени не ниже 500000000 (0x11), другой на основе высоты ниже этого значения и выше нуля (0x12). У выходов появляются два поля: сумма в сатоши как 64-битное знаковое целое с обратным порядком байтов (от младшего к старшему, little-endian) (0x03) и скрипт (0x04).

Основную работу выполняет байт изменяемых флагов. Бит 0 означает, что входы еще можно добавлять или удалять, бит 1 говорит то же о выходах, а бит 2 фиксирует, что какая-то подпись уже применена с SIGHASH_SINGLE, поэтому ее пару вход-выход нужно сохранить. Подписывающая сторона должна ужесточать эти биты по ходу дела: подпись, не использующая SIGHASH_ANYONECANPAY, снимает бит 0, а подпись, не использующая SIGHASH_NONE, снимает бит 1. Право продолжать редактирование истекает само по мере появления подписей, а не держится на вежливости следующего владельца.

BIP-370 решает два вопроса, которые оставила открытыми отсутствующая транзакция. Locktime становится наибольшим значением, с которым согласны входы, с откатом к глобальному полю или к 0, когда оно отсутствует, и требование на основе высоты выигрывает при любом равенстве. Идентификатором становится txid, полученный сборкой полей с принудительно установленным для каждого номера последовательности значением 0, поскольку последовательность еще можно изменить позже.

Где это встречается

PSBT версии 2 вводит роль, для которой в BIP-174 нет аналога, Конструктора. Создатель открывает файл с 0 входами и 0 выходами и передает его дальше; Конструктор добавляет их, проверив изменяемые флаги. Создатель, ожидающий дополнений, должен также установить версию транзакции не ниже 2, чтобы функции, привязанные к ней, например OP_CHECKSEQUENCEVERIFY, оставались доступны.

Версия 2 использует сериализацию BIP-174, поэтому внешне файл выглядит так же, и разделение сделано намеренно: из 24 недействительных тестовых векторов в BIP 13 являются обычными файлами версии 0, отклоненными из-за одного неверно расположенного поля или номера версии. Преобразование идет только в одну сторону, поскольку файл версии 2 можно пересобрать в файл версии 0 из его собственных полей. Эталонная реализация содержится в пул-реквесте 21283 проекта Bitcoin Core, а в заголовке BIP статус указан как Deployed.

Из 41 обзора кошельков на этом сайте два упоминают PSBT, Sparrow (оценка 4,7) и BlueWallet (4,2), и ни в одном не названа версия. Исходите из версии 0, если программное обеспечение не говорит иного, и проверьте незнакомый инструмент небольшой суммой, прежде чем он будет работать с остальным.

PSBT версии 2 vs номер версии транзакции

PSBT версии 2 нумерует формат файла, а номер версии транзакции нумерует транзакцию, которая собирается внутри него. Оба находятся в одной и той же глобальной карте, и BIP-370 прямо говорит, что это не одно и то же поле. PSBT_GLOBAL_VERSION равен 2 в каждом файле версии 2; PSBT_GLOBAL_TX_VERSION является знаковым 32-битным целым для создаваемой транзакции, и BIP-370 требует, чтобы оно было не меньше 2, когда Создатель ожидает дополнений, поэтому эти два значения и путают. Измените первое, и старые парсеры отклонят файл. Измените второе, и вы измените то, по каким правилам консенсуса оценивается расходование.

Не путать с

Часто задаваемые вопросы

Нужен ли PSBT версии 2, чтобы пользоваться аппаратным кошельком?

Нет. Версия 0, формат, который определил BIP-174, охватывает обычное расходование, где входы и выходы определены до начала любой подписи. Версия 2 оправдана только тогда, когда другой участник должен добавить средства к транзакции, которую вы уже начали.

Почему нет PSBT версии 1?

Номер был пропущен намеренно. Формат BIP-174 является версией 0, но его в обиходе называли версией 1, пока разрабатывался BIP-370, поэтому новый формат получил номер 2, чтобы не оставлять две вещи под названием «версия 1».

Может ли программное обеспечение версии 0 открыть файл версии 2?

В нынешнем виде нет. BIP-370 намеренно делает два формата несовместимыми через глобальное поле версии, хотя файл версии 2 можно преобразовать в файл версии 0, построив неподписанную транзакцию из его полей.

Читайте далее

Источники

Последняя проверка: 6 сентября 2026 г.

Связанные термины

Еще в разделе «Кошельки и хранение»

Читать эту страницу на английском