术语表 /隐私与安全
Payjoin
又称 P2EP、Pay-to-endpoint、支付联合。
- Payjoin 是什么?
- Payjoin 是一种支付方式:收款方会悄悄在您的交易中加入自己的一个输入,使得链上显示的金额与您实际支付的金额不再一致。
规定于 BIP-78。
双方都提供输入,这打破了分析人员用来将地址归并为钱包的规则。Nicolas Dorier 在2019年5月将其规范为 BIP78,它已经投入使用,并非停留在理论层面:BTCPay Server 在2020年推出了支持。对付款方而言,这笔交易的手续费略高一些,看上去则与普通交易完全一样。
运作方式
Payjoin 协议是一段简短的交互,发生在您点击发送与交易被广播之间。
您的钱包像处理普通支付一样,将这笔支付构建为未签名的 PSBT,并将其发送到收款方在支付请求中公布的端点。收款方加入自己的一个未花费输出作为第二个输入,并将自己的输出增加同样的金额,以便仍然收到正确的付款,然后把修改后的 PSBT 发回。您的钱包核对目标地址和金额未被改动后,进行签名并广播。
最终上链的交易有两个输入,分属两个不同的人。按标准归并规则进行分析的人员会把两个陌生人合并为同一个钱包,这是一个被永久记录在其数据集中的错误结论。支付金额也随之消失:两个输出都不等于您所支付的金额,因为收款方的输出是付款金额加上其自己提供的输入。旁观者再也无法从交易中读出账单。
BIP78 限制了您需要承担的成本。maxadditionalfeecontribution 参数规定了您愿意为收款方加入的额外输入支付多少聪,因此收款方无法悄悄推高您的手续费。如果出现任何问题,例如端点无法访问、响应格式错误、金额核对不符,您的钱包会退回为广播原始交易。失败的 payjoin 仍然是一次已完成的支付,因此可以默认启用而不会造成任何破坏。
收款方还能获得与隐私无关的第二项好处。每次 payjoin 都能让他们把自己的一枚币并入一笔主要由他人付款的交易,这相当于对充满小额输出的钱包免费做了整理。
在哪里会遇到它
Payjoin 主要存在于商户一侧,因此大多数人在使用时并未察觉。
BTCPay Server 是第一个投入生产的实现,在账单上提供 payjoin,所以捐款页面和自托管的收银台是它最常出现的地方。Wasabi 和 Sparrow 可以在桌面端向 payjoin 端点发送付款。
最初设计的弱点在于,收款方必须运行公共服务器,并在付款时保持在线,这使它只适用于商户。BIP77,即 Dan Gould 和 Yuval Kogman 提出的"Async Payjoin",创建于2023年8月,目前仍是草案,它用通过 Oblivious HTTP 访问的存储转发目录取代了直连端点,因此两个手机钱包即使不同时在线,也能完成一次 payjoin。Bull Bitcoin 和 Cake Wallet 已在移动应用中推出该版本,这是 payjoin 首次可用于普通的个人之间付款。
使用它的最有力理由,是您本人永远看不到的一点。数据集中的每一次 payjoin 都会让共同输入所有权规则对所有人都更不可靠,包括那些从未使用过 payjoin 的人。只对用户自己有帮助的隐私技术很少见,而这一项每完成一笔交易,就削弱一次针对整个网络的监控。