Blockchain Engineering is a collection of jupyter notebooks to teach the fundamentals of any blockchain system.
As opposed to other blockchain courses we follow a different approach - we build the blockchain up from scratch, starting from bottom to the top. The main focus of this notebook is to explain and visually show how to understand distributed systems and think like a blockchain architect.
At the end of this course you will have a better understanding of the challenges faced while designing a blockchain system and how to overcome them.
The notebooks are built as experiments with a discrete simulation SimPy that allows you to simulate unreliable communication, malicious behavior and convergence algorithms.
Start the exercises by forking the repo and go through the notebooks one by one.
- Distributed systems. Overlays and communication network. Introduction to simulation framework
- Gossip. Convergence of the transactions, information
- Faults in distributed systems: crashes and disruptions
- Malicious nodes, adversary model
- Consensus and agreement despite malicious nodes
If you notice anything unexpected, or you want more topics, please open an issue and let us know. If you like the project and want to help us, contributions are very welcome! Feel free to open a feature request. We are motivated to constantly make it better.
- Clone/Fork the repository:
git clone https://github.com/grimadas/BlockchainEngineering.git
- Install python >= 3.7. Alternatively you can also use conda.
- Install required dependecies
-
To enable some of the animations used install graphviz.
-
Install required python dependecies:
pip install -r requirements.txt
- You can start the exercises by opening the notebooks via from your cloned directory:
jupyter lab