In the previous article in this section we looked at an overview of the architecture of Bitcoin as a decentralised monetary system running across a peer-to-peer network. Keeping things high-level, we split the architecture into two broad components. The rules that define how Bitcoin works as a monetary system, delivered as a piece of software and a hierarchy of network participants who run it.
In this article we’ll flesh out more details of the essential system functions and then look at the first of the network participants - a Full Node. Full Nodes play a crucial role in fulfilling Bitcoin’s core functions and enabling others to connect to the network.
In order to provide a functioning monetary system, without a central mediator, Bitcoin needs to achieve the following:
Satoshi Nakamoto encapsulated these functions in the original reference code he wrote in 2008. It has since been updated and is made available in a reference client, the most commonly used being Bitcoin Core.
The Bitcoin network has no hierarchy, but does have different types of Nodes fulfilling the required functions to a greater or lesser extent.
Each of the parts of the Bitcoin network represent an opportunity for you to actively participate in running and expanding its ecosystem, but the Full Node is the most crucial runs Bitcoin Core, nesting all functions (except Mining) by default.
By running Bitcoin Core anyone with a modest computer set-up and competence can become a Node on the Bitcoin’ network, helping fulfill the important functions, as well as providing a bridge to those that want to build services to expand the ecosystem and user adoption.
It is an open source piece of software maintained and developed by a voluntary team which is known, confusingly, by the same name - Bitcoin Core.
It is written in C++ and can be downloaded for free from Bitcoin.org. It will take several days to synchronise as it includes a copy of the ledger of transactions, known as the Bitcoin Blockchain.
The full Bitcoin Blockchain is currently over 350 GB but once the download is complete - known as Initial Blockchain Downloading (IBD) - you can start playing a direct role in supporting the Bitcoin ecosystem.
Running a Full Node means maintaining a constantly updating record of the ledger of bitcoin transactions, known as the Bitcoin blockchain. This means there is a significant bandwidth requirement for running a Full Node.
The bitcoin blockchain is, as its name suggests, a linked chain of historic bitcoin transactions recorded into successive timestamped blocks of data. This provides the accurate settlement history record that any monetary system requires.
The blocks are bound together using timestamps and cryptographic hashes and are created (via the Mining process) at intervals of roughly 10 minutes, which adjusts its difficulty every two weeks to achieve that (detailed below).
Each block of transactions has a hash to validate the integrity of the previous ensuring a sequential pattern of blocks called the blockchain.
The first block in the Bitcoin network is called the Genesis block because it does not reference any previous block. Instead, it was hard-coded into the source code by Satoshi.
Each block size is no bigger than 1MB, with a capacity to accommodate about 4,000 transactions (each transaction size is an average of 250 bytes). The size limitation is crucial to the objective of decentralisation because any increase in storage makes the IBD larger.
Too big and it limits who can participate, which is the antithesis of openness and inclusivity. This will make more sense as we fill in the details of the system participants that produce blocks, validate and verify transactions.
Just as a database is modelled, the Bitcoin network functions as a replicated database where each contains the same list of previous Bitcoin transactions. Full Nodes propagate this “transaction data” (payments) and “block data” (additions to the ledger).
The complexity of the Bitcoin architecture is in ensuring nodes acts independently of each other while still maintaining a highly secure and anonymous network. Although not all cryptocurrencies follow the Bitcoin network architecture, it the first successful and currently largest cryptocurrency network, and has been used as a model for many subsequent cryptocurrencies, adapting its rules and functions.
A Full Node validates any transaction sent to it as it includes a full copy of the Bitcoin blockchain - introduced above. Once a bitcoin transaction is sent to any node connected to the bitcoin network, the transaction will be validated by that node.
Validation is crucial to maintain the integrity of the whole system, which is why running a Full Node actively supports Bitcoin. Validation means ensuring consensus on:
If valid, each node will propagate transactions to the other nodes to which it is connected, and either a success or failure message will be returned synchronously to the originator, depending on the validity of new transactions.
Once proven as a valid transaction, the node propagates the transaction to other nodes which eventually gets picked up by a Miner and - after the required Proof of Work has been done - is added to the next block.
This structure prevents spamming, denial-of-service attacks, or other nuisance attacks against the bitcoin system. In a nutshell, every node independently validates every transaction before propagating it further.
Bitcoin Core acts like a server which means all the nested functions - as listed above - can be accessed and controlled by the client. Full Nodes do this by using set commands in JSON-RPC (Remote Procedure Calls) format which are available across a whole range of languages. So chances are, if you have programming skills you can communicate with Bitcoin Core and build out functions.
Given Bitcoin Core includes the full blockchain - the entire historical ledger of bitcoin transactions and balances - the possible uses of that information are limited only by your imagination and programming skills.
Here’s a list of ways of communicating with Bitcoin Core.
Python; Ruby; Erlang; PHP; JAVA ;Perl; Go; .Net; JS; Deno; Command Line; C; Clojure; C##
Full details can be found on the Bitcoin Wiki. There is however, a shortcut provided by the Intermediary Layer (sometimes called Client Layer) of pre-built APIs that will do the heavy-lifting for you.
Benefits of Running a Bitcoin Node
Running a full bitcoin node doesn't have any coin rewards, however, it comes with its intangible benefits. They include:
By running a node, you can actively participate in the crypto revolution helping shape an alternative monetary system. Before you start with the process, you need to know the risks and requirements associated with running a Bitcoin node. Let's dive into that-
1) Secure Your Wallet
When running a Bitcoin node, you can store your bitcoins in the Bitcoin core wallet, however; take safety measures as you would for running any other crypto wallet.
2) Minimum Requirements for a Full Node
Note: Ensure your laptop or desktop is running at optimal condition since most of the operating systems allow your computers to enter a low-power mode as soon as the screensaver activates. This will halt or slow down the traffic.
3) Problems You May Encounter
3) Options to Run the Bitcoin Node
There are three options to run a Bitcoin full node:
i) Run it on a virtual private network (VPN).
ii) Run it on an 'out of the box' solution, like Lighting In A Box, Raspiblitz, Nodl, Casa Node, etc.
iii) Run it on a customized solution, like Raspberry PI 4- a mini-computer that has the capacity to run full nodes on the Bitcoin network.
4) Now the Process to Run a Bitcoin Node on a Computer using VPN
Step 1: The first step is to keep your hardware ready to run the Bitcoin node.
Step 2: Choose the operating system you wish to use to run the Bitcoin node. Some options are Windows distributions (7,8, or 10), Linux distributions(Debian, Ubuntu, etc), and Mac OS.
Step 3: Install Bitcoin on your hardware using these step-by-step instructions.
Step 4: Follow these steps to configure your router to allow port 8333:
a) Login to your router, and look for the port forwarding(Virtual Server) section. You'll find it under the "NAT" section.
b) Input your IP address..
c) Type '8333' on both Internal Port Start and External Port Start.
d) Select TCP/UDP in the "Protocol" section.
e) Click Apply/Save
Step 5: Verify with websites like "earn.com" to ensure your Bitcoin node is reachable.
If your interest isn’t so much in participating in the ecosystem, but building the infrastructure behind it, that is just as permissionless.
Bitcoin Core is maintained by a voluntary team of Contributors, and anyone is free to propose changes, test code, review and make comments. Major changes to Bitcoin Core are proposed in what are known as BIPs - Bitcoin Improvement Proposals. These require a formal process of proposal, discussion and approval. Some of the biggest chances to Bitcoin, including Segwit - resulting from the so-called Block Size War - came via BIPs
Smaller bug fixer fixes and maintenance aren’t required to go through the formal BIP process, as on rare occasions they are fixes to significant vulnerabilities. This was the case in 2018 when a patch was required which could have led to the creation of bitcoin beyond the fixed supply cap which would have destroyed confidence in the entire system.
You don’t necessarily have to be a developer to help improve Bitcoin Core. You can help improve documentation, translation, suggest process change or improvements to the UI.
As an alternative to building and maintaining Bitcoin Core there are completely separate implementations of the Bitcoin Protocol, such as Libbitcoin, which act as collections of open source C++ libraries for building bitcoin applications.
Find out more about contributing to Bitcoin Core, but please note it is a support channel for Bitcoin. In the next article we'll look at the role Miners play in supporting the Bitcoin Network and how you can participate in the mining process.
Next step: What role does a Bitcoin Miner playGo to next step