I have seen a substantial amount of misinformation regarding the network speed (TPS) of Cardano. Here’s the real answer, along with important consideration for why TPS is not a great metric of network speed for any blockchain.
TLDR: The real TPS of any network will vary drastically, as the size of the transactions also varies drastically. Moreover, different networks have differing transaction data needs and norms, making this figure largely incomparable across blockchains. For now, Cardano has a rough present speed cap of about 7 TPS, and anyone telling you Cardano has a network TPS above even 10TPS is talking out of their ass. That said, it's low specifically because network use is low, and so higher TPS is totally unnecessary. Cardano can scale its potential TPS to current network utilization and current technology relatively simply by changing a single network parameter, which can be adjusted manually now by IOG, or voted on in the future. Thus, they can increase the network speed up into the neighborhood of ~50 TPS almost immediately without expected issues. Longer-term scaling and optimizations really will make a major difference, so saying more is difficult.
Let's begin by talking about the main factors that can influence the number of transactions a modern blockchain network can process per second. The first factor that influences transaction speed is the rate at which these bundles are written and approved by multiple network validators. In Cardano, blocks are written in at an average rate of 1 block every 20 seconds. That said, transactions per second then also depends on how many transactions are included in those bundles. The more transactions in each of those bundles, the more transactions are being processed per second.
Things might seem simple up to this point, but this is actually where TPS gets really complicated. Why? Because the number of transactions in a block varies a ton.
To understand this complication, first recognize that most blockchains don't actually care about number of transactions when processing blocks, they care about the data size of those transactions. At the end of the day, a transaction in a blockchain is just a set of information describing what happened – who sent how much to where? Or in the case of smart contracts, who sent what to where, and what needs to happen as a result? So it's the case that some transactions take up a lot of data space, while others take up very little.
Most modern blockchains, including Cardano, then choose to set a cap on how much data each block being written can contain in terms of bytes, not in terms of number of transactions. In Cardano, they call this parameter the "maxBlockSize." This value is a delicate balance: setting the limit too high means that these huge blocks of data can be created every 20 seconds, and these big blocks need to be shared with every single person on the network – so bigger blocks can mean slower uptake, more security vulnerabilities, and potentially more costly storage for transactions overall. Conversely, setting the limit too low means that each block can barely contain any information at all, and the network becomes incapable of handling higher loads of use – leading to network congestion and long transaction delays. So setting any one maxBlockSize (or whatever your network calls it) comes with a number of trade-offs, and it's a constantly moving target as network usage changes, technology changes (i.e. cost of hard drive space, networking speeds, etc.), and the type of transactions being conducted changes.
Thus, transactions per second relies on how many blocks are being produced (which is easy), but also the average size of each transaction in bytes (which can and will change based on how the network is being used), and the maximum size of each block being produced (which can also change). This is why anyone spouting off TPS figures is probably misguided – the real TPS of any network will vary drastically, as the size of the transactions also varies drastically. At best, you can estimate an average maximum TPS for a network, but that is subject to change for a variety of reasons unrelated to the speed of the network.
Moreover, different networks have differing transaction data needs and norms, making this figure largely incomparable across blockchains – so it's not even a good reference metric. Small transaction sizes is not necessarily a good thing, but they do make high TPS values way easier to attain; likewise, big transaction sizes is not necessarily a bad thing, but they make high TPS values almost impossible without suffering from issues like network/propagation latency and blockchain bloat. For example, as u/StatisticalMan helpfully explained, "a Maker DAO vault registration smart contract [on Ethereum] requires 30x the gas (~600,000) as a simple send ETH from wallet A to wallet B transaction (21,000). So if you removed all smart contracts from Ethereum well it could handle a lot more tx per block. It would also be nearly useless… The reason why blocks are full on ETH is because people are doing really interesting complicated things. Decentralized swaps, decentralized lending, collateralized loans, nft creation, decentralized stablecoin minting, decentralized options pools, decentralized crypto mutual funds, etc." In other words, given the inherent trade-off between TPS and transaction size for many blockchains, a high TPS is not necessarily desirable in and of itself.
For now, know that the maxBlockSize of Cardano is set at 65536 bytes (per adapools). This is kind of an abstract number, so let's set some reference points. Looking at the Cardano Explorer, we can see that as of writing, most transactions are somewhere in the neighborhood of 450 bytes on average. Thus, we can fit about 146 average-sized transactions in a single block, for a rough present speed cap of about 7 TPS (146 average-sized transactions being processed every 20 seconds). I want to make this super clear: anyone telling you Cardano has a network TPS above even 10TPS is talking out of their ass or is just regurgitating abstract theoretical numbers they heard somewhere.
"But wait, that sounds like absolutely nothing. I thought Cardano was supposed to be the network of the future?" Yes, remember that I emphasized for now.
First, because maxBlockSize is a network parameter for Cardano, that value can be changed very simply. The responsibility of setting or changing this parameter is currently in the hands of IOG, but once Voltaire and on-chain voting systems are fully developed, the community will be able to propose and vote on changes to this value at any time. This is absolutely critical, and is one of the strengths of Cardano as a network, because it means we can scale our potential TPS to current network utilization and current technology (remember from earlier that setting block size is a careful balance). If you look back at the blocks being produced on the Cardano Explorer, you'll notice that blocks are no where even close to the current maxBlockSize of 65536 – they're more in the neighborhood of 10000 bytes and below. What this means is that the current network utilization is not at all being capped by the network's current transaction speed. We simply aren't even close to hitting the low cap of ~7TPS on a regular basis, and thus setting the maxBlockSize higher right now will just lead to a lot of empty blocks and an unnecessarily data-heavy blockchain overall. But if we do start to get to a bottleneck, changing this parameter and increasing the network speed up into the neighborhood of ~50 TPS can happen almost immediately without an issue (as reported by IOG engineers running stress tests). It is unclear how much higher we can set the maxBlockSize at present without introducing more latency issues, but 50 is a very reasonable estimate by my figuring, the video linked, and the in-depth technical paper by IOG (see Table 6 on pg 42).
Second, the average transaction size in bytes is likely to change substantially over time. With the recent release of the Mary update introducing native tokens to the network, transactions may contain more data than before. Once smart contracts are fully deployed on the network via the final Goguen update, a single smart contract transaction may end up being bigger than what we see today for regular transactions. At the same time, Charles and IOG folks have consistently alluded to optimizing how the data in transactions are stored similar to what Ethereum has been and is doing. The thinking goes, if you can communicate the same transaction with less data, you can fit more transactions in the same block and increase the TPS of the network almost "for free." All said, the current average transaction size of 450 bytes is unlikely to hold much longer, and the network will be ready to change and adapt as necessary given the ability to vote on parameters like the maxBlockSize.
Third, there are a variety of future updates to the Cardano protocol that can really change things up and speed the network up even further. The big one to keep an eye on is Hydra, which can radically increase the TPS of the Cardano network theoretically well above 1000 TPS. Even my old skeptical bones has calculated a conservative bottom-end for TPS in Hydra at around 2500 TPS at the absolute worst (i.e. in a world where protocol optimizations cap us out at 50 TPS, rather than the big-blue-sky figures Charles Hoskinson tends to toss out at 100-1000+). Thus, once we can't scale the network to adapt to high usage past adjusting maxBlockSize and optimizing transactions themselves, Hydra can get us well beyond what would likely be necessary. That also ignores any future developments to the protocol that introduce other solutions for scaling – and we have plenty of time between now and then.
So, long as hell post, but hopefully that tells you what you need to know about TPS, Cardano's network speed, and the potential future for network usage. Would love reactions, pushback, questions, etc. – I'll do my best to answer.
Additional Sources and Further Reading:
- This paper from IOG on the exact topic of network speed and the trade-offs of higher block sizes
- This video from IOG engineers on testing network speeds and running TPS benchmarks
- Me in another post trying to grapple with these stats
- Current network parameters from adapools.io