Imagine we have a perfect message and a perfect blockchain and a perfect musical?
Imagine our perfect blockchain has entered into the entertainment business and we're casting Liza and Michael and Helmut and all for the 7pm session of that critical view of 1930s hedonism, Cabaret. Tickets start at 20EOS, sold on the blockchain.
And then along comes Crypt-XO, noted lover of theatrics, and asks, how does a message-based blockchain fork?
That made me wonder @iang_fc how is a message based blockchain hard forked? Differences?
Because that’s a good question - how does one do that? - I spent a day thinking about this. And I drew up a plan. Even more challenging and interesting, I drew up the notion of merging two chains that had forked.
I mean, really - if a chain can fork, it can merge, right? “It stands to reason…” It happens all the time in the theatre business, I saw it in the movie.
"The curtain is yours" says an injured Richard Burbage to an embattled Will Shakespeare.
So we know that theatres can merge. Splitting a currency is as easy as splitting a theatre it seems, as proven by those fine productions, Bitcoin on Broadway and Ethereum at the Albert Hall. Merging seems plausible, and while I was tussling with the precise meaning of how to merge a currency, it occurred to me that, no matter the song - "Money makes the world go round..." the world isn't just about money.
In the theatre production of Cabaret, tickets were of course sold-out months earlier. Now that our blockchain has forked, and the tickets are available twice, how does that work?
Do the seats fork as well? Do the actors sing and dance twice as fast?
The world is also about companies. So what about a DAC? In this case, a Distributed Autonomous Corporation (or a DAO in the slightly unfortunate Ethereum lingo) has issued 100% of its ownership to its shareholders. On a fork, do the shareholders pick up 200% shares, 100% on the left chain and 100% on the right? Do the CEO and all the staff have to work twice as hard to pay twice the dividends? Do the staff get twice the salaries? What happens when the taxman turns up?
Or grandma's house? When Mattereum has completed its fine legal work to get grandma's house onto the blockchain, and it forks, do we now have two houses? Two shares? Two grandmas? Do the grandmas have to let twice as many rooms, perhaps day rooms and night rooms?
If truly, "money makes the world go around," does a fork make the world go round twice as fast? I can see one advantage to the Bitcoin and Ethereum notion of forks and that is if the central bank were to adopt blockchain - then it would have the option of forking to do massive quantitative easing. Think about the benefits! If the Fed had issued a One True FedCoin, then 2008 crisis would have been a snap - fork and ease. Two One True FedCoins is twice better, the economists will say it so!
Or, if the EU is facing rebellion in the fringe states, then Grexit, Brexit, Prexit and be blessed! The Brits could have been quite happily dealing in Broyos while the Greeks would be spending up big on Greuyos.
There's something for everyone in a fork. And that's the problem - it's a concept that only a charity or aid NGO or other mystics could find sane. Actual accountants, actual owners, actual people who actually count and account, in the mathematical meaning of the term, cannot deal with the notion that yesterday there was one, and today there are two.
Maybe, yes to twice the money, but NO to twice the obligations.
Part of the deal with a contract is that the parties enter into a commitment that there is only one deal, one pile of cash, one trade. You can’t fork your partner’s intent, and therefore you can’t fork a contract. At least, and expect the contract to survive. It’s only in the extraordinary circumstances of the cryptocurrency code-as-contract can you fork, and that’s not a feature, it’s a bug. A chain that can fork, or a chain that permits a contract to fork, is not doing contracts.
So, all is not lost. In a messaging based blockchain such as EOS, it should be possible to write the contracts to handle a fork. Basically, although two forks can exist independently (and there is a scenario for that) the contract should act as one thing.
The chain can fork but the contract cannot. It can recognise messages applicable to both chains and should recognise that a key or agent that is signing messages to both chains is likely conflicted. So it can simply freeze any key or account where a message is seen from both chains and entering the contract into a forking conflict.
A requirement for this might be that a message has to indicate which chain it is referring to. I suspect this is possible by referring to a block header, something called TAPOS or Transaction As Proof Of Stake. Some thinking to do there, but basically this means that a software agent that is dealing with your account and your contracted value should be careful not to write messages referring to two separate, forked block headers because the contract is likely to interpret that as a fork and freeze out that agent entirely. Until a revoke message is received to undo one of the sides. Maybe.
As I say, there is some thinking to be done there (does the above create an option?) but it does rather hint that we can handle a fork on a message-based chain with enough hard love.
On a state-based chain, which is the flip side of Crypt-XO's question, that's much harder. In a UTXO-based system, the code is tied into the transactions, so each transaction is authoritative in and of itself and therefore it does not refer to the fork at all. With EOS at least this is solved by the message-based paradigm. (I'm unsure if Ethereum survives here because it is both message and state based, just to double up on the complexity and confusion).
Anyway. I'd just like to put a stake in the heart of the fork. The notion that a blockchain can just fork because we're all a bit different, and all the value forks too is death to business. It's like candy for kids, crack for weeders, push-button QE for governments, and frankly, it kills practically every smart contract. The fact that blockchains are running around doing the fork & doubling down on the money indicates nobody can run a smart contract on those chains and hope for it to handle value.
And what's a smart contract if it isn't handling value? Heaven knows what would happen to all those token sales on Ethereum if it were to fork today. If that worries you, just remember, Liza had the last word on depression.
"What good is sitting alone in your room?
Come hear the music play
Life is a Cabaret, old chum
Come to the Cabaret"