Futures-based BFT in Rust. Mostly works, but not ready for production.
Most of the work is done with the agree
function:
pub fn agree<C: Context, I, O>(context: C, nodes: usize, max_faulty: usize, input: I, output: O)
-> Agreement<C, I, O>
{
// ...
}
There are three parts to invoking agree
:
- A
Context
, encapsulating value type to be agreed upon, as well as generation, evaluation, and signatures on values. - An input stream of messages from other nodes.
- An output sink of messages which will reach all other honest nodes.
This yields an Agreement
which can be run on an event loop to completion.