1 dev/Fee Market
TomZ edited this page 2023-04-29 23:44:49 +02:00
Table of Contents


The system of Bitcoin has various moving parts which balance each other out amazingly well. The various components are there to keep the balance and none can be removed if we intent to keep the balance over extended time.

Let us look at some of these parts in context.

The security of the chain is protected by mining, and that has to be paid for. The block-reward given to miners every block is the reward to keep miners honest. The block reward is halved every 4 years and as a result mining fees should replace them long term in order to keep sufficiently paying the miners. If we stop paying miners, it becomes too cheap to cheat the system with things like chain-reorgs and double spends.

As long as the value of each coin doubles every 4 years there is not really a need to have fees to pay for this security because that counters the halving of the amount of coins we pay out.
But it is easy to predict that if we start charging fees 20 years from now that such an introduction will be extremely hard to do. The sane thing to do is have very low fees now and grow the income from fees over time in order to, long term, completely replace the block rewards.

The amount of fees being paid for each block depends on the amount of fee-paying transactions included in the block as well as the fees paid for each. We can generally speaking keep the fees about the same value as we expect the number of transactions being processed to go up every year.

The value paid to miners from fees is similar to block-rewards relative to the value of the coin. If the value of the coin doubles every 4 years, the amount of fees needed to be paid can be halved to reach the same amount. Even with the amount of transactions staying the same.

The general conclusion people should make at this point is that fees earned by miners will go up over time in some indeterminate and impossible to predict way based on how many people use it and the changes in the market value of the coin.


In Bitcoin there is the minimum amount of coin that can be send to a single coin and this is called the 'dust limit'. Anything below this limit is not allowed.

You might ask yourself why this is brought up after just talking about fees and I'm happy you ask as that indicates you are definitely paying attention. Also the link is not immediately obvious.

The dust limit has a practical reason for existing, and it is fees related. The practical reason for existing is that an coin on the chain can be spent by the owner only if a small fee is being paid. So the idea is that it makes no sense for people to create a single coin on the chain if it would be more expensive to spent than it is to ignore it.

Imagine a simple 1 input and 1 output transaction. Add to this a single input that spends some dust-coin. Does adding this extra input increase the amount I can send to the output, or coin? Or does it cost more in fees to spend it than it gives me? If it costs more than it gives, it will likely never be spent.

The dust limit exists to avoid creating coins that will never be spent. It is directly tied to fees, because the fees are the cost of spending a coin. If fees were zero, there would be no cost and maybe the dust limit could be zero.

User's Attacks

With growing popularity it is expected that operating a full node goes up in absolute cost. Afterall, there will be more people using it, more transactions sent and more wallets in use. Technological advances in hardware as well as in software are expected to keep the cost of this growth manageable. Provided that growth is natural and only really the effect of user growth.

If, on the other hand, some people are having fun, they might consider splitting a single coin into thousands of coins never to touch that again. If that is done once, nobody cares. But do it often enough and our scaling process may become harder to achieve. A lot of coins that are never spent will for instance make the initial sync where only the coin-database (UTXO database) is downloaded much less attractive. The idea is still in development under the term "commitments", but our actions today make a difference for a lifetime.

The general observation about people is that if a certain action is artificially made zero cost, eventually someone will abuse it and drive up the cost for everyone. The term "Tragedy of the commons" is used to explain this concept.

The 'dust-limit' we talked about in the previous section is meant to protect the system against coins that will never be spent. As such there is a simple limit to such a prankster splitting a coin into many coins.

The dust limit, however, is directly tied to minimum fees and those are entirely unpredictable because they are set by the market value and the amount of transactions that actually pay fees on an average day. We have seen a lot of massive 'dusting' transactions in the history of Bitcoin Cash that prove the point.

So this raises the simple question: if there is a cost to "wrong" usage of the chain, how can we ensure that the cost of daily usage reflects this. Because the free market is excellent in limiting bad usage by simply charging people more for things that cause extra costs. Or, the other way around, if we can determine what the cost is of so called "bad' usage and charge only those transactions higher, we can avoid the socialization of costs associated with those bad behavior transactions. And if people pay a fair value for transactions that cost the system more, they are no longer "bad" transactions. They are just more expensive ones.

Cost of a transaction

In today's Bitcoin we see that the fee of a transaction is directly related to the amount of block-space this transaction occupies. And this makes a lot of sense, especially if you consider our heritage which had a severely limited blocksize.

The cost of a transaction is expressed in fees and covers the fact that it is included in a block, but it doesn't really take into account the cost of a coin possibly being sent there and never spent. For instance if its super small. The cost of sending a fraction of a cent is still equal to the cost of a million dollars on Bitcoin. Likewise the fees do not take into account the benefit generated by someone actually using Bitcoin for payments. Naturally, in most situations those two cross each other out.

But what if they don't? What if someone creates a million tiny little outputs that from this day forward will be needed to be stored in the UTXO database? This is not reflected in the fees today. The fact that we have seen a lot of 'dust attack' transactions in the past shows that the dust-limit likewise did not solve this.

The true cost of a single transaction is not represented by the current fee. Instead, the fee structure is meant to be an average based on expected usage. With the expected gains in chain-utility that come with it. If you don't follow that expected usage your transaction may end up being called a "bad" transaction.

