Thoughts about Coda and BFT

Just wondering if anyone has thought about the advantages and disadvantages of implementing coda using BFT instead of Ouroboros? What were the reasons behind choosing Ouroboros over other possibilities?


Yes! Sorry for the delay, but figure better late than never.

We did spend a bunch of time considering, early versions of Coda even considered using BFT. But ultimately we decided it would better serve as a layer two on top of Coda’s base consensus, as work for a future date.

It really comes down to tradeoffs on how the members are chosen.

For BFT:

  • BFT can handle at most ~100 participants in any consensus round. These can either be a fixed group (DPOS - EOS / TRON), or a randomly selected one (dfinity + algorand). We wanted something more decentralized than a fixed group can offer, as this has the potential to create a power imbalance between those that participate directly in consensus and those that don’t. I’m very excited about randomly selected committees as in dfinity and algorand, but there are challenges there as well where we wanted to see a production system first. If anyone knows what happens with these systems if > 1/3 of stake is offline too I’d be interested.

For Ouroboros:

  • Ouroboros is most similar to nakamoto consensus (and I think comparable to tezos as well). It has the nice property that any number of parties can participate in consensus (without bound, as many as a gossip network can support, so even tens of thousands or more). It also comes with the nice bonus that you can do better than the at-most-33%-dishonest you get with BFT, at the small tradeoff of some additional assumptions on assumed message propagation time compared to BFT. We also liked that it has formal proofs for it.

Our goal was to maximize decentralization with something relatively well specified, so Ouroboros made sense to us as a choice to build our consensus off of. The one thing you lose is instant finality, but with the goal to maximize decentralization, the tradeoff seemed worthwhile. We also hope this can be be “natively” added later, by building a BFT SNARK machine with randomized committee selection that gets fully verified by Coda’s transision snark, to add on instant finality functionality without trading off any decentralization or ease of access.