Why are fees vital in a healthy blockchain?

It’s common to hear people saying “why do we need to pay transaction fees to use this coin?” Some elaborate more and say “aren’t block rewards enough? These miners are extorting us.”

In this article, I will try to explain why blockchains need fees to be sustainable.

Well, if the goal was just to encourage the miners to mine, then yes, block rewards are enough, at least for a while. Maybe after some halvings, this might change for BTC, but today it isn’t a determinant factor.

According to https://www.blockchain.com/pt/charts/transaction-fees, on the vast majority of the days of the last 6 months, the volume collected with fees does not exceed 30 BTC. For comparison, considering 12.5 BTC as a base reward and 10 minutes as the average time between blocks, 1,800 BTC are generated per day. Currently, fees are less than 1.5% of miners income on average.

Theoretically, blockchains are decentralized. Moreover, they are supposed to be immutable and uncensoredConsidering these idiosyncrasies, there must be ways to defend the ecosystem of attacks without centralized interventions.

The Proof of Work protocol by itself is a way to protect the blockchain. By solving the Byzantine Generals’ Problem, it’s possible to neutralize corrupt players without a central authority. The same is true for transactions fees: they are necessary to prevent unscrupulous people from flooding the network, although they also serve as a form of incentive to miners.

Flood attack/Dust spam/Penny-spend attack

flood attack/dust spam/penny-spend attack is an attack characterized by the sending of infinitesimal fractions of certain cryptocurrency to an absurd number of different addresses. If there were no fees, a malicious actor could do this for free, filling the blocks with useless transactions, increasing the size of the blockchain unnecessarily, increasing the consumption of RAM with UTXOs and making it impossible for people to run a full node. This would kill any chain after some time.

According to https://www.blockchain.com/pt/charts/utxo-count, there are currently next to 60,000,000 Unspent Transaction Outputs in the Bitcoin network. How much would it cost to double that?

Well, it’s possible to create big transactions with many outputs to minimize fees. Supposing 10 bytes for transaction header, 100 bytes for inputs and previous transaction reference and 50 bytes for each output, it’s possible to create 200 outputs with a (10+100+50*200)=10110 bytes transaction. Paying 3 satoshi/byte results in 30330 satoshis per transaction. Whereas it was sent 1 satoshi in each output, the price is 30530 for 200 outputs.

So doubling Bitcoin UTXOs would cost 92 BTC with a 3 satoshis/byte fee. It would also increase the blockchain by ~3 GB. But it’s very unlikely that miners would add so many transactions for so little, even less likely to do so with such large transactions. Considering competitive fees of 42 satoshis/byte to be added in the next block, it would cost 1274 BTC. It’s also necessary to consider how long it would take to do this. Assuming this crazy guy place one of these transactions per block, it would take 300,000 blocks, something like 5.7 years. I classify an attack like this as unfeasible. Also, the UTXO database tends to grow naturally, after so much time the natural growth is significant by itself. Therefore BTC passed the testdespite it having been targeted by a similar attack 3 years ago which was able to flood the mempools of many nodes.

A not so little note: even though it is much cheaper to flood the mempools of many full nodes than to increase the UTXO set size, each node has its own mempool and it only stores transactions that have not been added to any block. There’s no consensus on transactions not added in blocks, and this is a part of the protocol. Network nodes should not trust on anything until proven its legitimacy in accordance with the protocol rules. If you look at blockchain.info’s mempool, it may or may not be similar to other nodes’ mempools. If no miner adds the spammy transactions in their blocks, they will be wiped by most nodes eventually. Unspent outputs, on the other hand, must be stored by every full node and they can stand still forever.

Litecoin’s historical case

Litecoin was probably the first cryptocurrency that suffered this attack

Litecoin suffered a similar problem in 2011 with some bad actor spamming the chain with about 23,538,000 UTXO of 1 litoshi each. Even today, these UTXOs represent more than 50% of all unspent outputs of the Litecoin’s chain. The problem was apparently solved by creating a mechanism that defines a minimal transaction fee in function of mining difficulty. According to Charlie Lee’s comments on BitcoinTalk at the time, it appears that the minimal fee formula was defined as BaseFee = (0.1 / difficulty) LTC, capped at 0.1 LTC.

Recently on Reddit, Charlie Lee has raised the possibility of marking these outputs as unspendable via soft fork, since it would not be viable to spend them anyway due to transactions fees being much higher than 1 litoshi. This would reduce by half the amount of RAM used to load the UTXO database.

It’s a very controversial issue, because although it is not worth spending these litoshis, this can still be considered a censorship. The community came to the consensus that this change would be a bad precedent for the currency and they chose to do nothing. I agree with their decision. One The DAO is enough.

Nano’s case

Nano is a bit different case of the majority of the cryptocurrencies. It has some fundamental differences from Bitcoin blockchain. They call it as block-lattice, basically, it’s like if each “account” had its own blockchain. Nano transactions are feeless in the sense of paying the fee with the currency; instead, people do a light-weight PoW when they send transactions to prevent attacks. So doing PoW is the Nano fee.

Since this PoW needs to be handy even by a third-rate smartphone, it’s relatively cheap to spam the network. But how to solve this without making arbitrary censures and in a decentralized manner? Well, they could reduce their PoW parallelization, reducing the advantage of multi-thread machines in comparison to less robust systems, but this does not seem to be enough.

It seems that they try to solve this by pruning low balance accounts in non-full nodes. I don’t consider this to be a good method to solve the problem, since this discourages people to run a full node. Nano consensus is DPoS after all, so in theory, it’s not so bad that people do not have their own full node.

In fact, all DPoS currencies that I know have centralizing tendencies, some more, some less. Regarding the viability of Nano, I believe it’s a matter of finding methods to make it minimally feasible for people to have a full node if they wish, otherwise it will tend to centralization. Will this model work in the long run? That’s the question.

EOS and DPoS

Many people argue that EOS isn’t a blockchain. I particularly agree, but that’s not the case now. This infamous smart contract focused coin has feeless transactions and really high TPS.

The point is that such things aren’t impressive when all the transactions are validated by just 21 entities. That is why it seems to be just a distributed database. Recovering hacked funds is not very exciting either. The low spread of coins also makes the voting system flawed, giving the power of controlling the currency to an oligarchic group and discouraging lower amount holders to vote.

DPoS blockchains are inherently trust-based. It also usually implies that censorship is possible. This is an indication that to have a network without fees it is necessary to sacrifice the characterizing elements of the blockchain technology. So why is a blockchain even necessary to this network? I don’t know, maybe it’s wiser to ask the developers or the community.


Keeping in mind the points raised, it is necessary to understand why blockchain technology is important and what sets it apart from all the rest. What characteristics should be remembered when thinking of blockchains?

This is my list of what a blockchain should be, or at least try to be: secure, trustless, immutable, uncensored, decentralized, permissionless, resilient, antifragile, adaptable and sustainable.

If it is necessary to sacrifice many of these features just to be feeless, then it’s probably not worth it. Perhaps a centralized solution is more suitable.

Exit mobile version