-
Notifications
You must be signed in to change notification settings - Fork 7
How payjoin saves #69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
95e57e7
to
fce6a61
Compare
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
# How Can Payjoin Save 1/3 the Cost of Transacting? | ||
|
||
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"table stakes service"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about "Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees."
"and increase throughput" could be added, too, but I like economy of words
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sounds good to me 👍
I think just save fees is good here. In general, I tend to favor being verbose if it means extra clarity. In tutorials and explainers I often struggle with the tutorial-writer assuming too much knowledge on my part. Although we can make extensive use of linking to mitigate this where applicable; I definitely understand there are tradeoffs
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we perhaps reference when the common input ownership heuristic since people know that as the chainalysis breaking rule and payjoin references it everywhere already?
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. | |
Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others, or used to open lightning channels, for example. This combination could save significant overhead to every transfer. It also provides an opportunity for much better privacy. Like Bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed, breaking the [common-input-ownership heuristic](https://en.bitcoin.it/wiki/Common-input-ownership_heuristic) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review round 1 on the "how payjoin saves" article. Review 2 coming later.
docs/how-payjoin-saves.md
Outdated
|
||
Payjoin can save more than 1/3 of the cost of making normal transactions by batching them together. | ||
|
||
Payjoin lets a sender and receiver combine their transactions when they use Bitcoin. This doesn't just save money. It fixes the biggest privacy problem the Bitcoin network has at the same time. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not criticism, but note: I think anything that has to do high level explanations on how payjoin and/or bitcoin transactions work would be better in an "intro" article. Since we have a lot of articles dealing with specific topics within payjoin it's probably a good idea for us to have this intro article so we can assume knowledge as we branch more deeply on the into specific topics. This way the user has a clear path to educate themselves and can branch out into whatever topic they're interested to learn more in.
Something like this in my ideal world:
I do however agree that #67 is too verbose and needs rework, and also think what you have here is good until we get that intro. Just wanted your thoughts on this as a general goal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree in spirit, but in execution I think the "Introduction" box is the landing page for a general audience, and Why Payjoin Saves is the targeted content to explain to a decision maker who has the ability to integrate payjoin and 5 minutes that "Payjoin can save you money and make you look good too."
The general audience with an interest in payjoin is not the target of this material since they don't have the ability to make a decision to advance the project. We can afford to serve their interests under the fold. We can't afford to lose an opportunity to advance a decision of support.
|
||
``` | ||
Alice 500,000 sats -> 200,000 sats to Bob | ||
292,387 sats to Alice | ||
|
||
(7,613 sats are fees for 152.25 vB at 50 sat/vB) | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would you like me to make excalidraw mockups for these?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's find numbers that we're happy with before spending time on nice graphics. Content first.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
note from convo: let's do small numbers in btc (Alice 1 btc, Bob 3 btc, etc)
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
# How Can Payjoin Save 1/3 the Cost of Transacting? | ||
|
||
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sounds good to me 👍
I think just save fees is good here. In general, I tend to favor being verbose if it means extra clarity. In tutorials and explainers I often struggle with the tutorial-writer assuming too much knowledge on my part. Although we can make extensive use of linking to mitigate this where applicable; I definitely understand there are tradeoffs
docs/how-payjoin-saves.md
Outdated
(7,613 sats are fees for 152.25 vB at 50 sat/vB) | ||
``` | ||
|
||
To understand the transaction, know that Bitcoin transactions spend stacks of bitcoin called [unspent transaction outputs (UTXOs)](https://unchained.com/blog/what-is-a-utxo-bitcoin/) to make new transaction outputs. To hold some bitcoin is to control a UTXO. UTXOs have their own denominations like banknotes, but they can hold any amount. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This last sentence may be confusing:
UTXOs have their own denominations like banknotes, but they can hold any amount.
When I hear denomination I think of a concrete series of predetermined values: $1, $5, $10, etc. Saying UTXOs have their own denominations, when the denomination can be one of an infinite series of denominations from 1 to 2.56546..., etc. makes the analogy breakdown IMO.
Maybe highlight how UTXOs don't have specific denominations it's limited to, i.e.
To understand the transaction, know that Bitcoin transactions spend stacks of bitcoin called [unspent transaction outputs (UTXOs)](https://unchained.com/blog/what-is-a-utxo-bitcoin/) to make new transaction outputs. To hold some bitcoin is to control a UTXO. UTXOs have their own denominations like banknotes, but they can hold any amount. | |
To understand the transaction, know that Bitcoin transactions spend stacks of bitcoin called [unspent transaction outputs (UTXOs)](https://unchained.com/blog/what-is-a-utxo-bitcoin/) to make new transaction outputs. To hold some bitcoin is to control a UTXO. UTXOs are not limited to any denomination unlike banknotes, and can have values such as 1, to 0.01, or 0.03234. |
docs/how-payjoin-saves.md
Outdated
(10,588 sats are fees for 211.25 vB at 50 sat/vB) | ||
``` | ||
|
||
Since Alice's payment to Bob "[cut-through](https://bitcointalk.org/index.php?topic=281848.0)" to Charlie, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another note: Cut-through being such a powerful benefit from payjoin that feels rarely talked about, this may be worth writing a whole article in and of itself. The only thing on the internet about this is that form post but this topic really deserves a more thorough treatment if it's going to be used as a concept. It took me awhile to understand the significance of what the post was talking about and a more guided walkthrough with real world examples (such as what we provide here) would be very nice to have.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Explanation that helped me understand: https://payjoin.org/docs/why-payjoin/scaling#transaction-cut-through
docs/how-payjoin-saves.md
Outdated
Bob 200,000 sats -> 491,575 sats to Charlie | ||
Bob 300,000 sats |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe this is dumb, but perhaps it would be helpful to list out the fact that Bob has a 300,000
UTXO from the start? I just found myself reading back thru the article to figure out where that number came from, since I don't know what Bob's UTXOs are.
Also, it's confusing that the amount to Charlie isn't round. Why would the amount Charlie gets from the exchange be dependent on the current feerate? I would think the tx would look more like:
Bob 200,000 sats -> 491,575 sats to Charlie | |
Bob 300,000 sats | |
Bob 200,000 sats -> 400,000 sats to Charlie | |
Bob 300,000 sats 91,575 sats to Bob |
docs/how-payjoin-saves.md
Outdated
(8,425 sats are fees for 168.5 vB at 50 sat/vB) | ||
``` | ||
|
||
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions costs: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions costs: | |
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions cost: |
docs/how-payjoin-saves.md
Outdated
|
||
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions costs: | ||
|
||
*2 × base costs + 3 × input costs + 3 × output costs* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is where a real-world example would be nice so we can compare actual numbers, I can work on adding that.
docs/how-payjoin-saves.md
Outdated
1. Bob never had to spend fees on an output from Alice | ||
2. Bob saved the fixed costs of making a second transaction | ||
3. Alice and Bob have better privacy. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bob also saved the time and effort of constructing a second transaction. This also reduced load on the blockchain for others.
docs/how-payjoin-saves.md
Outdated
|
||
Sure, Alice pays for one more input than she would normally here. But if she receives Payjoins she will save fees over time, too. She wants to do her part to scale bitcoin and save the network's privacy. As long as Alice and Bob can Payjoin, they'll both save money and get privacy benefits by default. | ||
|
||
[^1]: Let 𝑏 represent fixed costs, 𝑖 represent input costs, and 𝑜 represent output costs. The cost of the unbatched transactions is 2𝑏 + 3i + 3o. The cost of the batched transactions is 2𝑏 + 2𝑖 + 2𝑜. Thus, the savings from batching is calculated as 1/3(2𝑏 + 3𝑖 + 3𝑜) = 2/3(𝑏) + 𝑖 + 𝑜, which is less than 𝑏 + 𝑖 + 𝑜. In this example The unbatched virtual weight is 152.25 vB + 168.5 vB = 320.75 vB. The payjoin batched virtual weight is 211.25 vB. (211.25 vB / 320.75 vB) = ~0.66, so making these transactions without batching is over 1/3 smaller than with batching. Put another way (320.75 / 211.25 vB) = ~1.51, so making these transactions without batching costs more than 50% more than the cost of making them with payjoin. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[^1]: Let 𝑏 represent fixed costs, 𝑖 represent input costs, and 𝑜 represent output costs. The cost of the unbatched transactions is 2𝑏 + 3i + 3o. The cost of the batched transactions is 2𝑏 + 2𝑖 + 2𝑜. Thus, the savings from batching is calculated as 1/3(2𝑏 + 3𝑖 + 3𝑜) = 2/3(𝑏) + 𝑖 + 𝑜, which is less than 𝑏 + 𝑖 + 𝑜. In this example The unbatched virtual weight is 152.25 vB + 168.5 vB = 320.75 vB. The payjoin batched virtual weight is 211.25 vB. (211.25 vB / 320.75 vB) = ~0.66, so making these transactions without batching is over 1/3 smaller than with batching. Put another way (320.75 / 211.25 vB) = ~1.51, so making these transactions without batching costs more than 50% more than the cost of making them with payjoin. | |
[^1]: Let 𝑏 represent fixed costs, 𝑖 represent input costs, and 𝑜 represent output costs. The cost of the unbatched transactions is 2𝑏 + 3i + 3o. The cost of the batched transactions is 2𝑏 + 2𝑖 + 2𝑜. Thus, the savings from batching is calculated as 1/3(2𝑏 + 3𝑖 + 3𝑜) = 2/3(𝑏) + 𝑖 + 𝑜, which is less than 𝑏 + 𝑖 + 𝑜. In this example, the unbatched virtual weight is 152.25 vB + 168.5 vB = 320.75 vB. The Payjoin batched virtual weight is 211.25 vB. (211.25 vB / 320.75 vB) = ~0.66, so these transactions are over 1/3 smaller with batching than without it. Put another way (320.75 / 211.25 vB) = ~1.51, so making these transactions without batching costs over 50% more than the cost of making them with Payjoin. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is awesome! I didn't realize at first that both articles were really the same thing but one was for exchanges. So we'll have to combine the best of each or split them up but this is a great start!
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
# How Can Payjoin Save 1/3 the Cost of Transacting? | ||
|
||
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm assuming this part is for readers who've read the "how payjoin saves" article first?
Let's change the title of this one, move them both under an umbrella folder "how payjoin saves" under "why payjoin", and then order them with this being the second, perhaps? I'm happy to do this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As a reader, I would love to have:
- A diagram of an example batch purely for purposes of explaining what a batch is, for intuition
- A real-world transaction of a batch that we know for sure is an exchange doing a batch, and drop a screenshot of it from mempool.space here, for real world example to solidify the intuition.
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
# How Can Payjoin Save 1/3 the Cost of Transacting? | ||
|
||
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we perhaps reference when the common input ownership heuristic since people know that as the chainalysis breaking rule and payjoin references it everywhere already?
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. | |
Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others, or used to open lightning channels, for example. This combination could save significant overhead to every transfer. It also provides an opportunity for much better privacy. Like Bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed, breaking the [common-input-ownership heuristic](https://en.bitcoin.it/wiki/Common-input-ownership_heuristic) |
docs/how-payjoin-saves-exchanges.md
Outdated
~2 BTC minus fees to Exchange | ||
``` | ||
|
||
Each transaction would cost the exchange 𝑏 + 𝑖 + 2𝑜, and they would pass the fees onto their customers in order to make a profit. The sum of these costs would be 3𝑏 + 3𝑖 + 6𝑜, which would come out of the final ~2 BTC change the exchange makes at last. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I love your use of formulas in these articles. I'd love to go through some more formalization of calculating cost on bitcoin (later), this makes things feel very legitimate to me that our claims are verifiably true. How infrequently do organizations themselves take the time to do that?
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
## Payment Batching | ||
|
||
Batching helps the exchange save time and money in two ways. First, the overall cost to post such a transaction is cheaper than the sum of three individual transactions to produce the same result. Second, a single unspent output can fund multiple withdrawals. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should put a comprehensive list of every benefit we can think of somewhere:
- Cheaper
- Faster
- More private (for everyone!)
- Less technological/mental overhead
- Less bloat on the blockchain (this is quite literally a way for exchanges to market themselves as environmentally friendly & reduce their carbon footprint, not to mention contribute to keeping fees lower for us all)
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
## Payjoin Payment Batching | ||
|
||
What if Dave the depositor can payjoin? He gets a benefit of breaking some privacy heuristics, and he can save the exchange some fees that might be able to be pased on to him. Payjoin lets the exchange fund withdrawals with Dave's deposit in the same transaction. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if Dave the depositor can payjoin? He gets a benefit of breaking some privacy heuristics, and he can save the exchange some fees that might be able to be pased on to him. Payjoin lets the exchange fund withdrawals with Dave's deposit in the same transaction. | |
What if Dave the depositor can Payjoin? He benefits the whole network by breaking some privacy heuristics, and he can save the exchange some fees that might have been passed on to him. Payjoin lets the exchange fund withdrawals with Dave's deposit in the same transaction. |
docs/how-payjoin-saves-exchanges.md
Outdated
(10,588 sats are fees for 211.25 vB at 50 sat/vB) | ||
``` | ||
|
||
Since Alice's payment to Bob "[cut-through](https://bitcointalk.org/index.php?topic=281848.0)" to Charlie, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Question: this feels obvious and dumb to ask, but cut-through is only applicable to unconfirmed transactions, yes? Meaning whatever cut-through the participating parties do must be done opportunistically and any software that uses this would have to have some rules to know when such opportunities are available. This is all just to say we don't really see this ever really being used as a manual process, correct?
docs/how-payjoin-saves-exchanges.md
Outdated
|
||
Payment batching is table stakes service for high-volume settlement services like exchanges and payment processors. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with withdrawals to others and lightning channel opens etc. This combination could save significant overhead to every transfer. And it provides an opportunity for much better privacy since, like bitcoin itself, only inputs and outputs are recorded but less information about which inputs and outputs are clustered would be revealed. | ||
|
||
Transactions compete to get included in blocks according to network fees they pay since each block is limited to a fixed weight. At a high level, each transaction weight pays some base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they are, and be backed up by examples of real transaction. For example, a simple exchange could have 5 btc in their treasury and sell 1 bitcoin each to Alice, bob, and Carol. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Transactions compete to get included in blocks according to network fees they pay since each block is limited to a fixed weight. At a high level, each transaction weight pays some base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they are, and be backed up by examples of real transaction. For example, a simple exchange could have 5 btc in their treasury and sell 1 bitcoin each to Alice, bob, and Carol. | |
Transactions compete to get included in blocks according to network fees they pay since each block is limited to a fixed weight. At a high level, each transaction weight pays some base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they are, and be backed up by examples of real transactions. For example, a simple exchange could have 5 btc in their treasury and sell 1 bitcoin each to Alice, bob, and Carol. |
docs/how-payjoin-saves-exchanges.md
Outdated
Dave 3 btc -> 1 btc to Alice | ||
Exchange 2 btc 1 btc to Bob | ||
1 btc to Carol | ||
~2 BTC minus fees to Exchange | ||
``` | ||
|
||
𝑏 + 2𝑖 + 4𝑜 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This just assumes that the exchange chooses to batch 1 UTXO. Theoretically there is no limit to how many UTXOs could be batched here? In which case the formula could be more general to account for the number of Exchange/receiver-added UTXOs?
Heck, if an exchange needs to batch many UTXOs, the exchange could even provide a financial reward for someone who deposits via a Payjoin, provided the fees saved by the exchange by the payjoin outweigh the fee cost of the transaction?
docs/how-payjoin-saves-exchanges.md
Outdated
(8,425 sats are fees for 168.5 vB at 50 sat/vB) | ||
``` | ||
|
||
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions costs: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions costs: | |
Space in the blockchain is limited, and transactions pay for base costs of the transaction header, costs for each input and costs for each output. Making these two transactions cost: |
db79e45
to
fd658e7
Compare
docs/how-payjoin-saves.md
Outdated
|
||
# How Can Payjoin Save 1/3 of the Cost of Transacting? | ||
|
||
Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with others' withdrawals. This combination saves significant overhead compared to making individual transfers, [scaling Bitcoin](./why-payjoin/scaling). It also results in better preserved [privacy](./why-payjoin/privacy) since, like bitcoin itself, only inputs and outputs are recorded, but less information about which inputs and outputs are clustered would be revealed, breaking the [common input heuristic](https://en.bitcoin.it/wiki/Common-input-ownership_heuristic) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Much improved!
Bitcoin casing inconsistent, missing period:
Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with others' withdrawals. This combination saves significant overhead compared to making individual transfers, [scaling Bitcoin](./why-payjoin/scaling). It also results in better preserved [privacy](./why-payjoin/privacy) since, like bitcoin itself, only inputs and outputs are recorded, but less information about which inputs and outputs are clustered would be revealed, breaking the [common input heuristic](https://en.bitcoin.it/wiki/Common-input-ownership_heuristic) | |
Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with others' withdrawals. This combination saves significant overhead compared to making individual transfers, [scaling Bitcoin](./why-payjoin/scaling). It also results in better preserved [privacy](./why-payjoin/privacy) since, like Bitcoin itself, only inputs and outputs are recorded, but less information about which inputs and outputs are clustered would be revealed, breaking the [common input heuristic](https://en.bitcoin.it/wiki/Common-input-ownership_heuristic). |
docs/how-payjoin-saves.md
Outdated
|
||
Payment batching is the most common way for high-volume settlement services like exchanges and payment processors to save fees. But it has been limited to one party, the sender, combining multiple sends together. Ideally, multiple types of transfers could all be combined together. Imagine your deposit to an exchange was batched with others' withdrawals. This combination saves significant overhead compared to making individual transfers, [scaling Bitcoin](./why-payjoin/scaling). It also results in better preserved [privacy](./why-payjoin/privacy) since, like bitcoin itself, only inputs and outputs are recorded, but less information about which inputs and outputs are clustered would be revealed, breaking the [common input heuristic](https://en.bitcoin.it/wiki/Common-input-ownership_heuristic) | ||
|
||
Transactions compete to get included in blocks according to network fees they pay since each block is limited to a fixed weight. At a high level, each transaction weight pays some base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they do, and be backed up by real examples. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if we should mention the concept of weight, since this may be a confusing term for people not familiar with Segwit. Or if we do, maybe link the term "weight" to some Segwit article. I think everyone gets the idea that blocks are storage limited, calling it weight is perhaps unnecessarily technical. Perhaps:
Transactions compete to get included in blocks according to network fees they pay since each block is limited to a fixed weight. At a high level, each transaction weight pays some base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they do, and be backed up by real examples. | |
Transactions compete to get included in blocks according to network fees they pay since block space is limited. At a high level, each transaction pays for base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they do, and be backed up by real examples. |
docs/how-payjoin-saves.md
Outdated
|
||
Transactions compete to get included in blocks according to network fees they pay since each block is limited to a fixed weight. At a high level, each transaction weight pays some base costs (𝑏), per-input costs (𝑖) and per-output costs (𝑜). In reality not all inputs and outputs have equal cost but the principle can be explained assuming they do, and be backed up by real examples. | ||
|
||
Take a fictional exchange with 5 BTC in their treasury selling 1 bitcoin each to Alice, bob, and Carol for example. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Take a fictional exchange with 5 BTC in their treasury selling 1 bitcoin each to Alice, bob, and Carol for example. | |
Take a fictional exchange with 5 BTC in their treasury selling 1 bitcoin each to Alice, Bob, and Carol for example. |
docs/how-payjoin-saves.md
Outdated
|
||
Batching helps the exchange save time and money in two ways. First, the overall cost to post such a transaction is cheaper than the cost of making three individual transactions to produce the same result. Second, a single unspent output can fund multiple withdrawals without waiting for each one to settle. | ||
|
||
your typical exchange withdrawal looks like this: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
your typical exchange withdrawal looks like this: | |
Your typical exchange withdrawal looks like this: |
docs/how-payjoin-saves.md
Outdated
|
||
## Payjoin Payment Batching | ||
|
||
What if Dave the depositor can payjoin? He gets a benefit of breaking some privacy heuristics, and he can save the exchange some fees that might be able to be pased on to him. Payjoin lets the exchange fund withdrawals with Dave's deposit in the same transaction. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if Dave the depositor can payjoin? He gets a benefit of breaking some privacy heuristics, and he can save the exchange some fees that might be able to be pased on to him. Payjoin lets the exchange fund withdrawals with Dave's deposit in the same transaction. | |
What if Dave the depositor can payjoin? He gets a benefit of breaking privacy heuristics, and he can save the exchange some fees that could be passed on to him. Payjoin lets the exchange fund withdrawals with Dave's deposit in the same transaction. |
docs/how-payjoin-saves.md
Outdated
Exchange 2 btc ~5 btc minus fees to Exchange | ||
``` | ||
|
||
However, such transactions are more difficult to coordinate, so it will take an effort to develop this new protocol and get it deployed. Integrating Payjoin V2 can save money, improve privacy, and help get to the next iteration that massively fixes bitcoin's privacy through batching. Batching Bitcoin, saving sats, and preserving privacy seem like different goals, but with a little communication, the three goals can be achieved in every single transaction. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
However, such transactions are more difficult to coordinate, so it will take an effort to develop this new protocol and get it deployed. Integrating Payjoin V2 can save money, improve privacy, and help get to the next iteration that massively fixes bitcoin's privacy through batching. Batching Bitcoin, saving sats, and preserving privacy seem like different goals, but with a little communication, the three goals can be achieved in every single transaction. | |
However, such transactions are more difficult to coordinate, so it will take an effort to develop this new protocol and get it deployed. Integrating Payjoin V2 can save money, improve privacy, and help get to the next iteration that massively fixes Bitcoin's privacy through batching. Batching bitcoin, saving sats, and preserving privacy seem like different goals, but with a little communication, they can be achieved in every single transaction. |
This is an article introducing the idea of payjoin through cost savings.
It definitely needs graphics instead of preformatted text blocks and links to actual transactions to show reality, but the idea is here.
@thebrandonlucas what do you think?