Hacker News new | ask | show | jobs
by kibwen 3766 days ago
The release announcement mentions that the Go and C++ clients are compatible, but the Rust client (Parity) has also just added support for the new version of the protocol: https://twitter.com/gavofyork/status/703624799944310784

I'm happy to see that Ethereum encourages multiple implementations, I'm curious how they managed to achieve this given that Bitcoin seems to have had so much trouble doing the same.

2 comments

I'm not speaking as someone familiar, so someone who is should superecede me. But, I understand that it was a goal from day one not to fall into the same trap Bitcoin is in with their reference implementation. They did it by developing a spec, and having three official clients developed at the same time in three different languages.
Bitcoin's problem is not that it has a single reference implementation. It can be forked, at least in a technical sense.

Bitcoin's problem is that a tiny number of people managed to convince key players that they are irreplaceable "experts", despite having repeatedly proven that they aren't experts at all (go check out the Bitcoin forums today to see the wailing of users due to the giant tx backlog).

This isn't something Ethereum has any solution for. If Vitalik stepped back and after a few years some random developers had managed to manipulate the Ethereum community into doing something stupid, having 3 implementations instead of 1 wouldn't save them.

Pretty much sums it up. The majority of Bitcoin developers have always had the mindset that alternative consensus implementations will never be able to match, bug-for-bug, the reference implementation (and there is no official spec other than the reference implementation). Ethereum was developed with the mindset that having multiple implementations will help catch bugs in the official spec (yellow paper) before they are released.
Even still, AIUI the problem with Bitcoin is that a buggy implementation is capable of accidentally hard-forking the blockchain (as demonstrated by https://bitcoinmagazine.com/articles/bitcoin-network-shaken-... ). The existence of a protocol specification document alone wouldn't have prevented that. My question is whether Ethereum actually has some clever mechanism to ameliorate this threat, or whether it's just hoping that the existence of multiple implementations means that no one client ever gains more than 50% market share (and hence any hard-fork that results from an incompatible implementation wouldn't require a central authority to step in to determine which was the "true" chain).
Vitalik has actually said he now feels having three clients (written in go, c++, and python) was a mistake as it took up a lot of development energy in the early days.

Parity is actually not one of those three but was only recently created by Gavin Wood after he recently left EthDev. Gavin Wood was one of the principal authors of the C++ client.

He shared some of his thoughts on using Rust for the new client here: https://www.reddit.com/r/ethereum/comments/44y9vv/announcing...

https://bitcoin.org/en/developer-reference#not-a-specificati...

Case in point is the March 2013 bitcoin fork. Ethereum is not as battle tested yet.