Imagine an application that takes the current temperature of a single person's livingroom and every hour they create a transaction with in it a comment with the temperature and humidity. This is sent to the Bitcoin Cash blockchain and indeed mined.
These transactions are different from transactions paying Travalla or any merchants for products. Both types probably pay exactly the same fees but one is just data and the other is a medium of exchange. Using a medium of exchange leads to the coin becoming a store of value. Whereas storing your private data on-chain is not helping anyone. And this begs the question, is it fair to charge the same fees for both types of transactions?

If you are not certain about that, let me put it this way: there is a strong benefit to keeping the fees for transactions low in order to allow the maximum usage of the chain and create a greatest value in terms of a medium of exchange. However, a low fee means a high chance of people using it as something other than a medium of exchange. Just because they can.
And the inevitable effect of that is like I'm taking the car to work but not being able to go faster than 20 due to all the people driving their scoot-mobiles on the normal roads.

We have to conclude that the true cost of a transaction is more than just the space in a block.
Another cost is the usage in the UTXO database. The cost of a transaction that is not using the chain as a medium of exchange is higher than one that does. Two people ping-ponging the same coin 100 times a day between themselves simply causes a longer waiting time for the normal people paying normally for their purchases.

It would stand to reason that if a transaction is priced in a way that closer reflects the actual cost that any abuse of the system goes down since abuse transactions would be priced at their honest cost, so more expensive and that the actually valuable transactions are then given the highest priority.


We ponder a set of metrics that are easy to determine and each have their benefits and drawbacks.

Inputs / Outputs ratio

Any transaction combines a certain number of coins in its inputs and sends the funds to new coins in its outputs. When we look at the cost of a transaction we can see that inputs remove entries from the UTXO database and outputs create new entries in the database.

It is fully expected that the UTXO database will grow. More people having some money in their wallet means more entries in the UTXO database. This growth does need to be measured, the cost of operating a full node goes up as the UTXO database grows. We can offset that with technological advancements which make the price of hardware go down, but only if the growth of the UTXO database doesn't sky-rocket.

A merchant that gets paid in Bitcoin Cash all day every day may end up with thousands and thousands of coins in his wallet. In our current system that person would spend quite some funds to combine all those outputs into a couple of bigger ones that are easier to manage. The cost he makes today is purely based on blockspace, however. It is in actual fact a benefit to the full node operators that he makes such a consolidation transaction as that removes a lot of entries from the UTXO database.

Conversely, a single person that wants to hurt all those nodes and the growth of Bitcoin Cash (or just for the fun of it) may take a single coin and split it into a couple of thousand coins sent to random addresses.

All of these examples show that the cost, to the network, of a transaction is related to the ratio between inputs and outputs. More inputs than outputs is good for the network. More outputs than inputs generates a higher cost for the network, even though the transaction is often smaller.

Coin-days destroyed

This is following a very old idea in Bitcoin. (Its more than a decade old!)

We take the number of days between a transaction that created a coin and the time that coin is spent, then we multiply that with the actual value of the coin and this is the coin-days destroyed.

Example: I sent 10 mili-BCH to my wife, 13 days later she buys something that spends that specific coin. This 'destroys' 130 mili coin-days.

The metrics itself is easy to understand, higher number when there is more money involved and higher number when that money has not been moved for a while.

Imagine a bot that creates a simple transaction every hour and sends it off to mine. This bot would have an extremely low score on the CDD metric because the coins are so fresh. Next to that, nobody is going to put a very high amount in a bot that sends lots of transactions, lowering the score even more.

The concepts of money, specifically "method of exchange" and even "store of value", are more clear when the values being sent are higher. Doing payroll payments, for instance. Or simply buying a fridge. This is not black / white but more a gradient where Higher amounts are stronger indications of economic activity and indeed make the chain more like money.

Casual observation of normal commerce shows that the majority of people make a small number of transactions per day. Roughly less than 20, many less than 10. The amount of transactions made directly reflects the age of any specific coin, especially in a wallet that is aware of the CDD design. A transaction that spends outputs less than a week old is much less likely to be used for normal economic activity.

The idea of CDD is a reasonably cheap method to determine a lot about a certain transaction. There are various causational effects that can help determine the benefit a transaction will have to the function of money of the chain. A transaction used in commerce supports the "method of exchange" property of money, and thus we benefit more from such transactions.
Transactions with very low CDD give the chain no such benefits and as a result we should consider them to be of higher cost to the ecosystem that is processing them.

Transaction size

This is the current only statistic used for setting of fees, the transaction size is counted and each byte costs a certain amount of Satoshis.

This still makes a lot of sense to keep, but probably in combination with other metrics.


The simple metric of fees paid to the miner is naturally relevant to mention.

Fees are the basic metric we use to determine cost to the end-user. It is also the main income for mining and thus the security of a chain. Therefore we know that the fees won't go away.

What we do know is that if the chain is highly successful we'll get to fill really big blocks with transactions. If we keep the fee-price we have today we'll end up replacing the block-reward completely in just 5 to 10 years. While that may sound like a success, the side-effect is that we are overly expensive and other chains may out-compete Bitcoin Cash by simply getting similar scale.

Fees are easy to compare with a worker's hourly wages. You need to pay enough to keep good workers interested to do the work, but if the prices go up too much people will go to the competition.

Everyone will benefit from a fee market. Provided the miners market will continue to be open for competition.





Feedback & Reviews