Fees on the Cardano network
A fees system on public blockchain networks is a big topic. Different projects have their own strategies. We will provide a basic overview. Then, we explain different points of view in this article with respect to the present and future of fees on Cardano.
Why fees are important
There is always a price to pay for good service. If you don’t pay anything, the other party probably has some other benefits arising from the service. Perhaps these benefits are not obvious at first glance and the counterparty tries to keep them secret. Bank accounts and transactions used to be paid for. Today, bank customers in many countries do not pay the fees, or the price has gone down significantly. Public blockchain networks offer people an alternative financial system. To make this alternative user-friendly, the amount of fees is one of the deciding factors.
You can look at public blockchain networks, including Cardano, as a company with its own economic model. Cardano needs to have revenue in order to have expenses. Fees, along with coins that have yet to enter circulation through monetary expansion, are revenue. The Cardano network needs to pay for its security, decentralization, maintenance, and development. Cardano is a somewhat autonomous mechanism that behaves according to fixed rules that are embedded in the project’s source code.
The Cardano network thus rewards pool operators and stakeholders who delegate ADA coins to pools according to the rules. A portion of the fees also goes to the project coffers for maintenance and development. The goal of the project is to build a functioning economy including governance and a strong community.
Without sufficient revenue, the lifespan of any blockchain project, as well as the company, would only be temporary. People are only willing to pay for useful services. Thus, these services must be accessible, cheap, fast, and reliable. The network must have a large network effect and be as good, if not better, than current centralized services. The only utility can ensure the profitability and thus the longevity of the network.
Cardano has a fixed number of ADA coins capped at 45,000,000,000. It is thus more dependent on fee collection than other networks with an inflationary model. The network can compensate for the lack of fees collected by infinite inflation. However, there is a risk that coins will lose value as their rarity decreases over time.
Thanks to inflation, there may even be networks where fees are not paid at all. Paying no fees is an attractive model for users, but probably hardly sustainable economically. The budget may one day run out, or inflation will be so high that coins will quickly lose value. Inflation may not cover the costs.
Fees are also important in terms of protecting the network from spamming with unnecessary transactions. If transactions are free, an attacker can generate a huge number of them and send them to himself. The network will be forced to process these transactions, which may be at the expense of other users’ transactions. A large number of transactions may clog the network and the network may not be available. A solution may be to work with identity and limit the number of transactions per user. Alternatively, do a local Proof-of-Work before sending each transaction. This makes the attack costly.
It is important to remember that decentralization only works on the basis of economic incentives to behave fairly. If the network cannot afford the rewards, it cannot incentivize honest behavior. The number of rewards must be high enough to make it costly (ideally infeasible) to perform a 51% attack. If the network has free transactions, it is always a good idea to ask how security and decentralization are ensured.
Every public network needs to collect fees because it redistributes them to other people for useful work for the network.
What is a fair fee
It is very difficult to define a fair fee. In the first place, the fees collected should be sufficient to cover all the costs of the network. If the network does not have a budget for security or decentralization, it can be attacked and thus compromised. This must never happen.
The same amount of fees, say for example USD 1,000,000 per day, can be collected in different ways. The network can process 100,000 transactions for USD 10. Or 1,000,000 transactions for $1. Or even 10,000,000 for $0.1.
The last option is the most user-friendly. High fees are a usability killer and prevent adoption. In practice, we can see that people tend to migrate to competing networks with cheaper transactions. They will do so even if decentralization is lower. So it’s not just about fair fees, but the competition across blockchain networks must be taken into account.
There is another catch regarding fees. 1 USD has a different value in different countries. In developing countries it’s relatively high, in developed countries it is a high but acceptable fee. However, if you need to send 10 transactions a day, a total value for all transactions of $10 can be high even for people in rich countries. Networks should be accessible to all segments of the population, the poor, pensioners, and the poor.
The aim of each project is therefore to reduce fees to the minimum necessary. This has at least two key prerequisites. It must be technologically feasible and the network must have a high adoption rate. Demand for decentralized networks is relatively high and likely to grow. So the problem is more of a technological one. Specifically, we can talk about scalability.
It might be helpful if the fees could be set based on geographic information. Fees could then be lower in developing countries and higher in developed countries. However, this would introduce additional complexity into the whole solution, and perhaps it is only suitable for the second-layer solutions.
If we look at it from a market perspective, fair fees are those that people will be willing to pay. However, we run into another problem. It is difficult to predict the behavior and evolution of competitors. In a traditional environment, we often see that it is possible to subsidize service for a certain period of time in order to destroy the competition. It would be useful if the level of fees could be changed reactively, but this is not necessarily consistent with the desire for high decentralization. It seems that the way to succeed is to get a high network effect first, have cheap transactions, and have high added value.
It is all about resources
In the Cardano ecosystem, fees are mapped to consumed resources. Specifically, bytes in storage, bytes in RAM, seconds of CPU time, etc. They are also charged for the deposit of staking certificates, or the execution of Plutus scripts. If you look at it again as a company, you will see parallels. Normally you pay the costs associated with delivering the package, depositing the contract with a notary, or arranging the loan.
On-chain resources are limited (thus scarce) while demand is potentially unlimited. Difficulties arise when the demand for network usage is higher than the network capacity. The network must therefore have some mechanism to counteract the high demand. However, this defense is in most cases user-unfriendly.
Users want to get their transactions on the block as cheaply as possible. The throughput of the Cardano network, i.e. the number of transactions that the first layer can handle, is determined by the block size and block time. A Cardano block is 64KB at the time of writing. A typical transaction is something around 300B. At maximum, a transaction can have 16KB. So a block can hold about 200 normal-size transactions. For security reasons, the Cardano network currently produces about 1 block every 20 seconds. This means that the network can handle about 10 transactions per second.
Let’s not forget that not only transactions are in the block, but also Plutus scripts. They will also take up some space, so there will be less space left for transactions. The size of a Plutus script is limited to 16KB.
Let’s try to explain it with the following analogy. Imagine a regular bus line (block size) between two cities that runs every hour (block time) and can carry 100 people. As long as fewer than 100 people use the line, it’s not a problem. Once 120 people arrive at the stop, 20 people will have to wait for the next bus. If only 80 new people arrive on the next bus, the bus will take everyone and everything will return to normal. What if 200 people arrive in a rush? What if 150 people come every hour? The quality of service will decline. People’s nervousness will increase. A solution will be sought. Some people will have to wait a few hours, maybe even days.
What’s the solution to this? Get a bigger bus, run it more often, or limit the use of the service by, say, raising the fares.
Exactly the same can be done with block size and block time. The block size can be increased to accommodate more transactions. You can decrease the block time so that a new block is produced more often. However, even this has its limits.
Cardano is a decentralized network and it is not known in advance what pool will produce a new block. It is necessary for each new block to reach literally all nodes in the world before producing the next block. The more time there is to distribute the block, the better. The smaller the block, the better. At the time of writing, an increase in block size is being considered to increase throughput.
Purely theoretically it is possible to increase the block size to 1MB and the block time to 1 second. This would result in a throughput of about 3000 transactions per second. However, it is questionable whether this is achievable in practice. The change of parameters will be gradual. The team will closely monitor the behavior of the network after slight incremental parameter changes. For example, if the network fails to propagate blocks in time, blockchain forks could occur frequently.
In economics, if demand rises, the price of a service can rise. If every bus is at capacity and people have to wait for the next one, fares can go up. This will discourage a few people from using the bus and they will prefer to drive their own car or take the train. More will be collected in fares. Is not it cool?
This solution is not ideal. If there is a high demand for a service, the aim should be to handle it and profit from it. This applies to both the transport service and the blockchain network. The question, however, is what to do if the limits of possibility are encountered. What to do if it is not technically possible to increase capacity? The fee market is one of the common solutions in the blockchain world.
The fee market
Fee market is used in Bitcoin. It is also used by Ethereum in a modified form (EIP-1559). Fee market, sometimes called an auction system, is used by pool operators when selecting transactions that are to be inserted into a new block. Transactions are selected based on the size of the transaction fees. The higher the fee, the more likely the pool is to include the transaction in a new block. The incentive, of course, is the financial reward that goes directly to the pool that adds its block to the blockchain.
If all new transactions can fit in the block at a given time, they are all included and none remain. However, if the network is currently being used a lot and there are more transactions available than can fit in the block, only those with the highest fees will be included. Thus, some of the transactions must wait to be included in the next round.
As a result, transactions can wait a long time for inclusion in the block. This is very inconvenient for the user. Moreover, if the network is clogged for a long time, people who want to send new transactions have to set a high fee. Theoretically a little higher than the lowest one in the last block. This gives the sender a chance that the fee will be higher than for older transactions that are still waiting to be sent. If a user sets a higher fee than the highest fee in the last added block, there is a good chance that his transaction will be included.
The annoying thing about the fee market is that users have to look at the current fees and set the appropriate fee based on how quickly they wish to send transactions. This extra step is very user-unfriendly. There are online calculators that can recommend the correct fee. Sometimes wallets do this. However, this is not ideal. People are basically speculating about the number of fees and are not sure when their transactions will be sent.
Another disadvantage of the fee market is that the fees are very volatile and unpredictable. If the blocks are empty, the fee can be relatively low. Let’s say under a dollar. However, once traffic on the network increases, fees can get into the tens of dollars. The problem is that such large fees are significantly more expensive than those we know from the traditional world. Most people make transactions within their own country. These fees are very cheap, if not free. Cross-border transactions tend to be significantly more expensive, but most people don’t need them. Blockchain networks don’t distinguish between local and cross-border transactions and it doesn’t matter if you are sending a small or large amount. You only pay for the network resources consumed.
Another disadvantage of the fee market, which I will mention only briefly, is the deliberate setting of high fees in order to rank faster ahead of competitors’ transactions. Imagine a public auction of, say, a painting, where people can bid higher. If transactions are prioritized by the amount of the fee and not by the time of submission, it is possible to get the painting for a lower bid than the highest bid. How is this possible? A transaction with a lower bid but a higher fee will be ranked earlier, skipping transactions with a higher bid but a lower fee. Each auction ends at a given point in time and it is possible that the higher bid transactions will not make it to the block in time.
Those interested in the painting sent their bid on time, but with a low fee. Or rather, they didn’t count on being passed over for other transactions with lower bids just because of the fee. It seems that the fee market is only suitable for simple transactions where the time of sending is not critical. Alternatively, app developers need to find adequate defenses against this kind of attack.
Why is the fee market used?
We described the fee market and mentioned many disadvantages. So why is it used so often? The biggest advantage is that it works well when the network is clogged. That is when users send a large number of transactions and the network cannot process them all in time. The rising cost of fees reduces demand. People do not want to pay unnecessarily large fees, so they prefer to wait or use another network.
This advantage is also a disadvantage. At times of high network traffic, only those who can financially afford it can use the network. That is, mainly rich people. This makes the network exclusive, which is the opposite of what we want. Especially in the case of Cardano, where the team is trying to deliver a solution that will be inclusive especially for people from developing countries. Poor people cannot compete economically for network capacity. They need to have cheap transactions in the long term. It doesn’t make sense for the price of charges to rise unexpectedly at a time when they need to pay on time for, say, their energy supply.
For the first layer, this is hardly a solvable problem. As we have already explained, first-layer resources will become increasingly scarce over time, and thus more costly to use. The only sensible solution is to make more use of second-layers. The scalability of the first layer can of course be improved. The IOG team will very likely succeed in increasing the first layer throughput by several orders of magnitude. However, it is a race against time, and estimating the adoption rate and development speed is very difficult.
The advantage of the fee market is that the price for transactions rises and falls with demand. This means that if the blocks are empty, the price of transactions naturally decreases. A small fee can be set and you are assured that your transaction will make it to the next block. Thus, there is no need to pay high, or fixed, fees at times when the network is less used. Let’s also not forget that the native project coins themselves are very volatile. If the transaction price were defined fixed in native coins, it would rise and fall according to the mood of the markets. This situation is also not ideal.
Demand may be high in the long term, in which case the price would essentially just rise and never fall to a reasonable level. In the extreme case, some transactions would never make it into the block and the network would have to discard them. This situation would likely lead to a loss of reputation for the network and less interest in using it. In the case of the Bitcoin network, some people expect first layer fees in the hundreds of dollars. Could it be thousands of dollars? It will depend on demand, which no one can predict.
The fee market has many disadvantages from our point of view, but it makes sense economically. If the demand for a scarce resource increases, the price must increase. So the solution is to try to expand the supply of the scarce resource, which in the case of blockchain networks means improving scalability. Unfortunately, what makes sense economically may not be fully aligned with the project’s mission. Cardano targets economically weak countries and users. Therefore, it is necessary to continue to find appropriate solutions to make Cardano an inclusive network.
The current Cardano fee mechanism
In the Cardano ecosystem, network fees do not go directly to the block producer. Instead, they are pooled and then distributed to all pools that created blocks during an epoch.
Fees are constructed around two constants a and b. The formula for calculating minimal fees for a transaction is:
a * size(tx) + b
The two constants a and b are protocol parameters. These constants can be changed to be able to react and adapt to changes in transaction volume, hardware prices, and ADA valuation. size(tx) is the transaction size in bytes.
Constant a reflects the dependence of the transaction cost on the size of the transaction. The larger the transaction, the more resources are needed to store and process it. The value of b is a payable fee, regardless of the size of the transaction. This parameter was primarily introduced to prevent Distributed-Denial-of-Service (DDoS) attacks.
Both constants a and b are expressed in ADA. This means that the fee is also in ADA, and you will pay approximately 0.17 ADA for a normal transaction (the larger the transaction, the higher the fee).
Note that the fee expressed in USD value rises and falls according to the value of ADA in the market. If 1 ADA is worth 1 USD, the average fee is 0.17 USD. If the price of ADA goes up to USD 10, the fee will be USD 1.7.
Cardano selects transactions for a block-based on when they arrive at the current block producer. This means the first-come-first-serve system. Users can set a higher fee, but it plays no role. Moreover, the fee does not go directly to the block producer. All fees are distributed at the end of the epoch.
This system is fairer as everyone pays the same for the transaction. The rich are not favored and it is not possible to buy the advantage with money. However, the system is also not ideal. Fee levels are not stable, as the price of ADA can go up and down by hundreds of percent. The main drawback is that there is no preventive mechanism to guard against the flood of transactions. The system can essentially only process transactions incrementally. A few transactions can be temporarily stored in memory, but if it runs out of capacity, the transactions must be discarded.
If we go back to our bus analogy, people would line up at the bus stop as they come. As soon as the bus arrived, exactly 100 people would get on. The others would wait on. There would be a maximum of 200 people waiting at the bus stop. Everyone else would have to go home or wait around the corner until a seat opened up. The disadvantage is that even if the bus line is always fully loaded and there are many people waiting at the bus stop, the price of the service could remain the same or even decrease. Why?
As we said, the transaction fees are driven by the market value of ADA coins. If the value of the ADA coins were to go down, the fees would go down, despite the fact that demand is increasing. This does not make economic sense and can only work as long as the network can handle all the transactions.
Any network can end up being forced to throw away transactions. This is simply because there is no place to store them. So users, or their wallets, have to resend the transactions. This is a general problem if the network in question does not scale. Dropping transactions is a defense against total overload. The usual solution is to prioritize transactions according to some rules. This does not prevent overflow, but at least it selects the more important transactions for the block.
Searching for the ideal fee mechanism
Ideally, all blocks would be filled to, say, 95%. Every transaction would get into the block on the first try and everyone would pay the same low fees. The number of transactions would be enough to cover all the costs of the network. Network capacity would gradually grow as fast as the number of users. The fees would still be the same, or could even decrease as the number of transactions increases (the network would still collect the same amount of funds). For business, but also for everyday use, the stability of the economic environment is an absolutely key feature. A business cannot go out of business just because the fees on the transaction network go up. If all that was achieved then the network would be highly inclusive. Each new user would be happy with how user-friendly the network is. Pool operators and stakeholders would receive generous rewards. Everyone would be happy.
The ideal state is obviously difficult to achieve. Block occupancy will fluctuate in the next few years, but as the number of users grows, blocks will tend to get more and more full and run out of space. If the demand for transactions jumps, the networks will not be able to process them. If a network uses a fee market, fees will rise dramatically.
There is no ideal solution for fees. People want to pay the lowest possible fees. The network, and the people who run it, want to collect as much as possible. Users have limits and once the fees exceed them, they will not be willing to pay them. Some people will still pay $10 occasionally, but few people can afford $100 or more on a regular basis. However, USD 10 is an absolutely exorbitant fee for people from developing countries. These people can afford fees in the tens of cents at most. It should be remembered that for long-term speculators, it is no problem to pay a higher fee from time to time. However, if people are to use the network on a daily basis, the total value of all fees, for example for a whole month, must be low.
Network bandwidth is limited at the technological level, which prevents the processing of large numbers of transactions. The reality is that resources will tend to be used to the maximum and the price of fees will go up. At the first layers, we are more likely to see full blocks of expensive transactions rather than large numbers of cheap transactions.
The only solution is to try to increase network throughput. The IOG team will strive to do this. However, as mentioned above, if network success outpaces technological progress, the network may not be able to handle the transactions.
Cardano will have a second layer called Hydra. There, transactions can be significantly faster and cheaper. The second layers have different parameters in terms of decentralization, security, and user-friendliness. It can be difficult for non-technical users to keep coins on one layer and transfer them to other layers. Ideally, users should not see the difference between layers at all. They would just check the box in their wallet if they want a faster and cheaper transaction. Any further manipulation of a different wallet or address is, from our perspective, too complicated for ordinary users.
It is necessary to think about the economic model of the first layer. If users pay fees on other layers or networks, how will the first layer fare economically? Probably worse. Ideally, the first and second layers should share an economic model. Thus, transaction fees on Hydra could also go, at least in part, to the Cardano network budget.
There is another side to this complex topic, which we will also just touch on. The budget of most networks is two-fold. It consists of monetary expansion, i.e. the stock of new coins that are put into circulation. Then there are the transaction fees collected. If a project has a cap on the number of coins, like Cardano or Bitcoin, the supply of new coins will one day be completely depleted? Thus, networks may be more dependent on the number of fees collected. The future price of coins will also matter. However, we cannot predict this well enough either. It is clear that the value of each network has a ceiling and the growth in the value of coins will also stop or slow down. The networks will depend mainly on the fees collected over the next few decades. It follows that they will either collect enough to ensure security and decentralization, or they will degrade these key features. Improving scalability is thus probably the only possible way to ensure low fees. Low fees will enable the usage and this, in turn, will enable network survival. An alternative path may be a shared economic model with second layers.
As explained above, the network can easily get into a state where there are significantly more transactions available than can fit in a block. So some transactions have to wait for the next block, but they may not even get there. It may also happen that some transactions have to be discarded. There is one solution that is commonly used in such cases: transaction prioritization.
What is the priority of transactions? We can talk about the purpose of the transactions, the number of coins and tokens in a transaction, etc. For example, a regular ADA transaction may have a higher priority than an NFT transaction. If there is a choice between two ADA transactions, the one with the higher amount will win. Alternatively, the number and time of transactions made from a given address can be taken into account.
Maybe some kind of lottery could be devised to pick transactions at random. Maybe the block capacity could be divided into multiple subblocks. One sub-block would be filled by transactions based on a first-come, first-served basis. Another through a lottery, another based on the size of fees. There would be a mix of all the options and one could balance between them according to user needs.
Even if a market fee mechanism were used, it could only be applied to part of the block capacity. This would allow low-fee transactions to enter the block, which would be selected on a lottery basis. At the same time, however, it would be possible to fight for block capacity with a high fee.
Ethereum has come up with another original concept. A portion of the fees is burned. This can theoretically make Ethereum deflationary. This means that the number of ETH in circulation can decrease if more ETH is burned than is created.
The deflationary model has the advantage of increasing the scarcity of existing coins and thus their value. Thus, if someone holds the coins, for example, an organization that cares about protocol, the value can grow over time. It’s an interesting experiment and worth paying attention to.
From our point of view, we see a mental problem there. In the ordinary world, we don’t burn money or destroy gold. We try to use scarce resources for the purpose of appreciation. This is exactly what is happening with ADA coins in the Cardano ecosystem. For example, we can invest a portion of the fees collected in the development of the ecosystem to increase its usefulness to more people. This will in turn raise the value of the network, and hence of the project’s coins. Burning coins do not necessarily prevent this, and the increase in value due to deflation can theoretically raise the overall value in the project treasury. Still, we think that coin burning is not an ideal solution. Especially since Cardano has a fixed number of coins.
We consider the one-time burning of part of the coins to be pure speculation with no long-term benefit. The value of the coins can be used for development. Burning may or may not raise the price in the short term, but in the long term, it is an irrelevant step. Especially with the current high volatility of all cryptocurrencies.
A market fee is probably the inevitable solution. As we have described, it can only be applied to part of the block capacity. We do not think it would be good for Cardano to end up with users competing for block capacity through the amount of the fee. Cardano’s advantage lies in its inclusiveness and user-friendliness. Clearly, this can’t work forever and some changes need to come. Transaction prioritization can help to some extent, but once some transactions start getting thrown away or delayed in being included in the block, it will be a problem.
Pushing the boundaries of scalability and clever second layer involvement will be essential in the future. All projects are at the beginning of this and essentially in the experimentation and development phase. We’ll see how individual communities decide and what solutions they adopt.