Hacker News new | ask | show | jobs
by EGreg 3145 days ago
I think this obsession with consensus is a fad.

Forks are ok as long as they can be merged in the short term.

If something forks for a long time and stays forked, there is hardly any reason to establish a total order during the merge!

Think of an IRC netsplit for example. One that happens for a few seconds may attempt to merge back the chats in some fair order they were made, in diff forks.

But if the netsplit happens for a whole day, or month, no one really gives a crap about ordering messages across forks. The merge is too complex! In fact, the resulting conversation would be MORE nonsensical than if you correctly rendered the split conversations as a DAG in the client.

Similarly, if bitcoin forks into bitcoin cash or whatever, and enough validators accept it, I get to "double-spend" my new money now. Proof-of-work is no panacea. If we religiously want consensus then no transaction can ever be truly confirmed - there is always a chance some larger fork comes along and undoes all transactions on my fork going back a whole month. Interplanetary File System has to deal with this.

The problem is that we still haven't evolved our thinking about currencies as DAGs and keep worrying about the double spend problem and turn to global consensus to fix it.

2 comments

In the specific case of currency, practical double spends are a real issue. 'Merging' the state after a double spend requires either forcing the double spender to pony-up, or taking back money from those who received it without being aware of any wrongdoing. That is, unless you are fine with people printing their own currency.

This is rather unique to the case of currency though. Specifically, the history of transactions determines which future transactions are possible. Instead a system that only records promises (but doesn't allow transfer of such promises) would work without centralization. If I promise something to 2 different people I remain on the hook for that promise. The fact that I am effectively 'in debt' on the system isn't an issue because the system gives no guarantees on people meeting their promises.

Everybody prints their own currency all the time. Currency is just promises made. Double spend is when you duplicate somebody else's promises that you are holding as an asset.
How are you going to merge if you have different spends on the forks you're trying to merge? It's not a matter of whether or not you care about ordering. It's a matter of one branch's spend being invalidated by the spend in the other branch.

If the answer is to stop caring about double spend, how do you anticipate that working?

Yes, stop caring about double spend as long as it happens in long term forks. After some point, two different forks become two different communities. Similarly when you restrict gene flow between species which are physically separated, they often can't interbreed anymore. It's called allopatric speciation. There is evidence it happens in nature.

What you should do is have each community have its own internal currency, and then have global payments be powered by a federated system. Like the internet works.

Ok, I can see not worrying about permanent forks. How do you deal with double spending in short-term forks that will soon be merged?
Well, if there is a period that your transaction might get reversed, then the seller can't send you the stuff. Or, maybe you need a reputation system for buyers and sellers and so on (what eBay does) along with chargeback systems figuring out whether to let the transaction be reversed.

Typically, that period is until the next consensus. In Ripple, the consensus eventually takes place but sometimes may take up to a minute. In Bitcoin it may take 30 minutes. You are never quite sure that everyone "phoned in", but presumably if the network participants announce themselves on the network then you can know when a supermajority has "phoned in". If they haven't - you've got a fork baby.

You can also get a fork if they phone in but start a second consensus somewhere else lol.