Now posted separate questions for clarification about the ABA paper here ABA paper unclarity and queries, discussion, please help clarify , kindly have a look when you have time.
I reviewed the whole Parsec codebase now, line by line and following code paths.
It’s nice to see logics relating to the ESTablished -> AUX -> DECided_values mess in https://github.com/maidsafe/parsec/blob/master/src/meta_voting/meta_vote_values.rs .
I think I can summarize the biggest unclarity like this:
After 50 hours of intense study of about two re-reads of each of Parsec paper, documents, video and reference implementation, it’s still perfectly unclear to me WHAT you vote about in Parsec, and HOW the EST->AUX->DEC+coinflip flow helps that consensus vote
If you could help clarify this would be much appreciated. You suggested already that this is mere “unclarity about terms” that I solve by simply looking them up in the RFC, but I assure you it is not so.
I have not been able to apprehend the scope.
I want byzantine consensus, but how does Parsec actually achieve it.
https://github.com/maidsafe/rfcs/blob/master/text/0049-parsec/gossip_graph.dot.svg is a great case in point as the unclarity is already in place around a_0/a_1/b_0/b_1/c_0/c_1/d_0/d_1:
Firstly how do you represent multiple votes in parsec
The point being, if Alice, Bob, Carol and David are voting about seven different options of grocery shopping lists, then how should this be introduced to the algorithm, so that it eventually gets into the ESTimate value and so on.
The paper and reference implementation hardwiredly discuss the usecase of join/part Network Events, however that is only one very specific application of Parsec, is it not.
Kindly explain to me using how many Gossip Events you would introduce A-Ds preferences about shopping lists 1-7, each of A-D may vote for any number of the seven shopping lists?
Secondly what sense does EST->AUX->DEC+coin make
So now A, B, C and D have voted for which grocery options they’d like to have bought.
So let’s get into the algorithm, here illustrated by the paper figure 3:
All that is unclear relative to my pictured usecase, so let’s kind of start from the beginning at the figure’s bottom:
I understand that the nodes will gossip something to each other. I’m not sure what. I see in the reference code that they send
Firstly the “initial event”, https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/src/parsec.rs#L166 , which only basically bootstraps a peer’s participation in the DAG (https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/src/gossip/event.rs#L172)??
And secondly the “Genesis Observation” https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/src/parsec.rs#L170 , here the observation really means cause doesn’t it, meaning what kind of Gossip Event… er. Anyhow, the peer shares which peers IT thinks it has, at start. Why does it share this?
If I understand the Parsec class right, the next step now is that all the peers are supposed to run vote_for() to shar their grocery list options, that code is here https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/src/parsec.rs#L284 .
Can you please illustrate how A’s, B’s, C’s and D’s .vote_for() calls should look?
(The only example that exists currently for Parsec makes one single .vote_for() call which is totally undidactic, it’s here https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/examples/basic.rs#L157 , I don’t see at all how to understand that line especially when not understanding anything else about Parsec’s scope or context in the first place.)
Next, according to the user’s random timer which should have which interval, the user is supposed to run Parsec’s .create_gossip() (https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/src/parsec.rs#L316) which is the driver of the consensus process. At respective node’s reception of Request and Response call, the .handle_request() and .handle_response() should be run.
And then user is supposed to run .poll() to pick up any consensus results, and these are obtained as a vector of “blocks”.
This begs the question, what is a block actually?
The RFC kind of mentions them sweepingly, and mentions there are non-finalized and finalized blocks.
Also, how do votes and blocks correlate with the seven grocery list voting options in the first place.
Somewhere under the hood, the EST->AUX->DEC juggling is going on, this file https://github.com/maidsafe/parsec/blob/master/src/meta_voting/meta_vote_values.rs#L205 is involved.
What is the code path actually?
How does the Parsec class interface the MetaElection class? I see Parsec.process_event invoke MetaElection.new_election() at https://github.com/maidsafe/parsec/blob/b1bfdb790f8010cfec1151a4ff7236d0b6b7de74/src/parsec.rs#L779 , is this the place where Parsec asks consensus to do its job??
The same call (new_election) IS USED to remove already-consensused decisions, via the payload_keys argument.
Then a contextual question: What is the DKG = Decentralized Key Generation about, is this a Safenet-specific feature inlined in the Parsec code used to generate Safenet keys, or does DKG actually have something to do with Parsec?
If I understand Parsec right then, the grocery list options should sooomehow be translated into sooome kind of Gossip Events, if it’s one per grocery list option peer choice or not I’m not sure of. Anyhow, that-something-thing will be gossiped, and as one node gets a supermajority of votes it will gossip its conclusions to all the others, and when a node has received a supermajority of other nodes’ conclusions, at that point unless you’re in a 50-50 vote, you will start reaching decided values. Is this a correct zoomed-out understanding of Parsec?
The documentiaton and all materials are so exceptionally unclear on this overall purpose level that I need your reassurance.
The subsequent question would be, “now that this is how it is then how is the EST juggling and the AUX value helping, and is there any meaningful documentation about their motivation and workings in any paper, slides or implementation anywhere?”
The whole Blockchain-Consensus phenomenon is still in its early infancy, I am very grateful to you all who participate in this and also while I’ve whined for pages now I acknowledge that your work is better than others’. I hope you can take the time to clarify, please step out of your PhD suit for a second and speak commonsense.