In every epoch, there comes a time when the sheep must be separated from the goats, the wheat from the chaff, and the apples from the oranges. In other words: to determine which ATXs were created by honest users in good faith, and which were generated by a malicious adversary bent on evil.
Sadly, this task is beyond mere Spacemesh nodes. But we can do almost as well, by introducing some shades of gray into our decisions.
Protocol Rules
ATX Grades
We grade ATXs on a scale of 0 to 2, based on when the ATXs were received (where 0 is definitely evil, and 2 is “as good as we can get”). Let s be the start of the epoch.
- Grade 2. The ATX was received at time t<s-4\delta, and no equivocation proof was received for that id until time s.
- Grade 1. The ATX was received at time t<s-3\delta before the start of the epoch, and no equivocation proof was received by time s-\delta.
- Grade 0. The ATX was received at time t\ge s-3\delta, or an equivocation proof was received by time s-\delta.
First-Ballot Generation
When choosing ATXs to include in their active set, parties will only include ATXs with grade 2.
Proposal voting
Parties will only vote for a proposal whose corresponding active set has grades 1 or 2.
Intuition
The idea behind the grading scheme is that it satisfies the following invariants:
-
If any honest party gave an ATX grade 2, then every honest party will give it grade at least 1. The reason is that if party A received the ATX at time t_A < s-4\delta, then party B will have received it by time t_B\le t_A+\delta < s-3\delta. On the other hand, since A did not receive an equivocation proof by time s, B cannot have received an equivocation proof by time s-\delta.
-
If any honest party gave an ATX grade \ge 1, then every honest party will have received this ATX before receiving an equivocation proof for this ID. This is because if A received the ATX at time t_A<s-3\delta, and did not receive an equivocation by time s-\delta, then B must have received it at time t_B<t_A+\delta < s-2\delta, and could not have received an equivocation proof by time s-2\delta.
Since an honest party only includes grade-2 ATXs in their active set, then every honest party will vote for this proposal (since the ATXs are guaranteed to have grade 1 or 2 by invariant (1) ). By Hare validity, this means every honest proposal will be included in the final accepted set of proposals.
On the other hand, if a proposal has an ATX with an equivocating id, such that at least one honest party did not receive this ATX (because it received an equivocation proof first), then no honest party will vote for this proposal — since by invariant (2), it can’t have grade \ge 1 for any honest party. By Hare validity, this means such a proposal will never be in the final accepted set of proposals. Thus, every ATX in the active set is known to all honest parties.