Why “non-mining full nodes” are a terrible idea.
In the early days of Bitcoin, there was no-such thing as a “non-mining full node”. Every miner was a node and every node was a miner. In Bitcoin’s whitepaper, the word “node” = miner.
‘As long as a majority of CPU power is controlled by nodes (miners) that are not cooperating to attack the network, they’ll generate the longest chain and outpace attackers.’
It wasn’t until a couple of years ago, that people started using the “full node” term in a non-mining sense. Unfortunately there has been a huge amount of propaganda that “Everyone should be able to run a “non-mining full node””. This has always baffled me because that’s a really terrible idea!
Arguments FOR running a “non-mining full node”
I will list the most cited arguments, and then give my rebuttal.
- Fraud detection: Non-mining full nodes can detect fraud such as double spends or miners giving themselves bigger rewards. Simple payment verification (SPV) clients can’t detect that. So full nodes are essential to keep the miners honest.
My rebuttal: While SPV clients can’t detect all fraud, there is no reason they should. Miners have every incentive in the world to not accept or perform any fraud. First of all, you’d need the vast majority of miners to become evil, because miners will automatically keep each other in check and refuse to confirm or condone any fraudulent transaction. Second of all, the moment the majority of miners would start performing fraud, Bitcoin will become worthless and noone will trust it any longer. Miners would never destroy their million dollar investments like that. Miners know people will retaliate by changing the proof of work system to make the miners’s equipment obsolete.
- Privacy: “Non-mining full nodes” are better at hiding your transactions vs SPV clients.
My rebuttal: While in some cases “non-mining full nodes” are better at hiding the origin of the transaction: if you are really doing something that should remain private, it can still be traced back to you unless you use a trustworthy VPN service. Your “non-mining full node” could be surrounded by spy nodes and they’d be able to trace the transaction back to your ip address. So for private transactions, you should always use a VPN, no matter if you are running a “non-mining full node” or an SPV client.
- Strengthening the network: The more “non-mining full nodes”, the stronger the network.
My rebuttal: I’ve never really understood this. It’s actually the opposite. Non-mining full nodes delay sending your transaction to the one node that really matters: a *mining* full node. Only mining full nodes have the ability to put your transaction in the blockchain, and you want to have that happen as soon as possible. To put it bluntly: “non-mining full nodes” are actually a sybil attack against mining full nodes. “Non-mining full nodes” make the network LESS efficient.
- Preventing hard forks you don’t agree with: “Non-mining full nodes” will not blindly follow hard forks, while SPV nodes will. “Non-mining full nodes” prevent miners from hard forking.
My rebuttal: Neither a “non-mining full node” nor an SPV client will prevent a majority of miners from doing an upgrade through a hard fork. The difference between a “non-mining full node” and an SPV client is that you will need to update your “non-mining full node” software to keep using the Bitcoin Network. Side note: Soft forks WILL be followed blindly by both “non-mining full nodes” and SPV clients.
Arguments AGAINST running a “non-mining full node”
- It prevents Bitcoin from scaling: The Bitcoin network is growing exponentially. The whole false argument of “everyone in the world needs to be able to run a “non-mining full node”” has prevented Bitcoin from scaling past the 1MB temporary block size limit, which resulted in ridiculous backlogs and the loss of 50% of Bitcoin’s cryptocurrency market share. Yes, if everyone in the world needs to run a “non-mining full node”, even on slow connections, we could probably not scale to 1GB blocks. But the moment you realize that “everyone running a “non-mining full node”” would actually be detrimental for the Bitcoin network, it changes the whole picture. Satoshi said: ‘Only people trying to create new coins would need to run network nodes (miners). At first, most users would run network nodes (miners), but as the network grows beyond a certain point, it would be left more and more to specialists with server farms of specialized hardware.’ Miners are obviously capable of supporting big blocks, as has been recently shown by Bitcoin Cash which is running 8MB blocks without any issues. They run their equipment in specialized data centers and have the necessary money/incentive to invest in fast uplinks.
- They make the network insecure: Today you have to go through a maze of “non-mining full nodes” (possibly sybils) before your transaction reaches a miner. Connecting directly to a trusted mining full node is the only way to make sure your transaction has safely arrived. Otherwise, you will never know until your transaction made it into a block. This makes zero confirmation transactions much safer, among other things.
- It makes upgrades harder: If everyone runs a “non-mining full node” and there’s a hard fork upgrade, a lot of clients would become obsolete. If most people would run an SPV client instead, they wouldn’t notice anything and just follow the longest chain. Upgrades could happen faster and with a lot less fuss than today. Which means faster Bitcoin improvements that will result in better competition.
So does this mean no one should run a “non-mining full node”? No, there are still some cases where you’d want to run one. For example, if you run an exchange or a large payment provider, you can benefit from running a “non-mining full node”. Also, if you are a hobbyist and want to make sure miners are still honest, go for it. But 99% of users can do perfectly fine with an SPV client, and everyone would be better off as a result.