#proposal #round #sink #rhododendron

rhododendron

Asynchronously safe BFT protocol, futures-based implementation

11 unstable releases (5 breaking)

0.7.0 Jul 30, 2019
0.6.0 Jun 25, 2019
0.5.0 Jan 29, 2019
0.4.0 Oct 11, 2018
0.2.0 Jul 6, 2018

#23 in #proposal

Download history 83/week @ 2024-12-09 16/week @ 2024-12-16 6/week @ 2025-01-06 25/week @ 2025-01-13 14/week @ 2025-01-20 5/week @ 2025-01-27 33/week @ 2025-02-03 29/week @ 2025-02-10 35/week @ 2025-02-17 31/week @ 2025-02-24 20/week @ 2025-03-03 35/week @ 2025-03-10 25/week @ 2025-03-17 7/week @ 2025-03-24

89 downloads per month

GPL-3.0 license

73KB
2K SLoC

Rhododendron

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.

Dependencies

~2.5–9MB
~75K SLoC