Глоссарий / Приватность и безопасность
Payjoin
Другие названия: P2EP, Pay-to-endpoint.
- Что такое Payjoin?
- Payjoin представляет собой платеж, при котором получатель биткоинов незаметно добавляет один из своих входов в вашу транзакцию, поэтому сумма в блокчейне больше не совпадает с суммой, которую вы фактически заплатили.
Определено в BIP-78.
Обе стороны добавляют входы, что нарушает правило, которое аналитики используют для объединения адресов в кошельки. Nicolas Dorier описал это как BIP78 в мае 2019 года, и это уже внедрено, а не существует в теории: BTCPay Server добавил поддержку в 2020 году. Для плательщика транзакция стоит немного больше по комиссиям и выглядит совершенно обычной.
Как это работает
Протокол payjoin представляет собой короткий обмен сообщениями между моментом, когда вы нажимаете «отправить», и моментом, когда транзакция транслируется в сеть.
Ваш кошелек формирует платеж как неподписанный PSBT, точно так же, как для обычного расхода, и отправляет его на конечную точку, которую получатель указал в запросе на оплату. Получатель добавляет один из своих неизрасходованных выходов как второй вход, увеличивает свой собственный выход на ту же сумму, чтобы по-прежнему получить правильный платеж, и возвращает измененный PSBT. Ваш кошелек проверяет, что адрес назначения и сумма не изменились, подписывает и транслирует.
В блокчейне оказывается транзакция с двумя входами, принадлежащими двум разным людям. Аналитик, применяющий стандартное правило кластеризации, объединит двух незнакомцев в один кошелек, и это ложный вывод, навсегда записанный в его наборе данных. Сумма платежа также исчезает: ни один выход не равен тому, что вы заплатили, потому что выход получателя равен платежу плюс его собственный добавленный вход. Наблюдатель больше не может прочитать счет из транзакции.
BIP78 ограничивает ваши расходы. Параметр maxadditionalfeecontribution указывает, сколько сатоши вы готовы заплатить за дополнительный вход, который добавляет получатель, поэтому получатель не может незаметно раздуть вашу комиссию. Если что-то идет не так, конечная точка недоступна, ответ имеет неверный формат, суммы не сходятся, ваш кошелек возвращается к трансляции исходной транзакции. Неудачный payjoin все равно остается завершенным платежом, поэтому его можно включить по умолчанию, ничего не сломав.
Получатели получают вторую выгоду, не связанную с приватностью. Каждый payjoin позволяет им включить один из своих биткоинов в транзакцию, которую в основном оплачивает кто-то другой, что представляет собой бесплатную уборку кошелька, полного мелких выходов.
Где это встречается
Payjoin работает на стороне продавца, поэтому большинство людей сталкивается с ним, не замечая этого.
BTCPay Server стал первой реализацией, запущенной в эксплуатацию, и предлагает payjoin в счетах, поэтому чаще всего он встречается на страницах пожертвований и на страницах оформления заказа, размещенных на собственном сервере. Wasabi и Sparrow могут отправлять на конечную точку payjoin с настольного компьютера.
Слабость первоначального дизайна заключалась в том, что получатель должен был запускать публичный сервер и быть онлайн в момент платежа, что ограничивало его применение продавцами. BIP77, "Async Payjoin" от Dan Gould и Yuval Kogman, созданный в августе 2023 года и все еще являющийся черновиком, заменяет прямую конечную точку на каталог с промежуточным хранением и пересылкой, доступный через Oblivious HTTP, поэтому два кошелька на смартфонах могут завершить payjoin, не находясь онлайн одновременно. Bull Bitcoin и Cake Wallet выпустили эту версию в мобильных приложениях, и это первый случай, когда payjoin стал доступен для обычных платежей между людьми.
Самый сильный аргумент в пользу его использования вы никогда не увидите лично. Каждый payjoin в наборе данных делает правило общей принадлежности входов менее надежным для всех, включая людей, которые никогда его не совершали. Методы приватности, которые помогают только своему пользователю, редки; этот метод ухудшает слежку для всей сети с каждой транзакцией.