1
$\begingroup$

This person was asked: "Why is a blockchain implementation different than a distributed consensus system like Raft?"

In part of their answer they replied:

For one, Raft is not Byzantine fault tolerant, i.e., not designed to account for arbitrary failures. If a participant fails by telling different peers different things, consensus fails. In context of blockchain, this would be equivalent of a malicious consensus participant lying.

Another wrote:

As others have mentioned, Blockchain has Byzantine Fault Tolerance. Raft and other consensus based systems such as Paxos do not.

My question is: What is the algorithm for Blockchain's Byzantine Fault Tolerance?

$\endgroup$
  • $\begingroup$ Essentially, it is game theoretically optimal for every miner to mine on the longest (chain with highest accumulated difficulty) chain. Since the expected time between the creation of a block is ~10 minutes (it's slightly less than this, since we don't count fork blocks), there is more than enough time to distribute new blocks through the entire network before new blocks (fork blocks) appear. $\endgroup$ – Pål GD Sep 5 '17 at 21:24
  • $\begingroup$ By "Blockchain", do you mean Bitcoin? What research have you done? There are lots of explanations of how Bitcoin works; any good one should answer your question. There's probably not much point in us repeating how Bitcoin works, so it would help for you to first understand Bitcoin, then if you're still unsure, edit the question to explain what your uncertainty is. Once you know how Bitcoin works and what BFT is, I would expect the question to answer itself, so it would help to know what is giving you difficulty with it. $\endgroup$ – D.W. Sep 5 '17 at 21:43
  • $\begingroup$ I mean the difference in algorithm choices between Etherium and Bitcoin - but was trying to make the question about the design rather than tool. $\endgroup$ – hawkeye Sep 6 '17 at 0:29
  • $\begingroup$ I don't understand how that connects to the text of your post. Can you try editing the question to clarify what you are asking and what you already know? $\endgroup$ – D.W. Sep 6 '17 at 4:57
1
$\begingroup$

Actually the differences are more intricate than that. A problem here might be that the properties of "blockchains" are not very well specified and the term is used for a wide variety of things (going as far as simple databases) for marketing. So let's see what is out there.

When you are designing a fault tolerant system there are multiple properties to take into account. These include:

Crash or byzantine failures

Should the system be designed to withstand nodes just stopping to do anything (i.e. no messages at all) or should it also consider nodes which exhibit arbitrary behaviour?

Eventual or strong consistency

Should the system provide certainty, that some state is final and not revertible or are we okay with irreversibility with high probability?

Open or closed membership

Is it known in advance (and to all nodes) who is participating in the protocol? E.g. a reliable database used by google has a defined number of nodes, which are known to all other nodes. In Bitcoin it is unclear even how many miners are participating in the consensus algorithm.

There are a few more things, but these are the most important ones. I am regularly contacted by people who want to use blockchain technology and the conversations always come down to figuring out what requirements regarding these three properties they have and then I recommend some system.

For the most well known ones the properties are:

  • Bitcoin / Ethereum: Byzantine failures, eventual consistency, open membership
  • RAFT / Paxos: Crash failures, strong consistency, closed membership
  • PBFT / Zyzzyva: Byzantine failures, strong consistency, closed membership

When choosing a system you try to take the easiest one possible, as the stronger models normally come with a large penalty in latency and throughput for transactions.

Crash failures are easier than byzantine failures. This is easy to show, as byzantine failures include crash failures. Most of the algorithms include some kind of voting. Having a majority is sufficient with crash failures to make decisions, while byzantine failing nodes might send different votes to different receivers. This might lead to two honest nodes seeing different results for the overall vote and getting out of sync.

Open membership is much more difficult than closed membership, as sibyl attacks, where an attacker generates many identities need to be counteracted by something like proof-of-work or proof-of-stake. This is the main new thing Bitcoin invented and that created the blockchain hype. A chain of blocks of transactions has existed before, as batched commits of transactions was a standard thing for at least 20 years before Bitcoin.

Applying this to the algorithms I listed:

The overhead of RAFT is small, PBFT and Zyzzyva already have a significant amount of communication overhead ( O(n^2) messages and a large number of signatures). Systems like Bitcoin and Ethereum have latencies in the order of minutes to hours (depending on your required level of security).

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.