Понять хранение · Совместное подписание

Когда порядок двух PSBT решал, будет ли принята подпись

PSBT позволяет нескольким программам и устройствам готовить одну транзакцию, не передавая друг другу закрытые ключи. В одном частном случае Bitcoin Core объединял эти данные по-разному в зависимости от порядка файлов.

РЕДАКЦИОННЫЙ ОБЗОР · Подготовлен редакцией проекта на основе указанных источников.

Транзакция, которую собирают по частям

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

Для объединения нескольких вариантов PSBT в Bitcoin Core используется команда combinepsbt. В августе 2026 года разработчик обнаружил, что результат в одном частном случае зависел от порядка переданных файлов.

Поле, которое не переносилось

PSBT может указывать тип sighash — какие части транзакции подтверждает конкретная подпись. Обычная подпись чаще всего подтверждает все входы и выходы, но существуют и другие варианты, включая ALL|ANYONECANPAY.

При объединении Bitcoin Core переносил почти все отсутствующие дополнительные поля из одного экземпляра в другой. Исключением оказалось PSBT_IN_SIGHASH_TYPE. Если первый файл не содержал это поле, а второй содержал подпись с нестандартным sighash, подпись копировалась, но информация о её типе могла потеряться.

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

Почему средства не исчезали

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

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

Исправление порядка

Разработчики изменили объединение входов: если в первом PSBT тип sighash отсутствует, программа переносит его из второго. К исправлению добавили тесты для обоих порядков объединения.

Изменение было проверено и 9 сентября 2026 года принято в основную ветвь Bitcoin Core. Это означает, что код исправлен в ветви разработки, но не гарантирует его присутствия в каждой уже установленной версии.

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

При совместном подписании важно сохранить не только подпись, но и точное описание того, что она подтверждает.

Источники и проверка

  1. Bitcoin Core PR #36076: preserve sighash type when merging inputs ↗
  2. Bitcoin Optech Newsletter #423 ↗

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

Если не указано иное, текст, выводы, структура и редакционная компоновка созданы редакцией проекта. Факты, цитаты и материалы источников принадлежат их авторам и правообладателям.

← Вернуться к рубрике