140 / 736P2EP

Payjoin

Платёж, подготовленный вместе с получателем

При обычном платеже кошелёк выбирает монеты отправителя и передаёт часть их стоимости получателю. Payjoin привлекает к подготовке и другую сторону: получатель добавляет собственные монеты в ту же транзакцию. Платёж по-прежнему поступает, но у наблюдателя публичной цепочки остаётся меньше надёжных подсказок о владельцах входов.

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

Алиса платит Бобу. Кошелёк — приложение или устройство для получения и отправки биткоинов. Её кошелёк работает не с единым банковским остатком: он выбирает ещё не потраченные выходы предыдущих транзакций, называемые UTXO. У каждого выхода есть сумма и условия её расходования. Входы новой транзакции ссылаются на эти UTXO, а новые выходы передают средства Бобу и при необходимости возвращают сдачу Алисе. В обычном платеже средства предоставляет только Алиса. В Payjoin участвует и Боб, добавляя свой непотраченный выход. Он получает согласованный платёж и одновременно перемещает деньги, которые уже имел. Оба кошелька должны проверить результат. Затем каждая сторона цифровой подписью разрешает потратить свои входы; приватными ключами они не обмениваются. Приватный ключ — секретное числовое значение, с помощью которого создают такую подпись. [1] [3] [8] [6]

Аналитик часто предполагает, что совместно потраченные входы принадлежат одному кошельку. Этот приём называют common-input-ownership heuristic. Он не является правилом Bitcoin или доказательством личности, а лишь выводом из типичного поведения. Payjoin создаёт действительные транзакции, для которых этот вывод неверен. Наблюдатель уже не может автоматически приписать все входы Алисе. Впрочем, другие сведения всё ещё могут ему помочь. [1] [3]

Суммы укажем в sats — наименьших единицах биткоина. Для ясности пока оставим комиссию в стороне. У Алисы есть вход на 100 000 sats, она платит Бобу 20 000 sats, а 80 000 sats получает сдачей. Боб добавляет собственный вход на 50 000 sats, и его выход увеличивается до 70 000 sats. Входы и выходы по-прежнему составляют по 150 000 sats. Боб не получил лишний подарок: 50 000 sats уже принадлежали ему, а прибавились только согласованные 20 000 sats. Реальная транзакция, разумеется, должна оплатить и комиссию. [1] [6]

Для совместной работы кошелькам нужны общая процедура и формат сообщений. BIP78, технический документ Nicolas Dorier, получивший номер в 2019 году, использует PSBT — Partially Signed Bitcoin Transaction. Это пакет данных с транзакцией и сведениями для её проверки и подписания, а не уже отправленный в сеть платёж. Запрос платежа содержит параметр pj — адрес сервиса, с которым должен связаться кошелёк. Сначала отправитель передаёт исходный платёж в виде полностью подписанной и завершённой PSBT. Её уже можно опубликовать в сети, несмотря на слово «partially» в названии формата. Получатель возвращает изменённое предложение со своими добавленными входами и их подписями. Отправитель проверяет его, заново подписывает собственные входы и передаёт итоговую транзакцию в сеть Bitcoin. Соединение должно быть зашифровано, а удалённый сервис аутентифицирован. PSBT — не резервная копия кошелька: ни seed, из которого выводятся ключи, ни приватные ключи, ни ненужные сведения об их выведении не передаются. [1] [5]

Кошелёк отправителя должен проверить, что его входы и защищённые выходы сохранены, сдача не уменьшена произвольно, а вклад в комиссию не превышает разрешённый предел. Он подписывает только собственные исходные входы. Протокол разрешает некоторые изменения выходов получателя при точно заданных условиях, но не даёт права перенаправить весь платёж. На устройстве подписи нужно понимать показанные суммы, а не просто подтверждать очередной экран. [1] [5]

Дополнительный вход занимает место и может увеличить абсолютную комиссию платежа. Кто платит и в каких пределах, кошельки определяют при согласовании. При этом получатель может объединить свои UTXO или добавить другой платёж, который иначе делал бы отдельно. Общая экономия зависит от сравнения одинаковых операций, а не от обещания, что любой Payjoin дешевле. Та же комиссия в satoshi для более крупной транзакции означает меньшую ставку. [1] [2]

В BIP78 получателю нужен доступный через интернет сервис, а обе стороны общаются одновременно. Это неудобно, когда телефон теряет связь. Поэтому BIP77, или Payjoin v2, использует сервер как временный почтовый ящик. Один кошелёк оставляет сообщение, а другой забирает его позже, пока не истёк согласованный срок сеанса. Такой обмен называют асинхронным. Само предложение платежа защищено сквозным шифрованием: его читают кошельки участников, но не оператор ящика. Дополнительную защиту даёт OHTTP, Oblivious HTTP. Запросы идут через отдельного посредника, поэтому сервер ящиков обычно не видит сетевой IP-адрес кошелька. IP-адрес — сетевой адрес, который устройство использует для связи через интернет. Сокрытие этой связи предполагает, что посредник и сервер не делятся своими записями. Ни один из них не получает приватные ключи, управляющие биткоинами. Однако сервер может задержать или отбросить сообщения: одно лишь шифрование не гарантирует доставку. [2] [4] [7]

Payjoin не делает платёж автоматически анонимным. Суммы, входы, выходы и момент подтверждения остаются видимыми в цепочке. Другая сторона также знает ход согласования; у продавца может быть заказ с вашим именем. В публичной транзакции нет обязательной метки Payjoin, но повторные адреса или особенности кошелька могут дать другие подсказки. Автоматический получатель должен также защищаться от попыток узнать его UTXO через запросы, которые никогда не завершают. [1] [2]

Исходная подписанная транзакция может послужить обычным запасным платежом. В корректном протоколе она и предложение Payjoin тратят те же исходные входы, поэтому подтвердиться может не более одной из них. Это не повод после ошибки без проверки создавать ещё один независимый платёж. Уже переданная подпись может позволить получателю опубликовать исходную транзакцию. Кошелёк должен ясно показывать, состоялся ли Payjoin, обычный запасной платёж или пока ничего, и сверять это с цепочкой. [1] [2]

Отправка и приём Payjoin — разные возможности; конкретные кошельки и версии должны быть совместимы. Обработка запроса без добавленного входа получателя ещё не создаёт описанной защиты от ошибочного определения владельцев. При проверке 17 октября 2026 года BIP78 имеет статус Deployed, а BIP77 авторства Dan Gould и Yuval Kogman — Draft. Payjoin согласуется между приложениями на основе обычных Bitcoin-транзакций: ему не нужен Soft Fork, и правила эмиссии он не меняет. [1] [2] [3]

Для полной картины прочитайте эту статью вместе с CoinJoin, Приватность в Bitcoin, PSBT, Псевдонимность, UTXO, Satoshi. На эту статью также ссылаются Change Address, Приватность в Bitcoin, Псевдонимность, Chain Surveillance.

DOC · 001BIP78 — A Simple Payjoin ProposalСпецификация DOC · 002BIP77 — Async PayjoinСпецификация DOC · 003Bitcoin Optech — PayjoinДокументация DOC · 004Payjoin projectПервичный источник DOC · 005Bitcoin Core — PSBTДокументация DOC · 006Bitcoin Developer Reference — TransactionsДокументация DOC · 007RFC 9458 — Oblivious HTTPСпецификация DOC · 008Bitcoin Developer Guide — WalletsДокументация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией