This post is the first in a series where I naïvely approach the blockchain pattern in an attempt to better understand the technology. I will be documenting my thought process as I work to implement a simple blockchain.
Blockchain — sometimes also known as Distributed Ledger Technology (DLT) — has been exploding in popularity recently. Most people would associate the term “blockchain” with Bitcoin which was the first large scale blockchain implementation. Now, we have many other blockchain implementations which wildly vary. There are many different blockchain implementations from currency to identity management. If you are unfamiliar with the term blockchain, I recommend that you read Blockchain basics: Introduction to distributed ledgers which is a great primer.
The technology behind blockchain is extremely fascinating. I’ve been doing some thinking about what makes blockchain technology unique.
What makes a blockchain unique?
As far as I can tell, a blockchain has the follow properties:
The contents of the blockchain must be immutable. That is, the contents of the blockchain (i.e., the ledger) cannot be changed. Once data has been written to the ledger, it should be there permanently (barring catastrophic failure of course).
The consensus algorithm the devices use to agree on what is written to the ledger must be fault tolerant. In particular, the system must not be susceptible the the Byzantine Generals’ Problem and considered “Byzantine Fault Tolerant”.
A redundant copy of the ledger should be stored on every device that is participating in the network.
There must not be a central authority that can control the state of the blockchain. One of the benefits of blockchain technology is the ability to ensure that there are no bad actors illegitimately modifying the contents of the ledger.
Since the system is decentralized, then it is necessarily also distributed. Nodes in the network must be discoverable.
Changes to the ledger must be asserted cryptographically and verified by other devices on the network.
In the past few months, I’ve been working significantly with Hyperledger Indy and have had to think a lot about what a “blockchain” is. The questions that arise during my work were the reason for me writing this article but I’m still not quite satisfied.
If I have time, I intend on building a dead-simple proof-of-concept blockchain implementation. I hope that by building a simple blockchain, I can gain a much deeper understanding of the technologies that I’m working with but also make it available as a learning tool to the community.