As a community, we've already had many conversations about consolidating what we already have across the existing projects. The effort to maintain consensus engines is exceptionally high, which makes them good candidates for sharing across the DLT projects. The previous conversations have focused on what we would need to do in order to have a universal consensus API across projects.
Fundamentally what we need out of that universal consensus API:
1. A library which can work with both Rust and Go
2. DLT agnostic, so all the DLTs can adopt it. This means it does not define any network protocols, should not define it's own system processes, etc.
2a. It should not define a networking layer (it should rely on the DLT to provide it)
We've started down this path within our Sawtooth work. The initial iteration can be seen in Sawtooth's existing consensus engine design, and we are working on a library-based iteration of the approach to make it more easily consumable outside of Sawtooth.
I'd like to see a commitment in this project to support all Hyperledger DLTs. That support can come in the form of being agnostic (doing the Fabric/Burrow integration in Fabric/Burrow and keeping Babble agnostic so it can be adopted by other projects), which is the approach taken by Ursa and Transact.
Eventually, maybe we end up with a lot of top-level consensus projects:
- Consensus API - defines the APIs which consensus engines implement and the DLT-facing Rust and Go APIs for using them
- Babble - Hashgraph
- PBFT - derived from Sawtooth's PBFT implementation
- PoET - derived from Sawtooth's PoET implementation
- Raft - derived from Fabric or Sawtooth's Raft implementations
- other projects implementing the Consensus API