Fee optimization is possible through diverse techniques varying from segregated
witness, transaction batching, RBF (Replace By Fee) and fee estimation.
Calculating exact transaction fee savings from the last two techniques, RBF and
fee estimation, is quite difficult—but segwit and batching gains can be modelled
to hypothetical scenarios since their improvements are measurable.
In our report, we wanted to model what full adoption of native segwit (P2WPKH or
P2WSH) and transaction batching would look like for the network compared to the
partial adoption that we currently see. We wanted to determine the transaction
fees that could be saved, how that has changed over time and how it impacts
block space and block weight.
Our modelling for transaction batching is based on David A. Harding’s formula
for detecting whether a transaction spends coins it received in the same block.
If so, those transactions can hypothetically be batched and the transaction
weight reduced. After batching all potentially batchable transactions, we
combine the size of the hypothetical block and compare it to the real block
size. From there, we can calculate the bytes that were saved and the percentage
this saving represents. Finally, if we take the size of each block and remove
the size of the block header and the miner’s coinbase transaction, we
can divide the saved size by this new amount. The percentage
we get is an approximation of the fees that would’ve been paid in the case of full adoption.
Our code for analysing the data and calculating the potential savings is
For segwit, we analysed from block 481,825, which happened on the 24th of August
2017, the day of segwit activation, until block 637,090 on the 30th of
June 2020. Our method goes through every input of every transaction and if the
input isn’t native segwit, it calculates the weight it would save if it were
native segwit, which can then indicate to us the amount of fees it could save.
Finally, we collect the block weight and block fee of each block in reality and
also collect the potential block weight and potential block fee of our model by
summing up the results of each transaction. You can find the repository of our
code used here.
Assuming a bitcoin price of $9,250 (correct at the time the report was published):
- From January 2012 to June 2020 (until block 637,090) 211 thousand BTC
were paid in fees to miners. This amounts to a total of around $2 billion
- Total savings during that period amounted to almost 58 thousand BTC representing
an amount of about $530 million USD. This represents a percentage of around 27.36%
over the grand total of transaction fees paid.
- Over 21 thousand BTC could have been saved by Bitcoin users if they
would have all been using transaction batching, a savings of 10% or
almost $200 million USD.
- From 24 August 2017 to 30 June 2020, about 37 thousand BTC could have
been saved by Bitcoin users if they would have all been using segwit native
(bech32), down from over 97 thousand BTC
actually paid in fees, which is 38% in savings or about $340 million USD.
- The advantages brought through optimized fee management techniques such as
segwit and batching are most impressive and apparent during high transactional
activity periods. A large percentage of the possible savings would have been
achieved in only a few key months over the span of 8 years and 6 months
Read our full report here to understand
the progression of fee savings over time.