Putting It on a Blockchain Does Not Make It Decentralized

Photo by Roger Brown from Pexels

Satoshi Nakamoto solved the Byzantine Generals Problem — the problem of reaching consensus between participants in a distributed network with incomplete information — and by doing so also solved the double-spend problem for digital currencies. His solution is a distributed timestamp server whose concept of time emerges from consensus achieved by nodes proving to each other that they are in agreement by expending verifiably costly computing power.

The data structure on which this timestamp server builds, is a chain of blocks, where each block has a link to the block before it — what we call a “blockchain” today.

Storing data (transactions in our case) on a blockchain establishes a clear chronology: Transactions in older blocks must have come before transaction in later blocks. It does not, however, determine truth from falsehood. The blockchain is just information, and information can be copied and modified. How, then, can we create an unbreakable link between reality and the information on the blockchain without putting an authority in charge who establishes the link by decree? When multiple blocks can point back to the same previous block and multiple transactions can attempt to spend the same coin, how does the network decide what counts with no authority? And how can participants on the network see what it has decided without needing to trust anyone?

The fact that transactions are stored on a blockchain does not itself solve these problems. We need the right incentive structure.

The problem of reaching consensus in a distributed network with incomplete information is twofold: Incentivizing collaboration and identifying the prevailing consensus. It must be in the self-interest of each participant to collaborate with the rest of the network by joining the prevailing consensus rather than fighting it. To do so, each participant must first be able to identify the existing consensus. You cannot join the consensus if you do not know what it is.

In other words, we need a mechanism that allows nodes to identify the chain of blocks that most of the network considers truth, and we need to incentivize each node to support this chain by working on adding blocks to it instead of to a competing chain. None of this is automatically achieved by storing data on a blockchain.

The solution is fourfold:

1) Have nodes join the longest chain they can find and reject all others

2) Let any chain grow in proportion to the amount of costly work committed to it.

3) Institute a block reward: Participants receive new bitcoins in proportion to their share of the network’s total work.

4) Add a difficulty adjustment: The collective work required of the network to produce a block is regularly and predictably adjusted so that the average time between blocks is 10 minutes.

By this mechanism, nodes identify the longest chain as the consensus chain and prove their acceptance of it by working on extending it. That a chain is longest proves that it has had the most work done by the network, hence that most nodes consider it truth. The longest chain, having most nodes working on it, outpaces any competing chain thereby cementing its lead and status as truth. Because nodes expect the longest chain to keep growing the fastest, they expect the block reward for competing chains to be rejected. If they want compensation for work done, they must work on the longest chain. So, they do.

With such strong incentives to join the longest chains, new nodes can be quite certain that the longest chain they can find is the consensus chain and remains so by growing the fastest. But, given that a node has joined the network, how can it keep verifying that new blocks belong to the longest chain? How can it continuously verify that it has not been isolated by malevolent nodes feeding it a false alternative chain? How can the node remain certain that its chain corresponds to the global consensus when it is only directly connected to a tiny subset of the global nodes?

Enter the difficulty adjustment.

Suppose the node has joined the consensus chain: The longest and fastest growing. The difficulty of the proof-of-work required to find a new block on this chain is adjusted every 2016 blocks, so that on average it takes 10 minutes per block. In absence of large recent changes in computing power, it is thus fair to assume that blocks arrive with 10 minutes between them on average. The difficulty adjusts based on the proven work of the entire network from the previous period. Hence, it takes 10 minutes between blocks only if the entire network works on the same block. If a group of miners were to build on a block that would be rejected by the rest of the network (if it breaks consensus rules), it will take them much longer to mine blocks on their own (in inverse proportion to their share of the total computing power on the network).

For a node that follows the blockchain live, observing that the time between blocks is on average 10 minutes thus constitute proof that these blocks are part of the global consensus. Blocks produced by anything, but the majority of the network’s computing power would be spaced much farther apart. Only the chain with most computing power can produce blocks at the rate of one every 10 minutes.

Thus, nodes know not only that the consensus chain grows the fastest, but they also know exactly how fast it should grow. Consensus blocks are added at a (quasi-) constant rate like the ticks of a clock. Any fake clock will go much too slow. Hence, every node should monitor the time between blocks received. As long as it is approximately 10 minutes, everything is good. If nodes receive fraudulent blocks, the fact that they are necessarily produced much too slowly alerts the node that something is wrong.

Thus, consensus is achieved and verified through a timeline of blocks — a timechain — which continuously proves to any observer that it constitutes the global consensus by keeping a steady time. Nodes can continuously verify that new blocks belong to the consensus chain because the time between them directly proves what share of the network’s computing power is allocated to producing them.

That this consensus mechanism takes place on a blockchain is a glaringly incomplete observation. The goal is to achieve consensus in a distributed setting — to have no single authority with the power to decide between competing chains, but nonetheless have a single unbroken chain of custody that counts. Difficulty-adjusted proof-of-work turns the blockchain — the database structure — into a timechain, which allows consensus to emerge.

Consensus is only truly necessary in a distributed network with no central authority. If you cannot run your own node, or if the code is not open source but owned by some entity, then you are not dealing with a distributed network without central authority. You are dealing with a regular centralized network. It does not matter that it stores something on a blockchain and has a native token. Unless you know with full certainty that everyone (every node) is equal on the network, there is no reason to expect that they are.

The frequent assumption that something is “decentralized” because it uses a blockchain probably stems from an underappreciation of the difficulty of achieving consensus in a setting with no authority. It is not a trivial task. It was not solved by storing things on a blockchain. It was solved by instituting the right consensus mechanisms in order for nodes to collectively decide between competing versions of the same chain.

The important invention is the sum of a blockchain as the underlying database structure, proof-of-work as the consensus mechanism, open-source code for maximum transparency, and the ability for anyone to participate in the network by running a node.

Any “blockchain technology” or “crypto project” that uses blockchain with anything less than the above four criteria met, is not really a decentralized network. Adding wings to a car will not make it fly and putting something on a blockchain does not make it decentralized.