Detail of the consensus protocol

In the consensus protocol of Algorand, each party gets to send a K number of messages, where K is his power depending on the stake.

Is it mandatory for the correctness of the protocol that these K messages all correspond to the same vote. As in, can a malicious party send t votes for 0 and K-t votes for 1? Or is it the case that if parties send conflicting messages in a step, then the messages are ignored?

Since the source-code isn’t public yet, I can’t be 100% sure about the implementation; but I guess every public key sends a single message which has a voting-power that could be verified by checking the sortition algorithm for that key.

I’d imagine that the protocol wouldn’t send one message per voting power, wouldn’t make much sense from an efficiency point of view. What could happen, is that a key sends multiple messages (each with the same voting power) voting for different values… that’s not a problem under the assumptions of byzantine thresholds.

Anyway, from a logical point of view I think the implementation wouldn’t matter. If the malicious party want to split the voting power in different votes, it could shard his stake in a lot of addresses and choose to vote with each one to whatever he wants.

Splitting stake or not doing it doesn’t change the voting power of the real owner (due to how the cryptographic sortition is done).

Thanks for the response @ihagopian. I’m curious to know why a key sending multiple messages voting for different values will not affect the protocol. Is there any literature that supports this?

I understand only a malicious node will choose to do that, and we can assume all honest nodes will participate correctly.

Sure, a party can of course create keys and send different messages, but I am specifically interested if for the same key, what can a malicious node do, and why it is not a problem that it can send conflicting messages.


The insight for answering your question is how many votes an honest node would want to see before being sure that the majority of honest node agree on it.

Example: imagine there’re 100 honest and 1 malicious. If you’re an honest node and see that there’re 52 votes for the same value, you can be sure that most of honest nodes agree on it. This holds even if the malicious node sent different values to different honest users.

The border case is that 51 honest nodes agree on a value and 49 don’t. In this case the malicious node has the ‘power’ to allow some honest node to commit to the majority value, but others still aren’t sure enough. But what matters is that honest nodes are making safe decisions (safe, under the ‘safety’ definition of consensus).

thank you. I’ve thought about the same thing.:blush:

Hey ihagopian. when malicious node send conflicting messages, that means they vote different values of different blocks, it can build focks. The consensus protocol can form a temporary consensus and this fork would diminish automatically in the Weak synchronization hypothesis. More specific details can see the document-" Algorand: Scaling Byzantine Agreementsfor Cryptocurrencies" 8.2