Now that we have set up the basics of how blockchains work (The Basics) and outlined the main foundation of distributed computing (The Origin of Blockchains), we can now examine blockchains as distributed systems. The main goal is to see what are the EXACT guarantees that blockchains provide and what assumptions they make to achieve these guarantees. For this analysis, I will be focusing on Bitcoin for simplicity and history, but other similar PoW chains, like Ethereum, will also fall into this analysis.
Famously, Bitcoin-like PoW blockchains boast a tolerance to bad actors that have <50% of the hash rate of the entire network. Notably, this is different than most historical distributed computing research which described security simply as a percentage of nodes that were failing. This re-framing of the problem of security is one of the reasons Satoshi was able to create a whole new way of reaching probabilistic consensus leveraging PoW. …
The origin of blockchain technology is usually simply attributed to the actions of some mysterious genius working under the pseudonym of Satoshi Nakamoto. This view of history usually makes the technology seem almost magical and implicitly hard to understand. It is a lot more grounding when one understands the actual history behind the development of these systems. In this section, I will outline the most important topics from the decades of research in consensus algorithms and distributed systems that led up to the creation of blockchains.
Leslie Lamport, one of the fathers of the field of distributed systems, once famously…
Here are the very basics about what a blockchain is and how it delivers the guarantees it does. Shown here simply to get all readers on the same footing when talking in more depth later. In this section, I won’t be going too technical, but will be introducing high level concepts that lay the foundation for these systems.
State (S) — The data being held/updated by the blockchain. In the case of cryptocurrencies, it could be a mapping from accounts to balances.
Transaction (T) — A transition function that changes the blockchain’s state from S to S’. In the case of a currency, it could be a transfer of coins from one account to another. …
Hello, I am Zain Admani. I am a computer scientist that has quickly been falling down the rabbit hole of blockchain technology and distributed systems. These systems include the current mainstream blockchains like Bitcoin and Ethereum as well as research contributions such as Paxos. Not only do I want to understand how they work, but also how they came to be as they are.
In order to make sense of this trip, I am writing down all my thoughts and understandings as they develop. I will also attempt to make it as clear and understandable as possible for any others who choose to follow down this trip. I hope this will not only help me understand the material better, but just maybe help others as well along the way.
Now let’s get to work.
We are happy to announce that we will be using Solidity as our pilot language on the ONYX Alpha! We are quickly making the changes to our Validator systems and will be releasing an update in the coming weeks.
Solidity is a language that is very conducive to test driven development. Implementations of simple logic can be tricky for newcomers but testing for behavior is rather easy. Also, considering the isolated nature of running solidity vs. any full scale desktop language, we think it is a simple yet effective proof of concept for our network.
We also believe that this choice is the best for both the team and the Ethereum ecosystem as a whole. This should help build the community by making smart contracts more accessible for people wanting to build dapps and also give a lucrative outlet to Solidity engineers. …
Distributed Test Driven Development powered by Ethereum
We are happy to announce Project ONYX, the first decentralized platform to enable Distributed Test Driven Development built on the Ethereum blockchain.
Learn more at https://projectonyx.io where you can find our whitepaper and our alpha build. All code is open source and is available at our Github. Come join us on Slack, Telegram, Twitter, or Reddit!
Test Driven Development (TDD) is a development practice that focuses on making software by planning and specifying expected behaviors with tests before coding up a solution. These tests fully lay out the intended behavior of the software the company is trying to create and any code (implementation) that passes these tests is deemed to be correct. …