The Bitcoin blockchain is managed by software running on computers that communicate with each other forming a network. Although multiple compatible software implementations exist, the most commonly used software is called ‘Bitcoin Core’ and source code to this software is published on GitHub. This software contains the full range of functionalities needed for the network to exist. It has the ability to perform the following tasks which will be explained in this section:
- Connect with other participants in the Bitcoin network
- Download the blockchain from other participants
- Store the blockchain
- Listen for new transactions
- Validate those transactions
- Store those transactions
- Relay valid transactions to other nodes
- Listen for new blocks
- Validate those blocks
- Store those blocks as part of its blockchain
- Relay valid blocks
- Create new blocks
- ‘Mine’ new blocks
- Manage addresses
- Create and send transactions
However, in practice, the software is usually only used for its bookkeeping function, which will be explained in depth in this section.
To understand how Bitcoin works, and why it works the way it does, it is important to keep in mind the objective: to create an electronic payment system that cannot be censored, and to allow anyone the ability to send payments ‘directly from one party to another without going through a financial institution’.
Such a system cannot have a central administrator managing the ledger, as that administrator would be the financial institution that Bitcoin is set up to avoid. The system therefore needs to be able to be operated by anyone, without any need to identify themselves or gain permission from a gatekeeper. The moment that parties need to identify themselves, they lose privacy and are vulnerable to interference, coercion, prison, or worse. This goes for both administrators of the system and users themselves. So every single part of the solution needs to work with these constraints in mind.
How did Satoshi go about designing the solution? Let’s start with a classic centralised model and then try to decentralise it. In this way, we can build up the design of Bitcoin step by step.
Classic Centralised Model
Let’s start with a ledger which keeps tracks of balances, managed by an administrator. You can think of it as a list with two columns: Account, Balance’.
Classic centralized model | |
Bookkeeper | |
Account | Balance |
000001 | $100 |
000002 | $50 |
000003 | $240 |
The administrator assigns account numbers to customers, and customers make payments by instructing the administrator. There is an authentication process where the customer proves that they are the account holder before the administrator will carry out the payment instruction. So each customer is named and, for security, has a password linked to their account.
Account mapping | ||
Account | Username | Pin/Password |
000001 | Alice | 1234 |
000002 | Bob | 8888 |
000003 | Charlie | 9876 |
The administrator maintains the central record of balances and makes all payments. They are responsible for ensuring that no one spends money they don’t have or spends the same money more than once, the ‘double spend’.
But if we want resistance to control and censorship, and to allow anyone to be able to transact with anyone else, we need to remove the administrator.
First, let’s remove the administrator from the account opening process, so that anyone can open an account without needing permission from the administrator.