How are forks resolved?

I understand forks can only be generated by an account owner who owns the key to sign transactions, but I'm curious about the technical details of how they are resolved. In general terms the original whitepaper discusses how each representative node will vote on the block that it sees first and once quorum is reached on one of the forks it will be the block confirmed and stored in the ledger. But with PoW priority and active transactions how is this handled, is it any different?

For example, someone sends one block at 1x PoW multiplier, and then creates a fork at 5x PoW multiplier. If the nodes are saturated and PoW is being prioritized would that impact which block nodes vote on or would they store whichever block they see first and only that one would enter the active transactions queue on that node?

2 Likes

Every node holds only an unforked chain of confirmed blocks per address.

Every node makes its own decision on when to mark a block as confirmed, and once done, never reverses that decision. On an unmodified node, that's, by default, when it sees 50% of online votes in a block's favour, with a minimum threshold of 60m votes of a possible 133m.

On behalf of Zach I'll post my summaries of our discussion on forks and consensus on discord:

I'll define some variables before

CONSENSUS: The number of votes required for consensus. it's max(online_voting_weight * quorum_percent, minimum_online_voting_weight)

The consensus is always gonna be reached when (votes_leading_candidate - votes_second_place_candidate) > CONSENSUS

Nodes initially vote for the first branch of the fork they see, but they keep tally of all the votes for all competing blocks (in order to compare votes as required by the equation above).

If consensus is not yet reached, the node also tests if the sum of ALL votes is more than minimum_online_voting_weight. If this condition is satisfied, the nodes change their vote to the leading candidate. This is called "bandwagon voting" and can be expressed as this:

"If everyone voted towards a single candidate we would have reached consensus by now, so let's all change our votes to the currently leading candidate"

IMPORTANT: I don't see a reason why for bandwagon voting the criteria is only minimum_online_voting_weight, instead of CONSENSUS. Seems like an oversight to me.

Now, onto Srayman question on how PoW affects that. I honestly don't know.

3 Likes