Исходный PSBT — контрольный образец и запасная транзакция
Получатель объявляет конечную точку параметром `pj` в URI BIP-21. URL обязан использовать аутентифицированное шифрование: TLS с проверкой сертификата либо onion-сервис, чей идентификатор публичного ключа уже передан через TLS. Незащищённое соединение отклоняют. До запроса отправитель собирает финализированный и пригодный к публикации исходный PSBT с данными неизрасходованных выходов (UTXO). Не добавляйте лишние сведения: `keypath` раскрывает путь вывода ключа внутри кошелька, а `global xpub` — расширенный публичный ключ для набора дочерних ключей. Сохраните байты, txid, входы, выходы, version, nLockTime, sequence и абсолютную комиссию. Ответ сравнивают только с этим объектом.
| Группа | Что сохранить | Зачем |
|---|---|---|
| Входы | Outpoint, сумма, тип скрипта и sequence | Увидеть удаление или изменение |
| Выходы | scriptPubKey, сумма и роль | Защитить выходы, которые не принадлежат получателю |
| Поля транзакции | version и nLockTime | Не принять скрыто изменённые условия |
| Комиссия | Суммы, абсолютная комиссия и ставка | Ограничить рост и снижение |
| Артефакт | Финализированный PSBT и готовая транзакция | Сохранить точную запасную транзакцию |
- Группа
- Входы
- Что сохранить
- Outpoint, сумма, тип скрипта и sequence
- Зачем
- Увидеть удаление или изменение
- Группа
- Выходы
- Что сохранить
- scriptPubKey, сумма и роль
- Зачем
- Защитить выходы, которые не принадлежат получателю
- Группа
- Поля транзакции
- Что сохранить
- version и nLockTime
- Зачем
- Не принять скрыто изменённые условия
- Группа
- Комиссия
- Что сохранить
- Суммы, абсолютная комиссия и ставка
- Зачем
- Ограничить рост и снижение
- Группа
- Артефакт
- Что сохранить
- Финализированный PSBT и готовая транзакция
- Зачем
- Сохранить точную запасную транзакцию
Исходный вариант использует выбранные UTXO целиком и содержит сдачу. Если кошелёк изменил выбор монет между сохранением и запросом, прежний паспорт больше не годится: создайте новый исходный PSBT и начните сравнение заново. Не соединяйте поля двух вариантов вручную.
Предложение меняет только разрешённые части
| Объект | Допустимо | Причина немедленно отвергнуть |
|---|---|---|
| Все входы и выходы | Нет keypath; ни в одном входе нет partial signature | Найдена утечка пути ключа или частичная подпись |
| Входы отправителя | Все на месте, не финализированы, sequence сохранён | Вход пропал, финализирован или изменён |
| Входы получателя | Финализированы и содержат данные UTXO | Вход нельзя проверить |
| Последовательности | Все входы предложения имеют одно значение sequence | Значения различаются |
| Порядок | Старый сохранён; новые элементы вставлены в случайную позицию | Относительный порядок исходных элементов изменён |
| Выходы отправителя | Все, кроме оплаты получателю, сохранены | Сдача исчезла или уменьшена без разрешения |
| Выходы получателя | Получатель может менять свои выходы, если подмена не запрещена | Подмена нарушает установленный запрет |
| Общие поля | Version и nLockTime совпадают | Любое изменение |
| Комиссия | Не ниже исходной | Снижение или превышение вклада |
- Объект
- Все входы и выходы
- Допустимо
- Нет keypath; ни в одном входе нет partial signature
- Причина немедленно отвергнуть
- Найдена утечка пути ключа или частичная подпись
- Объект
- Входы отправителя
- Допустимо
- Все на месте, не финализированы, sequence сохранён
- Причина немедленно отвергнуть
- Вход пропал, финализирован или изменён
- Объект
- Входы получателя
- Допустимо
- Финализированы и содержат данные UTXO
- Причина немедленно отвергнуть
- Вход нельзя проверить
- Объект
- Последовательности
- Допустимо
- Все входы предложения имеют одно значение sequence
- Причина немедленно отвергнуть
- Значения различаются
- Объект
- Порядок
- Допустимо
- Старый сохранён; новые элементы вставлены в случайную позицию
- Причина немедленно отвергнуть
- Относительный порядок исходных элементов изменён
- Объект
- Выходы отправителя
- Допустимо
- Все, кроме оплаты получателю, сохранены
- Причина немедленно отвергнуть
- Сдача исчезла или уменьшена без разрешения
- Объект
- Выходы получателя
- Допустимо
- Получатель может менять свои выходы, если подмена не запрещена
- Причина немедленно отвергнуть
- Подмена нарушает установленный запрет
- Объект
- Общие поля
- Допустимо
- Version и nLockTime совпадают
- Причина немедленно отвергнуть
- Любое изменение
- Объект
- Комиссия
- Допустимо
- Не ниже исходной
- Причина немедленно отвергнуть
- Снижение или превышение вклада
Предложение сохраняет все исходные входы и все выходы, которые не принадлежат получателю. Старый порядок не перемешивают; новые элементы вставляют случайно. После проверки отправитель подписывает только входы исходного образца. Просьба подписать добавленный вход — стоп-сигнал.
Вклад в комиссию разрешён заранее и ограничен тремя границами
По умолчанию получатель не уменьшает выход отправителя. Исключение требует двух валидных параметров: `additionalfeeoutputindex` и `maxadditionalfeecontribution`. Фактический вклад равен уменьшению выбранного выхода и одновременно ограничен максимумом, ростом абсолютной комиссии и формулой добавленного веса BIP-78.
| Проверка | Формула или граница | Отказ |
|---|---|---|
| Абсолютная комиссия | proposalFee ≥ originalFee | Получатель уменьшил общую комиссию |
| Объявленный предел | actualContribution ≤ maxadditionalfeecontribution | Списано больше согласованного |
| Связь с ростом | actualContribution ≤ proposalFee − originalFee | Разница ушла не только в комиссию |
| Добавленный вес | actualContribution ≤ originalPSBTFeeRate × vsize(sender_input_type) × (count(proposalInputs) − count(originalInputs)) | Отправитель оплачивает посторонний размер |
| Минимальная ставка | После подписи не ниже minfeerate, если отправитель его передал | Транзакция не выдерживает заданный порог |
- Проверка
- Абсолютная комиссия
- Формула или граница
- proposalFee ≥ originalFee
- Отказ
- Получатель уменьшил общую комиссию
- Проверка
- Объявленный предел
- Формула или граница
- actualContribution ≤ maxadditionalfeecontribution
- Отказ
- Списано больше согласованного
- Проверка
- Связь с ростом
- Формула или граница
- actualContribution ≤ proposalFee − originalFee
- Отказ
- Разница ушла не только в комиссию
- Проверка
- Добавленный вес
- Формула или граница
- actualContribution ≤ originalPSBTFeeRate × vsize(sender_input_type) × (count(proposalInputs) − count(originalInputs))
- Отказ
- Отправитель оплачивает посторонний размер
- Проверка
- Минимальная ставка
- Формула или граница
- После подписи не ниже minfeerate, если отправитель его передал
- Отказ
- Транзакция не выдерживает заданный порог
После проверки выбирают предложение или исходник, но не оба
Выбор основной или запасной ветки
- 1Заморозить Original
Сохраните финализированный PSBT и паспорт до запроса. Готовая транзакция должна проходить локальную проверку либо считаться пригодной к публикации.
- 2Проверить Proposal локально
Сравните поля, входы, выходы, данные UTXO, комиссию и вклад. Не подписывайте объект ради диагностики.
- 3Выбрать ветку
Допустимое предложение подписывают по входам отправителя и публикуют. При тайм-ауте, ошибке защищённого обмена или отказе используют исходник.
- 4Закрыть вторую ветку
После публикации одного варианта другой блокируют. Не используйте исходник для ускорения предложения.
- 5Проверить сеть
Найдите txid в мемпуле или блоке и сверьте поля. Одного уведомления кошелька недостаточно.
Если выбранная транзакция застряла, применяйте правила повышения комиссии только к ней и сначала выясните поддержку RBF или CPFP. Возврат ко второму конфликтующему варианту меняет входы получателя и может нарушить его состояние, поэтому это не универсальная замена повышению.
BIP-77 не меняет рабочие проверки этой статьи
BIP-77 на дату проверки — Draft версии 0.2.0. Здесь это лишь контекст асинхронного PayJoin, а не рабочий источник. Поддержку кошелька, конечной точки или сервиса из статуса черновика не выводят. Проверки выше опираются только на Deployed BIP-78.
| Сигнал | Почему стоп | Восстановление |
|---|---|---|
| Нет исходника | Нет контрольного образца и запасной транзакции | Пересобрать исходник до запроса |
| Изменён выход отправителя | Кража или скрытая комиссия | Отклонить; проверить разрешённый выход |
| Нужно подписать новый вход | Нарушено владение | Отклонить без подписи |
| Неизвестная ошибка в интерфейсе | Возможен фишинг | Показать локальный код и выбрать исходник |
| Вариант уже опубликован | Второй конфликтует | Следить за txid; второй не публиковать |
- Сигнал
- Нет исходника
- Почему стоп
- Нет контрольного образца и запасной транзакции
- Восстановление
- Пересобрать исходник до запроса
- Сигнал
- Изменён выход отправителя
- Почему стоп
- Кража или скрытая комиссия
- Восстановление
- Отклонить; проверить разрешённый выход
- Сигнал
- Нужно подписать новый вход
- Почему стоп
- Нарушено владение
- Восстановление
- Отклонить без подписи
- Сигнал
- Неизвестная ошибка в интерфейсе
- Почему стоп
- Возможен фишинг
- Восстановление
- Показать локальный код и выбрать исходник
- Сигнал
- Вариант уже опубликован
- Почему стоп
- Второй конфликтует
- Восстановление
- Следить за txid; второй не публиковать
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- BIP-78 — A Simple Payjoin Proposal Bitcoin BIPs · Проверено 28 августа 2026 г. в 00:04 GMT+5
- BIP-78 pinned source — 7fe0b034 Bitcoin BIPs · Проверено 28 августа 2026 г. в 00:04 GMT+5
- BIP-77 — Async Payjoin Bitcoin BIPs · Проверено 28 августа 2026 г. в 00:04 GMT+5
- BIP-77 pinned draft source — 7fe0b034 Bitcoin BIPs · Проверено 28 августа 2026 г. в 00:04 GMT+5
