State bloating is a big danger, especially for Ethereum. Ethereum stores its global state in a Merkle Patricia Trie. This allows nodes to verify the integrity of the state without storing the whole thing. Every node has a hash it commits to its children which allows light clients to verify state without downloading the entire trie. The issue lies in the growth of the state: when it grows, the trie becomes deeper, wider, and more expensive.
Let's look at some stats: Ethereum's total state size is 1.5 TB, 18% growth YoY. Number of accounts is 390 million, 22% growth YoY. Full node count is 8847, a 12% decrease YoY. Average sync time is 72 hours, a 35% increase YoY. State access distribution (Gini coefficient) is 0.89, +0.03 YoY.
The Merkle Patricia Trie is designed to be used for small, sparse state. However, Ethereum is neither small or sparse. As Ethereum keeps growing, we see a dramatic increase in sync times and storage required. In 2020, the average trie depth was 7 levels, but it's now increased to 10 levels. Since every state access requires traversing the entire path from root to leaf, every increase in depth means more hashes and more CPU time. Along with that, the trie width is increasing. In 2020, it had about 50 million nodes, but now, there are about 120 million nodes, leading to more memory pressure and slower syncing.
Additionally, only 0.1% of addresses account for 50% of all state access. This leads to hot spots in the trie, where nodes are accessed frequently while others are barely even touched. This is terrible for caching since the most frequently accessed nodes are spread out instead of clustered. Along with that, it's getting harder and harder for node operators. Running a full node requires almost 1.6 TB nowadays, and it's growing at about 15% per year. Less nodes also means more centralization: the United States, Germany, and the United Kingdom host about 51% of Ethereum nodes.
Right now, this is a serious problem for Ethereum. It's not urgent yet, but it can easily get out of hand. The Ethereum Foundation has been working on some solutions, however. They are beginning to implement Verkle trees, stateless clients, state rent and state expiry. Verkle trees will replace the Merkle Patricia Trie with a better structure, dropping proof size by 90%. Stateless clients will allow users to download proofs instead of storing the whole state, reducing the storage requirement and likely boosting node count as a result. State expiry just means that old state is automatically pruned to remove redundancy. State rent would mean paying fees to keep state alive, which incentivizes cleanup. These are all great concepts and the Ethereum team is doing a good job, it just remains to be seen if Ethereum can pull out of this state bloating death spiral.