Comments (2)
As an optimization, after we've received N - f CONF
messages, we should probably use the minimal value set as vals
of which we know that at least one honest node put it into a CONF
, to make termination as likely as possible?
I.e. if we sent CONF({v})
ourselves or we received f + 1 CONF({v})
, we set vals = {v}
. Otherwise vals = {v, w}
. Then if the coin is also v
, we can terminate. (Even if originally we had arrived at {v, w}
, and sent CONF({v, w})
.)
I wonder if it would be safe to use vals = {v}
even if neither of those are true, but if in the meantime we have collected N - f AUX(v)
messages (so now we wouldn't need the other AUX(!v)
messages anymore, and realize we could have sent CONF({v})
) β or would that reopen the doors to something like the original attack again?
Edit: β¦or would that actually make termination less likely, because we would be less likely to switch to the coin value, like possibly all the other good nodes?
If we can justify both {v}
and {v, w}
with the above arguments, should we use {v}
only if the coin is v
, and otherwise use {v, w}
(i.e. switch)?
Probably there is no right answer, and the best strategy depends on the number of faulty nodes, and the current distribution of estimates. Something like: If the coin is not v
, use whatever the majority of the CONF
messages says? (Never counting invalid CONF
s, of course, with values not in our own bin_values
.)
Edit 2: And would it be worth doing the CONF
round even in epochs with a fixed coin, just because it makes it more likely that we can terminate? It would increase the number of message rounds in the most optimistic case, but since ACS has to wait for all ABA instances, it is as slow as the slowest out of N ABAs.
If we go with the first rule β always use {v}
if you can β, then if we received N - f CONF({v})
messages, we know that at least f + 1 correct nodes sent CONF({v})
and therefore will use vals = {v}
and not switch to !v
, even if the coin is !v
. We therefore know that v
will end up in bin_values
in the next epoch eventually, and could send both BVAL(v)
and AUX(v)
right at the beginning of the next epoch, and put v
into bin_values
right away. If enough nodes do that, it would effectively remove one message round from the next epoch.
from honeybadgerbft.
There is a bug in the CONF Phase implement
https://github.com/initc3/HoneyBadgerBFT-Python/blob/e8bcbc081dfb5d1e7298039d47bbebf7048b8e62/honeybadgerbft/core/binaryagreement.py#L40
The message broadcast on line 40 should be values, which is the output of AUX Phase, instead of bin_values. Otherwise, the security guarantees of the AUX round would not take effect!
from honeybadgerbft.
Related Issues (20)
- [test] add source code check to travis (pep8, etc) HOT 1
- [conventions] Coding style elements and more HOT 1
- Implement proposed batch size to be floor(B/N) HOT 4
- [logging] Setup minimal logging config HOT 1
- [test:coverage] measure branch coverage HOT 1
- [dev] charm-crypto fails to build with stretch (debian 9) HOT 2
- [dev] update/fix experiments HOT 3
- [test] add more unit tests for tpke module HOT 1
- license HOT 5
- Paper: clarification on number of decryption shares to wait for HOT 2
- Clarification: What will happen if a node goes down during RBC? HOT 2
- Bounded Badger HOT 1
- Threshold decryption seems to not actually work? HOT 3
- Issue running an instance with Docker HOT 4
- Optimistic Randomness for ABA HOT 9
- Is re-creating the merkle tree after N-F messages with the same root hash have been received necessary? HOT 1
- Python KeyError during standard test run
- Common coin in private network
- What wrong with me: initialization of pairing failed without raising an exception
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from honeybadgerbft.