What is a “Full-Node” ?
There is a lot of talk of “full-nodes” in Bitcoin. They are apparently very important. From the day-to-day of my Twitter feed you would think there was a direct relationship between the number of reachable nodes on the network and Bitcoin’s health. This is wrong.
A full-node is a mining node.
- Needs a complete, validated copy of the blockchain so that it can mine on the correct chain, earning bitcoins and contributing to the security of the network.
- Chooses the transactions it includes in its blocks.
- Relies on other mining nodes to accept its blocks as valid. Rejects any invalid blocks.
- Won’t update its software unless it is sure it will generate blocks valid to the rest of the network
- Will likely service requests for blockchain data and SPV clients
Bitcoin relies on a distributed network of these mining nodes, providing all the features we love about Bitcoin. Decentralization, security, censorship resistance and availability.
With a healthy distribution of mining nodes, SPV wallets become feasible, a user can ask the mining network for fraud proofs instead of downloading the entire blockchain. A user might trust a wallet service provider to provide blockchain data, it doesn’t really matter, the wallet service has no influence or bearing on the network. The mining nodes are the basis of the entire economy.
A full-node is a mining node.
What went wrong?
Three things: ASICs, mining pools and the stratum mining protocol.
ASICs brought specialization and professionalization to mining, taking it out of the reach of the casual bedroom enthusiast and into serious hobbyist and professional operations. This created centralization pressure making earning for smaller miners very difficult.
Mining pools to the rescue! (but not really)
Mining pools enable smaller mining operations to cut a steady profit, by pooling resources with other miners they can reduce the variance inherent in the way blocks are paid out. Instead of getting the full block payout when they find a block, they forgo this to the pool. In return they earn a steady small daily payout.
Sounds OK right? I am a small miner, I have a few AntMiners in my garage, I use a pool, what’s the difference? I still have my node. Instead of a CPU I use my ASIC. I still choose the transactions I include in a block. I just route my payouts via a pool as a kind of accountancy trick. Perfect.
This would be the case, only mining pools are competitive:
“What if you could just plug your miner into the wall, connect it to your WiFi and receive a steady stream of Bitcoin’s into your wallet?”
“Yes please! What’s the catch?”
“No catch, you don’t even need to run a node anymore! No more losing money when your node crashes. No more pesky updates- and don’t worry- the pool will choose the transactions to include in a block for you. Also, as a bonus, less internet bandwidth as those pesky blocks and transactions no longer need to be relayed to you!”
This was the nail in the coffin of Bitcoin as we knew it. We now have the complete separation of node and miner, and the original definition of a node is obsolete.
Based on the original and correct definition, there are around 20 mining-nodes on the Bitcoin network. These are all mining pools.
The post-mining-pool world.
It is clear the dynamics have massively changed as a result of the aggressive re-configuring of the system. A few known central parties now handle three of the most critical aspects of the system:
- Software Updates
- Transaction Selection
We now have a system where mining pools are the full-nodes but their customers hold the hashing power*. However, these customers and the pools themselves still need to be sure that they can spend and exchange the bitcoins that they are generating, to pay their electricity bills, employees and to buy things.
They need to be sure that the people they spend their bitcoins with will accept the blocks they produce, so there is an incentive for them to care about users outside of mining nodes. Bitcoin can still hold on to a form of decentralization if non-mining users run wallet-only nodes. More specifically, economically dependent wallet-only nodes. Why?
Well, we have say 20 full mining nodes on the network- not very decentralized right? However if we had say 50,000 users of Bitcoin that were regularly sending and accepting bitcoin, the mining nodes would have to care about these users.
If these users managed their own node, and so validation of blocks and software updates, then this set of distributed Economic-Nodes would provide a counter-balance to the semi-centralized mining nodes. Mining pools wouldn’t produce blocks unless they were sure the majority of these nodes would accept their bitcoins. This group is referred to as the economic majority.
I call these Economic-Nodes.
Centralized Wallets and Services
Guess what? So far, users don’t want to manage their own node just to have a wallet.
They want the convenience of centralized wallet services and SPV wallets. As a result we have also seen an aggressive centralization of Economic-Nodes and SPV wallets relying on them. (Or more likely relying on non-economic nodes, more on that later)
To give an idea of how aggressive this has been, it is estimated that blockchain.info’s node is responsible for 45% of the transactions on the Bitcoin network. That’s just one node.
As with the mining pools, we can probably break this down to 100 nodes representing the majority of the Economic activity in Bitcoin. These will be comprised of the central services you have heard of: Blockchain, Coinbase, BitPay, the various exchanges etc. The advent of Bitcoin API services has further centralized this with many services now sharing the same API provider.
So, 20 mining-nodes, 100 economic-nodes. These are the only nodes that mining pools need to care about. If someone wants to change a parameter of the network via a software update, most of the work is in convincing this relatively small set of nodes.
I call this the Central Economic Zone.
But, but … I’m running three nodes in Amazon Web Services!
There is a trend for running a “full-node” as a volunteer. These nodes contribute very little. Unless they are responsible for significant economic transactions, they are literally just sitting there and passing messages around.
If they stopped accepting blocks from mining pools- would you notice economically? Would anyone lose money? If they all refused to update their software, would anything change?
I would go as far to say running a “full-node” in this way simply makes it harder to estimate how many genuine Economic-Nodes might be out there.
What can we do?
- Promote business models that put Economic-Node wallets in the hands of the bitcoin economy.
- Ditch business models that centralize the economy onto single nodes.
- Design something better than stratum, that provides an incentive for hashers to manage their own nodes again.
21 Inc. have a great approach in terms of deploying their platform based on a node with a full validated copy of the blockchain. They have also indicated that they are searching for ways to enable decentralized mining pools.
There is no such thing as a full-node anymore. Now there are two types:
- Mining Nodes
- Economic Nodes
Both sets are now semi-centralized on the network, are heavily inter-dependent and represent the majority of the active Bitcoin users.
Did I get anything wrong? Feedback very welcome via Twitter @shibuyashadows
*Pools often also control significant hashing power themselves directly.
** All numbers are estimates.