What if I told you that there’s a way you can save more than 80% on transaction fees by compressing your Bitcoin transactions? You’d most likely think I wasgoed crazy or wasgoed proposing a radical switch to the Bitcoin system. But I’m not.
Since the earliest version of Bitcoin, it has bot possible to combine numerous Bitcoin payments into a single transaction, significantly reducing overhead. Ter this article, we’ll describe why payment batching works, how much it can save you, how to use it, and how much block chain space would be saved if it wasgoed used more frequently.
Inputs, switch outputs, and payment outputs
Let’s imagine buying lunch at a local pub. Very first, we’ll pay with physical specie to see how it works and then we’ll switch to electronic contant — that is, bitcoin — to see the similarities.
Alice the customer has a pleasant lunch at Bob’s Pub and is introduced with a bill by hier waiter Charlie for $Ten. Alice pays Bob with a twenty dollar bill and receives $Ten ter switch.
Bitcoin transactions work basically the same way. To keep the examples ordinary, let’s imagine one bitcoin equals one dollar. Alice receives the bill for Ten BTC and starts a transaction by adding a 20 BTC input from hier wallet. Then she adds two outputs: a Ten BTC output that goes to Bob and another Ten BTC output that comebacks the switch to hier own wallet.
Here’s what Alice’s serialized Bitcoin transaction looks like, with the different parts colored according to how they’re used: white for the boilerplate parts of the transaction, pink for Alice’s input, green for Alice’s switch, and blue for the payment to Bob.
And here are the sizes of each part of the transaction:
But wait, Alice almost left behind to peak Charlie for his excellent service. For physical metselspecie, Alice makes a 2nd transaction by taking the $Ten she received ter switch, trading it for some puny denomination money, and leaving a 15% peak of $1.50 on the table, keeping the other $8.50 ter switch for herself.
Te Bitcoin, Alice also creates a 2nd transaction ter order to pay Charlie a peak. Since each normal single-payment transaction te Bitcoin has exactly the same parts spil the transaction illustrated above, the 2nd transaction requires adding another 226 bytes to the block chain for a total of 452 bytes.
A more efficient way
Alice could increase hier efficiency by combining thesis two separate payments into a single transaction. For physical specie, this is similar to Alice paying hier original bill by handing Charlie $20 te physical specie and telling him to pay both Bob and himself by only bringing back $8.50 ter switch — keeping the surplus ($1.50, or 15%) spil a peak.
Ter Bitcoin, Alice adds an extra output to hier transaction (shown below ter yellow) that pays Bob his 1.Five BTC peak:
Here’s are the sizes ter the fresh batched payment:
This total of 260 bytes is considerably less than the 452 bytes it took us to create two separate transactions ter the previous section.
Looking closely, wij can see that the only difference ter byte sizes inbetween a single payment and a batched payment is the number of non-change outputs. Everything else te the transaction stays the same. This permits us to create a quick function for computing the amount of bytes used vanaf payment spil the number of payments (outputs) ter a single transaction increases.
Wij add up the bytes used by the container, input, and switch output (Ten + 148 + 34). Then for each extra payment, wij add 34 bytes to the transaction (x * 34). Eventually, wij divide the total bytes by the number of payments (x) to get the number of bytes used vanaf payment. Here’s the result of plotting our function:
Wij see that combining Ten payments together is about 25% the byte size of Ten payments made separately, saving about 75%. Slightly more can be saved spil the number of payments vanaf transaction increases.
A few months ago, the Bitcoin exchange Kritiseren enlargened its withdrawal fees to 0.0025 BTC (about $7 USD at the time), after a number of customer complaints, they instituted payment batching and lowered their toverfee to 0.001 BTC (about $Two.80 at the time).
This has a notable downside. When you receive your withdrawal from Openbreken, you can look up your transaction on a block chain explorer and see the addresses of everyone else who received a payment te the same transaction. You don’t know who those recipients are, but you do know they received bitcoins from Losbreken the same spil you.
That’s not good for privacy, but it’s also perhaps not the worst thing. If Losbreken made each of those payments separately, they might still be connected together through the switch outputs and perhaps also by certain other identifying characteristics that block chain analysis companies and private individuals use to fingerprint particular spenders.
However, it is something to keep ter mind if you’re considering batching payments where privacy might be especially significant or already somewhat powerless, such spil making payroll te a puny company where you don’t want each employee to learn the other employees’ salaries.
Using transaction batching yourself
For a high-frequency spender such spil an exchange, payment batching can pay an instantaneous large dividend ter saved transaction fees (or more satisfied customers if the savings is passed along). This is especially true for businesses that already use Bitcoin Core or other utter knots with a similar API. Instead of sending payments with the `sendtoaddress` RPC like this:
sendtoaddress 1FjdYJTkdmA2KYvGqRX3G3WJeTFABgUJsJ 1.23
sendtoaddress 194hTHKyJchh6dV8a5Ce5Jd1ENEaxMyKUK Four.56
You batch payments using the `sendmany` RPC like this:
For lower frequency spenders, the very first step of payment batching is waiting until you have several different payments you want to send at the same time. For example, say you want to renew a domain on Gandi.netwerken, buy a bounty card to Amazon.com from Gyft.com, and pay your monthly VPN bill from PrivateInternetAccess.com. Open Bitcoin Core, go to the Send screen, and inject the address and amount for the very first merchant (Gandi ter our example). Then click the Add Recipient button:
Fresh come in the address and amount for the 2nd merchant, click the Add Recipient button again, and come in the address and amount for the third merchant:
Then select your toverfee and other options like normal and click Send. If you pay close attention to fees, you’ll notice the overall toverfee for this transaction is slightly higher than that for a normal single payment (because this transaction is about 68 bytes larger than a normal single payment), but you’ll also notice that’s about 57% procent less than you’d pay for three separate normal single payments.
Realistically, how much space could wij save?
Not every payment can or should be batched, but I think there’s a way wij can get a quick estimate of how much payment batching could save us on Bitcoin today. When wij look at a block, wij can see which transactions have inputs that are also outputs of an earlier transaction ter the same block.
All of the related payments ter a single block could’ve bot batched without any reduction ter speed, and possibly with ondergrens reduction ter privacy, so we’ll use that spil a rough approximation of the ondergrens amount of block space wij could save if payment batching wasgoed more widely used. If users are willing to wait longer to send their transactions, they could batch even more payments and save even more block space.
Writing some quick code and taking a look at an arbitrarily-selected latest block, block 480,000, wij get the following statistics:
- Actual total size of all transactions: 997,883 bytes
- Hypothetical size if all related transactions ter that block were batched: 907,839 bytes
- Bytes saved: 90,044
- Percentage savings: 9%
At the time of writing, the average toverfee rate overheen the past 144 blocks (one day) is 236 satoshis vanaf base byte and the Bitcoin price is $Four,550 USD, so if each of the 144 blocks te an average day saved 90,000 bytes, the estimated savings available would be about 30.58 BTC or $140,000 USD vanaf day.
Want to get curated Technical Bitcoin News? Sign up for the Bitcoin Tech Talk newsletter!