We’re designing a system that is decentralized, but one thing that is always difficult to do when we have a group of different people is to coordinate. Just like picking a date to have dinner with 5 friends, it’s hard to reach a consensus. But our money should work predictably (or at least as predictable as possible) otherwise it’d be maddening for people to use it. One of the things that have to be predictable and regular is how long does it take for someone to transfer money. Pay or get paid for something, basically.
We’re using miners that write every new transaction on the ledger and get paid block rewards and transaction fees for that. Since money changes hands once a transaction is actually written on a block, we need then to decide how often new blocks are created. That’s gonna be the speed of our money. So how often is often enough?
Well, we would be able to see them almost instantly on a pool of pending transactions, but for a transaction to be the real deal, it’s gonna take at least until next block to be final. So, it’d be better to have the blocks as often as possible. There’s a catch though, remember that the blocks are sequential? That means they form a line of one after another, just like a train with cars on a single rail. The miners compete with each other to create and put those cars on the rails as fast as possible, so if we make the time between turns too short, they’ll cram and many will shout “First!” at the same time. Or they’ll each create their own fork of the rails and call it the “real true rail”.
On the other hand, if we make the time between blocks too long, people will stop using it because it’ll feel like sending a pigeon with a bill attached to its leg just to buy groceries. So there’s a sweet spot. In Monero that sweet spot is 2 minutes. A new block every two minutes.
Good idea. Not too fast, not too slow. But let’s back up a bit, if it’s decentralized, how do we coordinate miners to mine the blocks every 2 minutes instead of whenever they wish to?