There has been a lot of chatter recently on coat-tails of Bitcoin core’s 2016 Roadmap which was disappointing for a lot of people in the industry who were expecting to see a more immediate capacity increase via a non-contentious hard fork. This has brought the debate back to the issue of Bitcoin governance and our current lack of consensus on how Bitcoin should be governed. I had previously written a proposal about creating a meta-protocol above the technical protocols of Bitcoin itself, which would be a basis for competing ideas, goals and principles to be proposed and agreed upon, much in the same way the BIP is a process by which competing enhancements or features are proposed for the protocol itself. In the prevailing months, I have come to realize that a free market solution has manifested which makes such a rule system unnecessary: one of Emergent Consensus. (a sort of self-organizing property)
This is a completely new idea, and not one that we are accustomed to understanding, given that all organizations and political systems in present times rely on a notion of democracy where the general public (lacking sufficient time, knowledge, or rigor) delegate their rights to a representative, whom they vote into power, who in turn should make decisions on their behalf for a designated period of time. They do this for no visible reward, and the cost of failing at their task is losing the vote the next time around. In such a system, we are basically basing the entire security of the system on the premise that we will be able to find enough of these altruistic ‘saints’ who will consistently put the good of the many above their own desires. Of course, as we all know, supply of these saintly people are in hard supply, and thus corruption is born, inherent to the system itself. (Remember politicians are not supposed to be rewarded proportionally for the services that they perform) Bribing politicians is how the free market reacts to this inequality. This talks to the root of the problem with Proof-of-Stake systems, which serve to enrich the rich (those with more stake) proportionately more than the poor. This is also the base of consensus systems which rely on weak subjectivity* instead of objective consensus**, all of which are still theoretical and have not been shown to work in practice at scale. Our current democratic system of politicians and government is a weak subjectivity system. We must trust that there is a critical majority of politicians that are not corrupt, as well as trusting one specific honest politician to tell us what is in our best interest, in order for the system to work for us. I will leave you to ponder on whether or not it is an inherently stable system in the long run.
So what does emergent consensus mean? It simple means that there is no centralized enforcement of the consensus rules. It is simply not necessary. Every node is treated equally in the environment (no super nodes) and there is no need for any trusted oracles/advisors. This was the basis of the original Satoshi plan for Bitcoin: one CPU, one vote:
The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism.
– Satoshi Nakamoto, 2008*** –emphasis mine
Regardless of the fact that this vision has been blurred due to the advent of mining pools and mining relay networks, its basis as a guiding principle is sound. The trick is how do we tip the scales back towards the decentralized side of things given the situation now where ASICs and pool mining are a reality? I’ll tell you the wrong way to approach this, which is to give up and create a whole new alt-coin. This approach is normally taken by computer science PhDs who do not appreciate how money works. For proper perspective you need the free market economist types who understand what money is in order to realize that people don’t just switch the money they use without some sort of strong external force impelling them.
So what is the best way to claim back some decentralization in the form of giving power back to the non-mining nodes (economic nodes) in the network? The best way to do so is to give them a veto vote to what the miners decide on verifying. Miners create blocks that conform to what each one of them thinks should be the consensus rules, and each node can ratify or veto that block by choosing whether or not to accept it and relay it on. This is obviously weighted by the economic importance of the node in question (blockchain.info would have a stronger veto vote than my node I run at home, for instance) and additionally if they want more than a veto vote, and wish to change the feature set of transactions that they want to support, they can start mining themselves.
Let’s take a short break to let that no doubt controversial idea soak in a bit. In the meantime, let me take a small digression to the fundamental difference between Bitcoin and private blockchains:
Fundamental Basic Principle
Private blockchains: Trust, but verify
Bitcoin (public) blockchain: Don’t trust, verify
What does that mean? Actually the difference is very subtle, and probably only of interest to academics, but it has to do with the strictness of assumptions. With private chains, you assume that most of your counterparts are going to be trustworthy, so verification is something you need not do _all_ the time. However, with Bitcoin, you assume that everyone is potentially lying to you by default, so you MUST verify everything that they say if you want to gain objective truth.
How does Bitcoin achieve this ability to gain objective truth in absence of any trust at all? Through Proof-of-Work. Via PoW, there is a mechanism by which everyone can objectively know what everyone else will eventually agree on, without trusting anyone but themselves. This is The Golden Rule of Bitcoin. It is, in essence, the _only_ rule. But sadly, some people disagree on this point, even some core developers. Consider the following two seemingly similar statements:
The Golden Rule:
- The longest chain is the valid chain
- The longest valid chain is the valid chain
You should know, that these 2 simple competing ideological sentences lie at the core (pun intended) of the debate between the 2 main factions in Bitcoin developers right now. The word ‘valid’ shows up twice in the second interpretation, and it is not a mistake. The first ‘valid’ refers to a chain built by blocks which all conform to a set of dictated consensus rules. The second occurrence refers to ‘the accepted objective truth of the network state’. Astute readers will note that the second interpretation introduces weak subjectivity into the otherwise objective system! Why? Because now we must rely on some external party or parties to determine what is a valid chain! Only then should we pick the longest of that subset of chains to be the valid chain. So who can decide what is a valid chain? Currently that is determined by the developers. Interestingly, I’m sure that many of them would disagree with that, and have publicly stated that they don’t believe that developers should be able to decide consensus rules. However, without realizing, if they believe in the 2nd version of the Golden Rule, they are in effect, dictating consensus rules.
In fact, it has happened several times in the past. BIP50 and BIP66 the often quoted cases where a hard fork occurred accidentally (due to a bug in implementation) were times where the “Longest chain is the valid chain” golden rule was violated. This was due to various reasons, (some argue ‘valid’ ones) but the fact remains that the core devs effectively broke the Golden Rule of Bitcoin in order to save it. Now, the realization that may shock you: they were only able to do this, because Bitcoin has been centralized to the point where calling up a couple of miners and having them coordinate a rollback was possible! They saved the day and the whole world collectively breathed a sigh of relief. But while we were all glad that the network didn’t crash, most failed to realize that the implicit network guarantee of objectivity was shown to be breakable, and that a new (very bad) precedent was set — That developers could tell the network which fork was valid. Those cases in the past should therefore not be used as a model in how we should handle hard forks.
Indeed they should be a warning that the current lack of genetic diversity in the network means that we should work towards fixing it so that we can safely allow the network to settle hard forks the way Nakamoto intended it to work.
To be fair, there are some cases where this ‘reaching beyond the fourth wall‘ is necessary. Cases where a bug or a problem in the released code, will result in the total collapse of the network if nature were to take it’s course. This is the _only_ time that I believe devs should be able to step outside their bounds as implementors of the system and dictate which fork is valid.
Ultimately, I would argue that we are only sufficiently decentralized if and only if developers cannot tell the network which fork to choose. We are obviously not there yet; maybe we were at some point, and then we regressed when ASIC mining came about, or maybe we never got there, who knows. But the fact is that we have shown that presently, we are not sufficiently decentralized. (yes, this means Bitcoin is currently vulnerable to attack)
We can only get to this point, if we have sufficient alternatives to the core implementation of Bitcoin. We need miner diversity, and node diversity. And most importantly, we need developer diversity. (note: diversity, not quantity) After all, that is how evolution works. Not by some magical ‘intelligent designer’, but by genetic diversity, mutation, and pairwise individual relationships. Nature demonstrates to us the best way to ensure resiliency. If a fork happens, everyone is incentivized to find out what the consensus is, and to make sure that they obey the Golden Rule, otherwise they risk losing money.
_The Longest chain IS the valid chain_
This is sacrosanct, as long as everyone abides by this rule, then the network is guaranteed to converge on consensus, even though there may be some losses on losing chains, but that is the cost of risk, and the cost of consensus. Trying to protect everyone from *any* loss is a fools errand, especially if by doing so we violate that absolute rule.
Now back to our story…
How can we make sure that we have enough diversity in our system?
For starters we as non-mining nodes have little to do in supporting a given feature set or consensus rule. But we can be given the ability to veto a vote by the miners. How? The first implementation of Bitcoin which embraces this ethos is Bitcoin Unlimited, it allows each node to set the block acceptance rules, so that it will be able to reject or accept blocks if it violates a given block limit. What limit? Well, whatever you can afford to store, whatever fits your risk profile, or whatever is supported by an implementation run by miners that you support. In this way you have a veto vote, and if you are risk adverse, I suggest you run it with no limit in block size. There are reasons why running with no block size limit actually is safer than most people think. However, if you believe that blocks are already too big, I would suggest you set your block limit to < 1mb. To each their own.
So, we don’t have the 1 CPU 1 vote utopia that Satoshi dreamed of, but we have something more in line with that original vision. Everyone can affect, in some way, the game theoretic economic decision of how big a block is too big, or which feature is useful/harmful to the network. Most importantly, it makes the question of “what is the _right_ block size” determined by the free market. This is decentralized democracy, an emergent consensus system, and it is unlike anything we have ever tried before. It may just work, if we give it a chance.
Most of all, we should avoid at all costs situations where developers can dictate what the network should or should not be able to do. Evolution is a natural process. Trying to control it is akin to eugenics, and if we look at the Habsburg dynasty in Austria, we know where that road will end.
Tools for Emergent Consensus
Some great tools and metrics have popped up recently that help with the idea of emergent consensus. One of which is a brilliant simple visual forum where different proposals for Bitcoin can be discussed and opinions shown, and acts somewhat like polling systems in traditional democracies. Never discount the effect a good UX can have in helping with a distributed community consensus process. Another great tool to tracking emergent consensus is sites such as Coin Dance.
Compare and contrast the open forum above to this published by the Bitcoin core team, which reads more like a list of ‘experts’ — you should trust these people, your unofficially elected officials, because they know what is best for you.
No doubt they are very smart people, but this is not the way consensus should work in a decentralized system. It harkens back to what we are comfortable with; a system based on weak subjectivity. This is exactly the system which Bitcoin was fundamentally created to disrupt.