LINIX101: Soft fork vs hard fork
Blockchains are often used as a public and permissionless network in which there is no central authority controlling its flow. While this concept of decentralization sounds great, it also comes with drawbacks. Blockchain offers a limited list of options in a “take it or leave it” scenario, meaning that there is no such thing as a “could I?”, but always a “you have to”. So, what do we do if a problem comes up? What if, it doesn’t suit a specific need or there is a flaw in the code? Even in those cases, we are still able to upgrade the network but only with the consent of the majority of users.
CONSENSUS ON UPGRADES
Regardless of the technical differences, public projects have one similarity in which the network will only upgrade, but most importantly maintain itself if, and only if, three groups work together: developers, validators and users.
- DEVELOPERS: in case a change is needed, they are responsible to come up with the best technical solution. If no developer decides to code, no matter how much people debate, there will be no change.
- USERS: they maintain the network busy and running, they are the supply and demand providers. Without supply and demand, the network would be worthless.
- VALIDATORS: they validate transactions and make sure that everything is right. If there are no validators, transactions would never complete.
If one of those groups is either absent or decide to do nothing, the network will never be fully functional. This is one of the main reasons why forks are hard and uncommon.
In DLT, whenever a modification in the code happens, we call it a fork and it must usually be accepted by the majority of the players mentioned above. The new code has two characteristics in which it is similar, not equal, to the original one and shares the same history.
Forks in DLT can be divided into two groups:
- SOFT FORK: the majority agrees to upgrade the current status and maintain only one network
- HARD FORK: there are at least two groups that disagree with each other resulting in single or multiple networks
When talking about soft forks people repeatedly explain it as being a backward compatible upgrade. What it means is that when there is a change in the protocol, users are given the option to update it or not. Even if someone decides to not update, this person will still be able to make transactions as long as it doesn’t break the new rules. As time passes, the number of users following the old rules decreases eventually reaching 0.
For example, when a community of a protocol with blocksize of 1mb decides to increase it to 2mb through a soft fork, some of the users decide not to update and stick to the original size. Even in that case, they will still be able to request and complete transactions, but it will be limited to a 1mb blocksize.
Different from soft forks, hard forks are not backward compatible and it can lead to two different results. The original chain can either become a new single chain or split into multiple independent ones. Either way, users must always update to the newer version to request transactions.
Another way to see it is that in a soft fork, we will always have only one token (the same as before the fork) while in hard forks, there is a possibility to either continue with only the original token (single chain hard fork) or have extra ones depending on how many forks happened (multiple chains hard fork).
Since all networks share the same history, in multiple chains hard forks users may be granted B tokens in the same amount of A tokens they had prior to the fork. For example, if I had 10 LNX tokens and the chain went through a multiple chains hard fork resulting in a different chain called LINIZ (LNZ), I would end up having 10 LNX + 10 LNZ, each with its respective prices. This, however, depends on each case.
One of the most famous examples of a hard fork resulting in two different chains is the Bitcoin (BTC) fork that led to the birth of Bitcoin Cash (BCH). With discussions around scalability, some users were unsatisfied with the current blocksize. This, in turn, led to a split in the community and the creation of Bitcoin Cash. At the time of this writing, BTC is being traded at US$ 5,259.74 while BCH at US$ 303.71.
You must have heard that sometimes, we have a temporary split of the main chain. As mentioned in the previous article, blockchain is a chain of irreversible data that always goes from oldest to newest. However, before becoming a single irreversible chain, it temporary splits into several others. These splits are a consequence of block creations where validators propose different blocks containing different groups of transactions (for more information refer to this article).
In the case of Bitcoin, the splits keep growing in length forming temporary splits until one of those chains becomes the longest and is permanently attached to become the main chain.
Keep in mind that temporary splits do not apply any change in the code, it only defines which transactions are added to a specific block, thus they are often not considered as a fork.
Stay tuned, and we thank you for all the support!