Blockchains recovery in the details

Here are just a few words about the difficulty of  a blockchains revival process.

Normally, the blockchain isn't like an extraordinary complex thing. It is just an adjacent list of blocks containing transactions list, and every block is 'signed' by a miner (in PoW systems) or by network agreement (in PoS systems). All you have to know at this point is that every next block should have a knowledge about previous one:

The first one is root one, also called the 'genesis' block, and others are generated ones. In essence, the network is an agreement (described by the source code of project), and the set of interconnected nodes (Internet-connected computers) executes this agreement. In ideal conditions, its connectivity looks like:

Each node can produce new blocks and can distribute these blocks to each other over a P2P communication protocol. All blocks are the same for each node in case they are fully interconnected. That is like perfect situation (that we can achieve in lab) but in real world this can be a little bit different:

Some nodes are well connected in clusters, but between the clusters, the connection may be weak and slow (the red line in the picture above). This still allows the adjacent list of blocks  to be produced, but its generation becomes less obvious now:

Both clusters can generate their own block lists. During the communication of nodes A and B the chains (A' and B') have to be merged, which means that the previous link should be substituted by corresponding with one of other's cluster. But that's okay, it is still chain. The drawbacks of this situation are:

  • Some blocks that are generated by miners can be rejected. The transactions that should have been included in these block don't have to be lost but rather included in some another not-rejected block. In more simple words: not all miners will have rewards.
  • The transaction times are delayed. The delay is is determined by the lowest throughput (shown as the red line in the picture above). That delay can be measured in seconds, minutes, hours and even days.

Lets' go further. What if the weaker link would totally break?

Now clusters are not connected anymore. Just because they have the the same agreement on work (by the source code) and they have no idea about presence of other cluster, they will generate blocks as usual, each one in its own blockchain:

Cluster A now has blockchain A', and cluster B - the blockchain B' correspondingly. Both blockchains are valid in sense of its cluster. Both are single adjacent lists and withstand all validity checks. Lets show this situation from another angle:

We just avoided to draw any of 'crossed' links: now it's clearly seen that the blockchain has the single root, but after some time (when interconnection was lost) it splits up into two different ones.

In each of these blockchains, users have some addresses with balances as well as some some transactions, and everything looks valid in terms of the agreement. But which one of split blockchains is valid for any user? Actually, none of them. Users on blocks 1, 2, 3, etc are having balances and transactions that are absolutely not related to ones included in blocks a, b, c, etc. If some exchange service is running within cluster B, we have no ability to send funds to it from cluster A. To be more correct; you can perform send operation, but it won't ever be recognized from receiver side.

That is really bad condition of network which implies its death, also known as 'network split'.

That situation is usual for almost any long time orphaned coin, just like it was for Scash project before its relaunch. Some nodes were concentrated around Novaexchange, which is now closed, and another ones - around Yobit. No transactions between these clusters were allowed, finally making Scash network unusable.

To avoid this situation in future, there are some essential ways:

  • To have large amount of key nodes. These key nodes are absolutely the same as 'usual' ones but are running on hardware with greater availability in terms of uptime;
  • To have large network: the more clients we have, the higher probability that they will connect with other ones to have strongly connected clusters;
  • Other projects sometimes are using masternodes to stimulate users to have greater availability nodes, it is still good way to go.

But what if this already happened?

The revival of broken networks is a complex process. We have set of blockchains and should merge it to have the valid one, disallowing situations like:

  • Some users are losing their balances;
  • Some coins are spent twice.

Thankfully, it is still algorithmic task that can be performed on decent hardware. And in next post we will tell in more detail how it is possible.

Leave a Reply

Your email address will not be published. Required fields are marked *