Hi @pierrechevalier83 !
Here are some common sense questions on Parsec and its use, your clarifications would be greatly appreciated.
First for context, what is MaidSafe’s purpose with using Parsec to provide consensus in network events, meaning establishing a common consensus among voters on which members dropped in and dropped out respectively, just curious
- why is this an important problem to solve, and
- what is this answer used for.
I’d like to use Parsec for ordering in a distributed but common acyclical dependency graph that is being built over time.
What’s happening in my model is that each of voters Alice, Bob, Carol, Dave randomly over time come up with "conditioned vertex"es that do fit into the dependency graph according to their view of the graph, and that they would like to have inserted into the dependency graph so that ALL the four of them will have exactly the same graph.
The condition vertices are such that sometimes the addition of one such conditioned vertex is not compatible with the addition of another one. Also alternatively, there can be a specific order that they need to be included in to satisfy inclusion criteria.
It’s not certain that at the time one of the four of the voters comes up with a suggested conditioned vertex to add to the graph, that neither of the other three of them has not unbeknownst to the first one, ALSO come up with a suggested conditioned vertex to add to the graph, and this produces a consensus problem, namely:
How to asynchronously, trustlessly qualify conditioned vertex contributions so that the four of the voters will reach ONE SINGLE consensus of exactly which vertices to add right now, leading all of the voters to remain with ONE common shared equal version of the consensus graph.
A consensus algorithm like Parsec is needed to solve this, also Parsec’s absence of leader appointment as well as absence of dependency on wall clock time should be very useful here.
Would you agree that Parsec is suited to solve this above described problem?
Also, is Parsec good at voting for an order (that satisfies the dependency order - alternatively just come to consensus of one vertex at a time and this way through adding one “DAG layer” at a time the graph extension work with dependencies honored will be performed over more rounds)?
Please let me know your comments for understanding how to map my problem onto Parsec, also do you think the Rust implementation should be a useful for solving this problem.
Watching the PARSEC Graphs: Visualising ABFT Consensus - YouTube video, I see an example of Parsec used to vote on, and in that case all four voters voted for th 9kKpZ option - the vote is illustrated in the turqouise box, and then the red boxes show this same vote in {}:s.
Is this to illustrate that there is a voting for a SET of options - you could call that a “block” - that is being qualified?
When watching Parsec’s workings for instance at PARSEC Graphs: Visualising ABFT Consensus - YouTube and when reading the whitepaper, I remain unclear about the role of
- “Estimate” aka est
- “bin_values” aka bin
- “AUX” aka aux
- “Decided value” aka dec
- “Block”
in the voting process.
Would you mind MOTIVATING WHY you introduced these four, and in layman terms describing their function/role?
There is a claim that Parsec has “optimal complexity”, what do you mean by this.
IF Parsec would break down, for instance due to too many failing nodes, how does the breakdown look like, e.g. how can the consensus outcome be tricked in case of for instance 2 failing voters in a 5 node configuration.
To sum up, after having read all your documentation I don’t see clearly how Parsec maps to my consensus problem, and I hope I can ask you directly here for me to be able to comperhent and visualize the problem.
Thanks!
Guy