|
| 1 | +--- |
| 2 | +title: Tracking Growth in Payjoin Adoption |
| 3 | +description: Dual-funding, Cahoots, ... SNICKER, and LNURL? |
| 4 | +date: 2023-05-03 |
| 5 | +authors: dangould |
| 6 | +--- |
| 7 | + |
| 8 | +[Payjoin adoption](https://en.bitcoin.it/wiki/PayJoin_adoption) has been |
| 9 | +increasing steadily since its introduction in 2018. Payjoin started as a |
| 10 | +privacy-enhancing technique to allow merchants to combine their Bitcoin |
| 11 | +with customers, to save fees, and to better secure the origin and |
| 12 | +destination of their funds. It makes it more difficult for third parties |
| 13 | +to track and analyze Bitcoin transactions in general, which is a |
| 14 | +significant benefit for anyone who values financial privacy. This past |
| 15 | +week I documented the growth of the technology in a few big tables on |
| 16 | +the Bitcoin wiki. |
| 17 | + |
| 18 | +<!-- truncate --> |
| 19 | + |
| 20 | +::: captioned-image-container |
| 21 | +<figure> |
| 22 | +<a |
| 23 | +href="https://substackcdn.com/image/fetch/$s_!hQ2P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png" |
| 24 | +class="image-link image2 is-viewable-img" target="_blank" |
| 25 | +data-component-name="Image2ToDOM"></a> |
| 26 | +<div class="image2-inset"> |
| 27 | +<img |
| 28 | +src="https://substack-post-media.s3.amazonaws.com/public/images/8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png" |
| 29 | +title="The table of payjoin adoption status from the wiki" |
| 30 | +class="sizing-normal" |
| 31 | +data-attrs="{"src":"https://substack-post-media.s3.amazonaws.com/public/images/8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png","srcNoWatermark":null,"fullscreen":null,"imageSize":null,"height":1239,"width":1193,"resizeWidth":null,"bytes":350794,"alt":"The table of payjoin adoption status from the wiki","title":null,"type":"image/png","href":null,"belowTheFold":false,"topImage":true,"internalRedirect":null,"isProcessing":false,"align":null,"offset":false}" |
| 32 | +srcset="https://substackcdn.com/image/fetch/$s_!hQ2P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png 424w, https://substackcdn.com/image/fetch/$s_!hQ2P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png 848w, https://substackcdn.com/image/fetch/$s_!hQ2P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png 1272w, https://substackcdn.com/image/fetch/$s_!hQ2P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f86ee7e-a0f6-45a4-b2f5-d76c6fde10fb_1193x1239.png 1456w" |
| 33 | +sizes="100vw" data-fetchpriority="high" width="1193" height="1239" |
| 34 | +alt="The table of payjoin adoption status from the wiki" /> |
| 35 | +<div class="image-link-expand"> |
| 36 | +<div class="pencraft pc-display-flex pc-gap-8 pc-reset"> |
| 37 | +<div class="pencraft pc-reset icon-container restack-image"> |
| 38 | +<img |
| 39 | +src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld2JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLXJlZnJlc2gtY3ciPjxwYXRoIGQ9Ik0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4IiAvPjxwYXRoIGQ9Ik0yMSAzdjVoLTUiIC8+PHBhdGggZD0iTTIxIDEyYTkgOSAwIDAgMS05IDkgOS43NSA5Ljc1IDAgMCAxLTYuNzQtMi43NEwzIDE2IiAvPjxwYXRoIGQ9Ik04IDE2SDN2NSIgLz48L3N2Zz4=" |
| 40 | +class="lucide lucide-refresh-cw" /> |
| 41 | +</div> |
| 42 | +<div class="pencraft pc-reset icon-container view-image"> |
| 43 | +<img |
| 44 | +src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld2JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLW1heGltaXplMiBsdWNpZGUtbWF4aW1pemUtMiI+PHBvbHlsaW5lIHBvaW50cz0iMTUgMyAyMSAzIDIxIDkiPjwvcG9seWxpbmU+PHBvbHlsaW5lIHBvaW50cz0iOSAyMSAzIDIxIDMgMTUiPjwvcG9seWxpbmU+PGxpbmUgeDE9IjIxIiB4Mj0iMTQiIHkxPSIzIiB5Mj0iMTAiPjwvbGluZT48bGluZSB4MT0iMyIgeDI9IjEwIiB5MT0iMjEiIHkyPSIxNCI+PC9saW5lPjwvc3ZnPg==" |
| 45 | +class="lucide lucide-maximize2 lucide-maximize-2" /> |
| 46 | +</div> |
| 47 | +</div> |
| 48 | +</div> |
| 49 | +</div> |
| 50 | +</figure> |
| 51 | +::: |
| 52 | + |
| 53 | +The BIP78 payjoin protocol has been gaining traction in recent years and |
| 54 | +is now supported by several wallets beyond merchants. Recent additions |
| 55 | +include the [BitMask](https://bitmask.app) browser extension (mainnet |
| 56 | +launch impending), |
| 57 | +[nolooking](https://github.com/chaincase-app/nolooking) for LND, and |
| 58 | +[payjoin-client](https://github.com/payjoin/rust-payjoin) for Bitcoin |
| 59 | +Core. BIP78 allows sender and recipient to negotiate a payjoin |
| 60 | +transaction over the web, by allowing both parties to contribute |
| 61 | +transaction inputs. This foils the primary heuristic strangers use to |
| 62 | +surveil Bitcoin users. This protocol is gaining popularity as more users |
| 63 | +become aware of its benefits and as more wallets support it. Still more |
| 64 | +payjoins are made with protocols other than the most popular BIP78 even |
| 65 | +if those making them might not think of them that way. |
| 66 | + |
| 67 | +## Payjoin Beyond BIP78 |
| 68 | + |
| 69 | +In addition to BIP78, there are other ways to spend Bitcoin with inputs |
| 70 | +from multiple sources that are still fundamentally payjoin transactions, |
| 71 | +too. Having included them on the [Payjoin |
| 72 | +Adoption](https://en.bitcoin.it/wiki/PayJoin_adoption) page their |
| 73 | +relationship to payjoin should be examined. |
| 74 | + |
| 75 | +[Dual-funded channels](https://bitcoinops.org/en/topics/dual-funding/) |
| 76 | +(DFC) are a type of Lightning Network channel where both channel peers |
| 77 | +contribute funds to the channel, rather than just one. This allows them |
| 78 | +to transact on the Lightning Network in both directions in contrast to |
| 79 | +channels with a source of funds on only one side. This can reduce |
| 80 | +transaction costs and increase transaction speed. Sometimes classical |
| 81 | +payjoins are called, Pay-to-Endpoint (P2EP), with emphasis on their |
| 82 | +coordination using an interactive web address instead of a static |
| 83 | +bitcoin address. Like P2EP, Lightning nodes establish channels via |
| 84 | +publically addressable identifier. |
| 85 | + |
| 86 | +Cahoots's Stowaway and Stonewallx2 are two other privacy-enhancing |
| 87 | +Bitcoin transaction methods that combine inputs and outputs between |
| 88 | +users to secure transaction details. Stowaway makes a payjoin, while |
| 89 | +Stonewallx2 makes a 2-party equal ouptut CoinJoin. Cahoots methods use a |
| 90 | +Tor-based |
| 91 | +[Soroban](https://medium.com/samourai-wallet/wallet-update-0-99-96-introducing-soroban-adc9a36a7ddb) |
| 92 | +rendezvous to a [PayNym](https://paynym.is/). PayNym serves as an |
| 93 | +endpoint that can be looked up in a public directory to establish secure |
| 94 | +connection over Tor relays. |
| 95 | + |
| 96 | +## Payjoin sans P2EP |
| 97 | + |
| 98 | +[SNICKER](https://gist.github.com/AdamISZ/2c13fb5819bd469ca318156e2cf25d79) |
| 99 | +is another type of transaction where multiple users contribute input to |
| 100 | +a transaction. Unlike P2EP, its users scan public data on the blockchain |
| 101 | +to find eligible counterparties. They transact without ever |
| 102 | +communicating directly. The SNICKER proposal is focused on equal amount |
| 103 | +CoinJoins, but could in theory be used to make transactions including |
| 104 | +transfers like payjoin, too (although between non-input-contributing |
| 105 | +users). Because it's non-interactive and common-input heuristic |
| 106 | +breaking, it serves us here to distinguish between payjoin and P2EP. |
| 107 | + |
| 108 | +## P2EP sans Payjoin |
| 109 | + |
| 110 | +[LNURL](https://github.com/lnurl/luds/blob/luds/01.md) is a protocol for |
| 111 | +generating Lightning Network payment requests and for providing |
| 112 | +additional Lightning-related information over the web. It enables |
| 113 | +Lightning wallets and services to provide users with QR codes or links |
| 114 | +that can be used to initiate Lightning payments or to access additional |
| 115 | +Lightning-related features. LNURL can also be used to facilitate other |
| 116 | +Lightning-related tasks such as opening channels and managing liquidity. |
| 117 | +Being [nonchalantly ubiquitous](https://github.com/lnurl/luds#services) |
| 118 | +in the lightning world, it proves the pay-to-endpoint concept is |
| 119 | +convenient and valuable to users. |
| 120 | + |
| 121 | +My week had a few interruptions, so I made the most of it by collecting |
| 122 | +all of the payjoin projects evaluations in pockets of free time. Ready |
| 123 | +to evaluate payjoin for your project? Get in touch. |
| 124 | + |
| 125 | +Have a great week. |
| 126 | + |
| 127 | +Dan |
0 commit comments