We have a system set up where (hopefully) a lot of different nodes and miners work with their own individual interests at heart, and almost magically sharing a common goal of maintaining our money working. Every node has a copy of the list with who has how much money, and every miner spends electricity, wins a lottery, gets permission to write on that list, and gets paid for it.
We know where the transactions are written and why they cannot be changed. Have you wondered where the rules of our money are written? Because it’s one thing to ensure that nobody cheats by creating money out of thin air for themselves, or erasing a payment after receiving some bought goods, but what happened if they changed the rules themselves? We need what’s called consensus around our rules. An agreement not only on what money got send where, but how the game itself is played. To achieve that, we can write the rules on every program playing the game. It’s like every player getting their own printed rulebook. And every time they play with each other, they check that they have the same rules. This is useful for two reasons, one is to ensure that it’s the same money that we’re using, the other is to be able to change the rules.
Wait a minute. Isn’t changing the rules bad? Well… it is, if we don’t all agree we want them to change. Think about it for a moment. Things change in the world, new tech is developed and new ways to hack systems are discovered all the time. If we want our system to be resilient, which means that it not only can resist attacks but also that these attacks can be used to learn, adapt, and make it stronger every time. Like our own muscles, which break a tiny little bit every time we exercise them (that’s why they hurt), but then regenerate bigger and stronger, ready for harder tests.
So we want a dynamic way of voting and agreeing on changes. We can use miners for that. We can make changes to the coins’ rules, apply them to the programs used by miners and nodes, and wait to see if they adopt them. Every time the rules change, the blockchain forks into two. It’s just like in time travel movies, when by changing an event in the past, you created an alternative universe. This is the same. Some miners will not use the changed rulebook, and therefore keep building blocks on the original blockchain, while some miners will use the new rules, instantly creating a new blockchain from that moment on. In blockchains that’s called a fork, just like a fork in the road, or the way forks branch from a single handle into many pointy ends.
When most of the miners (more than half of them) agree on what to fork to, the blockchain (and therefore the money) will be consider the same as it was, just upgraded. If the changes are adopted by a minority, that branch will be consider a fork and a new, different money. This new money won’t be compatible with the other from now on. That’s what happened between with Bitcoin and Bitcoin Cash back in 2017, for example.
We’re almost there with our super good money. Now that we have decentralized way to vote for changes, we need to ensure the miners themselves do not become centralized. That is, there’s a small group of like five miners that agree between them what to change to. Remember than the fewer people making decisions at the top, the less likely those decisions will be in the best interests of the huge number of money users in the bottom. We’d be replicating the current financial system, in a way. To avoid that, we need to keep them guessing.