Any computer that connects to the Bitcoin network is called a node. Nodes that verify all of the rules of Bitcoin network are often referred to as full nodes but in reality are validation nodes, sometimes called archival nodes. Full nodes once were only miners, called mining nodes, but the term has evolved over the years as mining has moved from solo-miners to ASIC mining. Now there are two types of full nodes: fully mining nodes (which includes validation) and just fully validating nodes (it does not mine at all).
What makes a full node?
Full validating nodes download every block and transaction and check them against Bitcoin's consensus rules. Here are examples of consensus rules, though there are many more:
- Blocks may only create a certain number of bitcoins.
- Transactions must have correct signatures for the bitcoins being spent.
- Transactions/blocks must be in the correct data format.
- Within a single block chain, a transaction output cannot be double-spent.
If a transaction or block violates the consensus rules, then it is absolutely rejected, even if every other node on the network thinks that it is valid. This is an important characteristics of full nodes: they do what's right no matter what. For validating nodes, miners actually have fairly limited power: they can only reorder or remove transactions, and only by spending a lot of computing power. A powerful miner is able to execute some serious attacks, but because fully validating nodes rely on miners only for a few things, miners could not completely change or destroy Bitcoin.
Nodes that have different consensus rules are actually using two different networks/currencies. Changing any of the consensus rules requires a hard fork. Consensus rules are different from policy rules, which specify how a node or miner prioritizes or discourages certain things. Policy rules can be changed freely, and different nodes can have different policy rules. Because all full nodes must use exactly the same consensus rules in order to remain compatible with each other, even duplicating bugs and oddities in the original consensus rules, creating a full node from scratch is extremely difficult and dangerous.
At minimum, a fully validating node must download every transaction that has ever taken place, all new transactions, and all block headers. Additionally, full nodes must store information about every unspent transaction output until it is spent. By default full nodes are inefficient in that they download each new transaction at least twice, and they store the entire block chain (more than 165 GB as of 20180214) forever, even though only the unspent transaction outputs (<2 GB) are required. Performance can improved by enabling
[-blocksonly] mode and enabling [pruning].
Why should you use a full node wallet
Running a full node is the only way you can use Bitcoin in a trustless way. You will know for sure that all the rules of Bitcoin are being followed, for example that no bitcoins are spent not belonging to the owner, that no coins were spent twice, that no inflation happens outside of the schedule and that all the rules needed to make the system work (e.g. difficulty) are followed. Full nodes are currently the most private way to use Bitcoin, with nobody else learning which bitcoin addresses belong to you. Full nodes are the most secure way to use Bitcoin, they do not suffer from many attacks that affect lightweight wallets.
This is by far the most important reason for running a full node, though it is a little difficult to understand.
As explained previously, full nodes enforce the consensus rules no matter what. However, lightweight nodes do not do this. Lightweight nodes do whatever the majority of mining power says. Therefore, if most of the miners got together to increase their block reward, for example, lightweight nodes would blindly go along with it. If this ever happened, the network would split such that lightweight nodes and full nodes would end up on separate networks. If all businesses and many users are using full nodes, then this network split is not a critical problem because users of lightweight clients will quickly notice that they can't send or receive bitcoins to/from most of the people who they usually do business with.
In practice, miners are unlikely to attempt anything like the above scenario as long as full nodes are prevalent because the miners would lose a lot of money. But the incentives can change if everyone uses lightweight nodes; hence it's practical to desire a good balance of fully validating nodes and lightweight nodes to offset each other in the act of a 51% attack.
Having the blockchain stored on your hard drive is the most private way to have a wallet. Althought lightweight wallets are secure and keep your information private, depending on the wallet implementation and setup, it could possibly leak information. That's why it's important to use well known privacy conscious wallets such as the Bitcoin.com Wallet.
Full nodes may provide various services to other network participants (if the software is run with
-listen=1 as is default). This is especially important for lightweight nodes.
These services include:
- Filtering transactions and blocks on behalf of lightweight nodes so that lightweight nodes do not need to download every transaction ever made on the network in order to find their own transactions.
- Serving historical full blocks to nodes that have been offline for a while.
- Transmitting new transactions from users to miners.
- Broadcasting new blocks from miners to other nodes.
For the most part, these services are only usefully performed by full nodes that are listening on port 8333. The more full nodes that accept incoming connections there are, the more users the Bitcoin network can support. Although if there is ever a shortage, lots of archival nodes can be easily created by cheaply renting VPS or AWS space.
Some are incentivizing it
Bitnodes ran a program to incentivize full node operators until the end of 2015.
How to run a full node
If you run the bitcoind instance of a wallet, you are running a full node. If you open port 8333, you will contribute to the network's capacity. If you actually use the wallet feature, or if you use a lightweight client like MultiBit but configure it to connect exclusively to your full node, then you will contribute to the network's strength and receive protection from possible attacks.
Tips and tricks for running a node
- Bandwidth consumption can be reduced using this guide: https://bitcoin.org/en/full-node#reduce-traffic
- Requirement for disk space can be reduced using this guide: https://bitcoin.org/en/full-node#reduce-storage See also the release notes which explain pruning.
- To store the blockchain files on an external hard drive use `-datadir`. e.g. `-datadir=/path/to/your/bitcoin/directory`
- This site has a nice predefined template for generating bitcoin config files https://jlopp.github.io/bitcoin-core-config-generator/
See Also: Running Bitcoin