>> April 22, 2020
>> Blog Post #62
As I was saying in the last blog post I am very hopeful that people in the bitcoin space are going to actively collaborate to piece together their bits and pieces and offer a better bitcoin to all. This here is a good example of this.
I am still slowly setting up my website, but eventually it will have a store attached to it. One of the payment options will be bitcoin and I will use BTCPay Server as my payment processing software to do so. The BTCPay Server instance I have is running on one of the bitcoin nodes I run.
BTCPay server is terrific and I’ve used it for quite some while now, but it just got better with the 18.104.22.168: “Block 626048” release, which introduces Payjoin support.
Payjoin is a specific type of bitcoin transaction that is designed to enhance privacy for users.
I’ll try to summarize it briefly while maybe giving readers who are not as familiar with how bitcoin works, a few examples.
I am going to the bakery to buy bread. I ask for a baguette, which costs 1 € and pay for it with a 10 € bill. The transaction looks like this. I give the baker 10 €, he keeps 1 € and returns 9 € to me.
I am trying to purchase the same baguette but only have a few coins in my pocket. I have a 50c and three 20c coins. I give them all to the baker, who keeps the equivalent of 1 € since he will hand me back 10c in change.
If you were trying to make the same payments in bitcoin, it would work exactly the same. Whatever you have in your pockets is used as the input to come up with enough money to pay for the product or service you are looking to buy. The recipient of the transaction will keep what he is owed, and there is a third component, the change that is paid back to you. (for people more familiar with bitcoin, the actual recording of transactions in an “accounting” type of view is different, but I am just trying to explain here what inputs, outputs and change are).
Some people are trying to attack bitcoin by tracking its users’ transactions – the chain analysis companies. This is absolutely unacceptable, as bitcoin should be fungible, meaning 1 bitcoin should be absolutely equal to any other bitcoin out there. They are replaceable by one another. Nothing you do with a bitcoin through your behavior can enhance or reduce the value of a bitcoin.
1 bitcoin = 1 bitcoin
However, the chain analysis companies are trying to flag users and bring AML/KYC rules in the bitcoin environment. They do so by analyzing the blockchain and trying to determine what people do with their coins. They do this through the use of math and … guesswork.
Take example 2 above. When you look at a transaction that adds 50+20+20+20 and that transaction input gives birth to two output transactions: one for 100 (1€) and one for 10, it is fairly easy to determine that a user took several coins to pay for a product or service that cost 100 and that 10c is the change. If the service was 10c, the user would have only used one of his coins to pay for it. So, the chain analysis company has actually learned a lot from this transaction, but only if one of their assumptions is correct…
The common input ownership heuristic
One element of “guesswork” chain analysis companies rely on is that they consider that all inputs used to build a transaction actually belong to the same user. After all, it is fairly rare for you to buy bread with coins that belong to the person sitting in front of you in the line at the bakery.
Payjoin destroys that heuristic if it is implemented.
In a Payjoin transaction, both the sender and the recipient of a bread purchase will contribute coins to the transaction. The transaction generates the appropriate amounts of (1) payment for the recipient and (2) change for the sender based on both parties’ contributions to the payjoin.
So, what are the advantages?
Payjoin is a privacy enhancement for the network as a whole if implemented. By making it possible for different users to collaborate in creating the input of a transaction, payjoin breaks the assumption that all inputs belong to the same user. Today, I know of one wallet that proposes such a feature, Samourai Wallet. Through the use of the “Stowaway” feature, Samourai Wallet users can collaborate to create payjoin type of transactions.
Better privacy for users is terrific!
But there is also another benefit, this time for merchants. By contributing some of his own coins to the input of the transaction, the merchant will gain the ability to get rid of his spare change and consolidate his pesky cents into larger amounts. In bitcoin terms this is batching and is very useful in order to save on network fees. Through the whole process, the merchant too will gain the privacy benefits of no one knowing which coins are his and which coins are the customers.
I’m really super happy this is coming to BTCPay Server and can’t wait to implement it on this website and offer this as a feature to future customers.
Super Bullish! And congrats to the BTCPay Server team for this implementation of Payjoin (P2EP)!
Here is the official announcement made by BTCPay Server