Does Bitcoin have a constitution?
Earlier this week, I read Jonathan Kirkwood's "The United States of Bitcoin" (#1204462). In that piece he makes the analogy that different implementations of Bitcoin such as btcd and Knots are like different states in the union:
Bitcoin is a constitutional order written in code and sustained by consent.
This was a really interesting analogy and it got me to thinking: what is the Bitcoin equivalent of a constitution?
Is it the whitepaper?
The whitepaper is really vague compared to the code that is running on our nodes. It doesn't say anything about op_codes nor multisigs nor anything about coinbase coins being locked for 100 blocks.
Just following the description of Bitcoin laid out in the whitepaper, I'm pretty sure we'd have to say Bitcoin Cash is Bitcoin. I imagine not many are willing to make such a concession, so we must mean something more than what is described in the whitepaper when we say "Bitcoin"
Is it Bitcoin Core?
Satoshi, being awesome, didn't just release a whitepaper -- Satoshi also released software. This software client was described by Satoshi as "still alpha and experimental" and there never really was a version 1. After version 0.21 Bitcoin Core dropped the leading zero and released version 22.
The name of the "Satoshi client" was changed to Bitcoin Core in December 2013 (you can read the Github discussion about the change here).
Many people call Bitcoin Core the "reference implementation" of Bitcoin -- which I take to mean any implementation that wants to be Bitcoin has to match Bitcoin Core even down to its bugs.
There are a number of oddities about the original prototype that Satoshi released which have to be preserved if one wants to be able to sync the same chain as all the people who are using Bitcoin these days. Here are some examples:
- The genesis block's coinbase output cannot be spent.
- The OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY operations pop one element too much from the stack (requiring an extra dummy push in the redeem script).
- The checksig operations in a coinbase's scriptSig count towards the sigop limit of a block, even though that script can never be executed.
- Encoded public keys and signatures are valid if and only if OpenSSL accepts them, including the many non-standard or simply broken encodings it accepts. Since 0.8, such non-canonical encodings are considered non-standard, but still valid inside blocks.
These are essentially consensus rules of Bitcoin that have nothing to do with what we think of as the rules of Bitcoin. They are just things that implementations of Bitcoin have to do if they want to be able to sync the BTC chain.
Is it libbitcoinkernal?
There is a project to identify Bitcoin's "validation logic, or all the logic required to determine if a given block extends the current best-work chain." This project is called libbitcoinkernal and is currently being led by @TheCharlatan (don't confuse libbitcoinkernal with Libbitcoin -- they are completely separate projects that just happen to have similar names). Here is a nice explainer he wrote.
The project has so far concentrated on cleanly separating Bitcoin Core’s validation logic from its non-validation logic.
Perhaps libbitcoinkernal will make a clean sort of constitution to which we can all refer...but this would then put a lot of pressure on the people who maintain such a project -- much more pressure even than is currently on the Bitcoin Core project. Which perhaps leads to a better question than I began with: should Bitcoin have a constitution? Perhaps we are better off with our rough consensus, lacking any clear set of rules.