Commit Graph

35 Commits

Author SHA1 Message Date
Vladimir Komendantskiy c8034da332 corrected the CommonSubset module and test to decide on a map of values insetead of a set 2018-05-15 18:18:05 +01:00
Vladimir Komendantskiy eadd233fe4 added the Common Subset test module 2018-05-15 15:44:47 +01:00
Andreas Fackler 5528fc2de8 Define a common DistAlgorithm trait.
This will allow us to deduplicate network simulations in tests for the
different algorithms. More generally, it facilitates writing general
tools and applying them to all distributed algorithms.
2018-05-15 15:48:43 +02:00
Andreas Fackler e2c66e9a0a Add optional serde support.
If the feature "serialization-serde" is specified, protocol messages
implement serde's `Serialize` and `Deserialize` traits.

Close #18
2018-05-14 18:32:59 +02:00
Andreas Fackler 71fa32c18f Remove interior mutability.
The `RwLock` is not needed anymore, since the broadcast implementation
doesn't handle any threading internally.
2018-05-14 09:35:34 +02:00
Andreas Fackler 38cdd596a2 Start implementing the top-level Honey Badger algorithm.
This also contains a few fixes for the `common_subset` module:
* Rename `common_subset::Output` to `Message` to avoid confusing it
  with the value that the algorithm outputs as a result.
* Implement dispatch of messages to the right instance within
  `CommonSubset`, in a way that is transparent to the user.
2018-05-12 16:09:07 +02:00
Andreas Fackler 36183b1e27 Simplify the message types. 2018-05-10 17:52:12 +02:00
Vladimir Komendantskiy fb50e38ead replaced the map of estimated values with only one optional value for the current epoch 2018-05-10 12:09:22 +01:00
Vladimir Komendantskiy cf33bac533 added the proposer ID to common_subset::handle_broadcast and mae it an interface fn 2018-05-10 11:01:25 +01:00
Vladimir Komendantskiy 259d5369b0 corrected the count of AUX messages 2018-05-10 10:07:22 +01:00
Vladimir Komendantskiy e0005a672b removed the separate field in Agreement and corrected computation of estimated values 2018-05-10 10:07:22 +01:00
Vladimir Komendantskiy 3e35cc665b added element_proposer_id to the Agreement input to the Common Subset algorithm 2018-05-10 10:07:22 +01:00
Vladimir Komendantskiy 394462c88b changed code according to review comments 2018-05-10 10:07:22 +01:00
Vladimir Komendantskiy 5215156ec5 defined the output from the Common Subset algorithm 2018-05-10 10:02:03 +01:00
Vladimir Komendantskiy d3b974f888 Binary Agreement implementation and its wiring into Common Subset 2018-05-10 10:02:03 +01:00
Andreas Fackler b98bbe9dcd Fix broadcast and example, enable more tests.
This fixes several issues with the broadcast algorithm and enables the
previously ignored tests that now pass:
* Don't decide on a root hash based on anyone's `Echo` message.
* Work around the `merkle` crate's inability to produce the proof of the
  `i`-th leaf for a given index `i`.
* Ignore messages from unknown nodes.
* Avoid decoding multiple times.
* Document the full algorithm.
* Don't count multiple `Echo` or `Ready` messages coming from the same
  node.
* Fix index computation for a given proof.
* Move `BroadcastMessage` into `broadcast` to make the module more
  self-contained.

The example now only executes a single broadcast instance, expecting the
first node (the one with the lexicographically lowest address) to
propose a value. A shell script is added that runs for example nodes.

Use env_logger instead of simple_logger, so the log level can be controlled
with an environment variable. You can e.g. log all output from the broadcast
test and the crate itself in debug mode with:
RUST_LOG=hbbft=debug,broadcast=debug

Some debugging messages are more concise now and use hexadecimal
notation instead of printing arrays of decimal values.

An indentation error in the Travis script is also fixed.
2018-05-08 17:04:38 +02:00
Vladimir Komendantskiy dda1570bfc Merge branch 'afck--examples' of github.com:poanetwork/hbbft 2018-05-06 22:49:41 +01:00
Andreas Fackler eec3102cbf Move node to examples, deduplicate code. 2018-05-05 17:54:29 +02:00
Andreas Fackler 7826987af1 added a Travis configuration file, fixed Clippy lints 2018-05-05 09:53:29 +02:00
Andreas Fackler 8bced81438 removed some unnecessary cloning
This also adds a few TODOs to the broadcast implementation: Some of
these issues need a regression test. (Oh, and a fix!)
2018-05-04 09:58:21 +02:00
Vladimir Komendantskiy cde3a879e5 modified Agreement::set_input to output a BVAL message 2018-05-03 10:13:41 +01:00
Andreas Fackler babbd2f36a fixed broadcast failure with malicious value proposal 2018-05-03 11:07:37 +03:00
Vladimir Komendantskiy 98e3cf76a3 implementation of the last clause in Figure 4 2018-05-02 15:47:30 +01:00
Vladimir Komendantskiy 7b04d5e084 created broadcast and agreement instances in Common Subset 2018-05-02 14:10:26 +01:00
Vladimir Komendantskiy 389855839f wrote CommonSubset::on_agreement_result and made related updates in agreement.rs 2018-05-02 11:57:28 +01:00
Vladimir Komendantskiy fbb69baa3c updated Common Subset with the new NodeUid type parameter 2018-05-02 08:15:47 +01:00
Vladimir Komendantskiy 579abbf415 merged changes in common_subset.rs into master 2018-05-01 20:21:13 +01:00
Vladimir Komendantskiy a792a209b5 Common Subset handler for input messages 2018-05-01 18:12:05 +01:00
Andreas Fackler f710806b17 test broadcast in a single thread 2018-05-01 19:38:11 +03:00
Vladimir Komendantskiy bb765cbb06 propose_value function in Broadcast 2018-05-01 15:28:31 +01:00
Vladimir Komendantskiy 2daaf7baf2 rewrote part of Common Subset to call Broadcast via a callback handler 2018-05-01 15:09:08 +01:00
Andreas Fackler 6117e11a9e applied rustfmt 2018-04-30 18:55:51 +03:00
Andreas Fackler f399ed2c07 fixed Clippy lint warnings 2018-04-30 18:50:24 +03:00
Vladimir Komendantskiy 3ae0984733 fixed a potential RwLock panic in the Common Subset handler 2018-04-26 18:49:57 +01:00
Vladimir Komendantskiy eef846550f added the ACS algorithm with one clause not ready yet 2018-04-26 14:22:18 +01:00