Hi! I’m a developer from Argentina, currently working on a simulator for the Algorand protocol. I have some questions about the underlying consensus mechanism.
1-I read in the 2017 SOSP paper that in the BinaryBA* step there’s a “common coin” solution, implemented to prevent a very specific kind of attack scenario.
However, I have not seen anything referring to this in the specs nor in the node go code. Is it not a thing anymore?
2-Suppose that a node observes a proposal, soft votes and certifies it, but it has for some reason not received the full block up to that point (only the block hash).
What happens then? What if the rest of nodes in the network have received it, voted to certify and commited it. How does this node manage to catch up?
3-In the proposal step (s=0), what is the exact value used to select a proposal over others? I’ve seen some contradicting information with regards to this.
Is it the VRF hash of the proposer, the hash of the block, or is it Min{H(ProposerVRF || 0…j)} (where j is the result of sortition for that account and H is
a cryptographic hash function -supposedly SHA512/256 according to specs-) as is described in the SOSP paper?
4-What specifically happens on the redo and down steps?. From what I understand, redo is a last attempt at certifying a given block, while down is an attempt at certifying an
empty block. Is that correct? If so, what happens if there is no quorum on a down step?
That would be all for now. I’m having a great time implementing a version of the protocol! I hope the sim I finally come up with turns out to be useful for the community as a whole ![]()
Thanks for your attention!
