Over the last couple of weeks, Said and I gave our first public talk about the blockchain as a development platform to a crowd of software developers gathered in Devoxx Morocco and Belgium. Our primary goal was to take a step back from the technical aspects, from how you write smart contracts, how you secure the data using cryptography, and make developers sensitive about what’s at stake, the use cases, the limitations and generally WHY you should be interested in the blockchain as a development platform. The video of our talk in Devoxx Antwerp is on Youtube:
One question that we were asked a lot had to do with all the different flavours of blockchains and which ones have the most potential. And it is a very important question indeed, because as software developers, we are used to learning new technologies, new languages, new frameworks, new libraries, new paradigms, but we know that those learning curves are big investments and betting on the right horse as soon as possible can be decisive in your career. And it’s even more critical for the blockchain because whatever the flavour, a blockchain is a network of value so the ones that will be used the most will concentrate most of the financial value as well.
The 3-layer Model
During this presentation, we introduced our 3-layer model to try and make sense of all the concepts surrounding the blockchain:
At the most basic level of the blockchain, there is a set of concepts:
Where the web is a network of information, the blockchain is a network of value in the sense that it is designed to ease, accelerate and optimize the creation and transfer of assets between a number of individual or institutional participants connected to the network.
The network itself being more or less reliable depending on whether participants can join or leave the network at will, whether or not the links between participants are more or less resilient, whether or not participants themselves trust each other, the data representing the transfer of those assets should be distributed throughout the network instead of being stored in one central location.
In order for this data to be distributed, you cannot store just the latest snapshot but you are forced instead to record all the transformations applied to that data. This way, any participant that joins the network after a while can catch up with the rest of the network by downloading and applying all the transformations since the last one he had in his possession. That’s why all the blockchains are based on the concept of a distributed ledger from which the current state can always be deducted at any point in time.
Since any participant in the network can add his own transformations (also known as transactions) to the ledger, and the current state depends on which transactions are in the ledger but more importantly in what order, it is very important for all the participants to find an agreement on one common ordered list of transactions. The key mechanism by which participants find an agreement is called a consensus algorithm. In short, this algorithm defines the rules by which new transactions can be appended to the distributed ledger and recognized by all the participants as the one truth.
Since this consensus algorithm defines how the common truth is built, it is very important to determine who has control over this algorithm, in other words what is the governance model by which the ledger is determined. With a distributed data set like the one of the blockchain, the degree of decentralization of this consensus algorithm is absolutely paramount: a completely centralized consensus is very easy to corrupt even if it is easier to conceptualize. At the other end of the spectrum, a completely decentralized consensus algorithm is very hard to corrupt, but much more complex to implement and manage.
Another implication of the distribution is that you need a protocol to disseminate information in the network and for each participant to make sure that the information he receives from others is valid and genuine. And this is precisely where cryptography plays a key role in the blockchain.
Last but not least, those transactions listed on the network are essentially pieces of code that determine the conditions in which assets can be transferred from one participant to another, or more generically the conditions in which the state of the blockchain can change. These pieces of code are sometimes called smart contracts and they can be very straightforward and safe, or more sophisticated and risky.
There are several possible implementations for each of those concepts, depending on the values and constraints of those writing the code that implements them. A blockchain implementation is mostly represented by a code base that determines how the generic concepts mentioned above become reality. For the most part, this code is the one of the software program that runs on each node participating in the network.
Bitcoin was the very first implementation of the concepts of the blockchain. It was created in a very specific context with a very practical goal in mind: to create a new monetary system as an alternative to the centralized banking infrastructure that produced the 2008 financial crisis. That’s why in the Bitcoin blockchain implementation, most nodes are full nodes that store the entire ledger (almost 100GB to this date), data is fully distributed, transparent and anonymous. The consensus algorithm is also fully decentralized in the sense that any node can decide to participate in the consensus or not. And it remains secure despite this openness by combining principles of cryptography, economics and game theory in a specific form of consensus algorithm called proof-of-work: each node participating in the consensus algorithm, also called miner, competes every 10 minutes in a contest to produce the next block of transactions to be appended to the chain, this 10-minute delay being designed to minimize the interest of an attack. The first one to produce the next block gets rewarded with a freshly-created amount of bitcoins, the crypto-currency that is also the main transferred asset on the network. This way, since miners are interested in the asset growing in value, if they play against the network, they essentially cut the branch on which they are sitting. The Bitcoin blockchain implementation also has its own smart contract language called Script, but this language is voluntarily simplistic and lacks one key feature to make it Turing-complete (ie generic enough to implement any sort of algorithm): it doesn’t allow for loops. In a sense, Bitcoin is a specialized blockchain, designed primarily to solve a very specific problem. There are ways to somehow expand its functionalities beyond its original purpose of creating an alternate currency system, but they clearly come as an afterthought.
It is mainly because of those limitations in the smart contract language and in the speed of the network that another implementation called Ethereum was born. Its ledger is also fully distributed and its consensus algorithm completely decentralized in the form of a proof-of-work technique similar to the one of Bitcoin. But some key parameters are different in Ethereum. There is no pre-determined delay to produce blocks but on average they are produced every 17 seconds or so at the moment. In Bitcoin, only the miner that finds the next block in the main chain is rewarded. In Ethereum, you can also be rewarded a smaller amount of Ethers (the main crypto-currency on Ethereum) if you find a few blocks in a minority chain (uncles), which implies you have to wait for more blocks to be certain that a given transaction will stay in a specific order in the longer chain, but since those blocks are produced faster, the overall confirmation time is also shorter. In addition, the smart contract language in the Ethereum blockchain is Turing-complete, which means it is sophisticated enough to implement any kind of algorithm to decide how state can be transformed. Of course this sophistication comes at several costs. First of all it means that transactions can require a varying amount of storage space and processing power. In order to avoid the possibility for a fraudulent or badly designed contract to crush the network with infinite loops, every instruction incurs a small cost that has to be paid in transaction fees by the actor that triggers every transaction to the miner that mines the block containing the transaction. Second of all, the programming language used to write smart contracts has to be carefully manipulated in order to protect against nasty bugs that could create bugs that could jeopardize trust in the network and its currency. But with this sophisticated smart contract language, Ethereum is a much more generic blockchain, that looks a lot like a globally distributed computing surface.
When Bitcoin appeared, financial institutions, and especially banks were really scared of it. Then they started to understand that there could be opportunities for them to leverage some of its features to save time and money in their missions, especially where these missions involve collaborating with other institutions: compensation, international transfers, clearing, etc. The most interesting concept to them was the distributed ledger design. But the regulatory context in which they operate (Know-Your-Customer rules, anti-money laundering, etc.) made it hard to use a fully transparent and anonymous implementation. In addition, their position as financial intermediaries, their fiduciary duties and their business model made it very hard for them to give up on centralization of governance. That’s why most of them chose a more centralized variant of consensus algorithm with a permission model deciding which participants can join the network, and more importantly which participants are trusted with appending new blocks to the ledger. This trend gave birth to a series of implementations like Hyperledger, Corda/R3, Eris/Monax and many more. Since the consensus algorithm in these implementations is centralized, it relies on trusted parties that don’t need to be incentivized to participate in securing the network. So they don’t need to define a backing crypto-currency like Bitcoin or Ethereum. They can also offer a much higher processing speed for transactions.
In addition to those already well-known implementations, there are also plenty of implementations that are currently in development to try and tackle some of the problems and limitations identified with Bitcoin and Ethereum for example. It is a constantly evolving field and the landscape is still very much open.
For any given implementation, ie for any given code base, there can be many different instances. For example, you can take the code of the Bitcoin blockchain implementation, change a few parameters and initialize a brand new chain with its own backing crypto-currency. This is what we call an alternate coin, or altcoin.
Most of the existing altcoins are merely copying another implementation with very few customizations, and as such bring very little added value on top of their source implementation.
Others try to tackle some limitation of their source implementation by forking the code base and modifying some aspects of it, for example to enforce stronger anonymity as in the case of zCash.
There can also be forks that create another specialized blockchain to solve another specific problem than a monetary system. For example, namecoin was designed to create some sort of decentralized and distributed domain name service.
Also, when the code base of a given implementation changes slightly the rules by which new blocks can be appended to the chain, but not all the nodes participating in the network switch to the new version, we can observe a phenomenon called a chain fork: starting at a certain block, the chain starts splitting into 2 different versions of the ledger, effectively creating 2 variants of the initial crypto-currency incompatible with one another. That is for example what happened on the Ethereum blockchain after the DAO attack: a hard fork was implemented that split the chain into an ETH and an ETC chain. Most of the participants in the original Ethereum blockchain have switched to the new version of the algorithm and are mining ETH. But enough of the participants remained on the old version of the software, giving birth to the Ethereum Classic (ETC) crypto-currency and chain.
Last but not least, the exact same code base can be instantiated in several versions for testing purposes. For example, beside the main Ethereum chain, you also have a test Ethereum chain called Morden, on which crypto-currency is essentially monkey money, this chain being used by developers to test their smart contracts. And you can also create your own instance with a few colleagues or on your laptop for development purposes.
All those examples are here to illustrate that for each implementation, there can be many instances running either exactly the same code or a slightly changed code but on a different data set. And a given crypto-currency is only usable on a given instance.
By the way, on CoinMarketCap.com, you can follow more than 700 different crypto-currencies corresponding to as many blockchain instances.
So which implementations and instances qualify as real blockchains?
In other words, which implementations and instances have the most potential to still exist and concentrate a lot of value in the next 10 years?
For some purists, or Bitcoin maximalists are they are sometimes called, there is only Bitcoin. It is the purest, oldest and thus most mature implementation, and as such it deserves respect and you should think twice before questioning its power. And of course, resistance is all the more understandable as a lot of actors of Bitcoin have a lot of Bitcoins vested in the network, and when interests shifts to other implementations or instances, the currency potentially loses some of its value. For those in that community, there is no other viable consensus algorithm than proof of work, there is no other crypto-currency than Bitcoin, and loop-allowing smart contract languages are pure heresy because they completely endanger the safety of the assets exchanged on the network. To them, even the concept of the blockchain as a development platform makes very little sense, and they deploy treasures of creativity to extend the Bitcoin blockchain with mechanisms to implement some of the features it lacks (sidechains). And if there are limitations like the speed of the network, its scalability in terms of storage volume, etc. it can all be addressed with carefully thought out incremental improvements deployed in very slow forks agreed on after long debates in the community. To these people, even altcoins of Bitcoin, other instances of the same codebase are considered by default as potential scams or pump-and-dump schemes (or shitcoins as they call them).
Then there are those who are really amazed by the power of the concepts implemented by the Bitcoin blockchain, but would like to see them implemented in completely different ways. They still want to keep all of the design principles of the original, but they need more: more speed, more ease of use, more programmability, more extensibility. To them, Bitcoin was the first implementation, but there is no reason not to move forwards to tackle limitations of Bitcoin in a more radical way. Sure sophistication comes with its own risks and instability, but that’s merely the cost of progress. To those people, the blockchain really is a full-fledged distributed computing surface and development platform that opens the way to a whole new generation of software solutions and business models. The most popular blockchain implementation in that regard is Ethereum right now, but it doesn’t mean it is the final one. Ethereum has gone through a series of issues since May 2016 that have triggered heated debates between Bitcoin maximalists who basically said “I told you so”, Ethereum enthusiasts who said “Don’t worry, we’ll fix this, everything is under control”, and others who started to propose new chains to tackle Ethereum’s issues in more fundamental ways, like Synereo or Tezos.
And then of course you have all these big companies, mostly financial institutions, who are working on what they call “private blockchains”. In our view, those private blockchains are a corporate attempt at shoving a new technology into old business models and cultures, ripping the stuff apart to make it fit instead of using the opportunity to completely rethink their business model based on what a full blockchain really enables. You guessed it, we are not really convinced by this approach. To us, it looks a lot like what Microsoft and AOL tried to do with the web at the very beginning, trying to apply a “walled garden” approach to it, creating their very own Internet of sorts. Or like what some companies are still trying to do with the cloud, hosting an internal cloud in their own datacenters, thus completely missing the point of mutualized resources and shared elasticity. As far as we are concerned, we don’t consider these initiatives as “real” blockchains. They are generally pushed by big consulting companies like IBM or R3 who saw an opportunity to sell consultants by the hour to implement very complex solutions to problems that could very well be solved by much simpler architectures. The problems these companies have are real, but they jumped at the hype too quickly, and we think they are going to end up realizing that:
- Either they should completely rethink their business model and organization around an open blockchain implementation that leverages all its power in a distributed AND decentralized model
- Or they can stay with their centralized culture and implement much simpler solutions to the problems they really have to remain competitive.
In conclusion, for us, Bitcoin is way too limited and complex to develop on top of to be considered as a long term solution for distributed application development. It is the most mature network right now, but we shouldn’t stop there. Open generic blockchains like Ethereum (and others) are way more promising to us on the long run, despite their issues and constant evolution. But private blockchains like the ones sported by big consulting companies and banks don’t present the most interesting path to us. We think that the blockchain is as much a political and cultural challenge as it is a technological one. It really gives us the opportunity to rethink business models and organization cultures and we want to explore that path. Time will tell if we bet on the right horse or not, and maybe we will be proven wrong, but for now, that’s our view on things.