You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
MECHANISM_DESIGN.md S5 penalty doesn't match code (entire stake + blacklist vs MIN_STAKE + jail) #274
MECHANISM_DESIGN.md says an S5 escalation slashes the entire slashable stake and blacklists the validator. The code slashes MIN_STAKE and jails for s5JailDuration. This was recorded but left unresolved in PR #236. We need to decide which is intended, then update either the doc or the code to match.
Decision: keep the code's behaviour for S5. Repeated liveness failures slash MIN_STAKE and jail for s5JailDuration; no permanent blacklist.
Reasoning: S5 is unreliability, not provable malice. The full slash plus blacklist stays reserved for provable malice (S4). Given the correlated-outage case on #155 (one outage can trigger S5 on a multi-model validator), an irreversible ban would be disproportionate.
For mainnet, we may revisit an escalation path: repeated S5 escalations after jail could lead to a full slash and blacklist.
@umermjd11 could you update MECHANISM_DESIGN.md (the S5 row and the "Full slash" definition) to match the code, and close this issue with that PR?
@abrahamnash Done in #286, which updates Developer/design/MECHANISM_DESIGN.md to match the code:
S5 row: the tier now reads "Escalated: MIN_STAKE + jail (no blacklist)".
Full slash: now reserved for provable malice (S4) only.
New "S5 escalation" entry: covers the MIN_STAKE slash, the s5JailDuration jail and the reactivate() exit. It also records your decision and reasoning, plus the possible mainnet escalation path.
I checked it against DinValidatorStake.slashPartial on develop. The other docs already describe this correctly. #286 includes Closes #274, so this issue closes when the PR is merged.
Closed as completed by PR No. 286, verified on develop.
The PR merged through the merge queue as 07e5bd79 on 2026-11-02, and its Closes keyword closed this issue at 15:47:58 UTC. Robbert verified the PR and Santiago approved and queued it (outcome comment).
Checked against the decision above (keep the code's behaviour) and both items requested:
Asked for
On develop (Developer/design/MECHANISM_DESIGN.md)
S5 row matches the code
Line 81: "Escalated: MIN_STAKE + jail (no blacklist)"
"Full slash" definition
Line 87: entire slashable stake + blacklist, "Reserved for provable malice (S4)"
Decision and reasoning recorded
Lines 88–90: new "S5 escalation" entry (MIN_STAKE slash, s5JailDuration jail with a 7-day default, reactivate() exit), the decision dated 2026-10-25, the reasoning, and the possible mainnet escalation path
The code matches the doc. DinValidatorStake.slashPartial applies _applySlash(validator, MIN_STAKE, "S5_RECIDIVISM") and then _jailInternal(validator, uint64(s5JailDuration), ...) (lines 369–370). s5JailDuration defaults to 7 days (line 239). Blacklisting is only the owner's separate blacklistValidator (line 471).
Leftover (outside this issue's scope, not reopening): two task specs still describe the old escalation:
Developer/tasks/task_100926_13.md, lines 38 and 82: "escalation to full slash".
Developer/tasks/task_240926_17.md, line 58: "S5 escalation to full slash + jail".
Only the specs' wording is stale. PR No. 218 (task_240926_17 Part 2) already describes and tests S5 as a MIN_STAKE slash + jail with no blacklist (adversarial-threat-model.md Row 3). The task wording can be corrected when those tasks are next touched.
Activity
abrahamnash commentedon Oct 25, 2026
Decision: keep the code's behaviour for S5. Repeated liveness failures slash MIN_STAKE and jail for s5JailDuration; no permanent blacklist.
Reasoning: S5 is unreliability, not provable malice. The full slash plus blacklist stays reserved for provable malice (S4). Given the correlated-outage case on #155 (one outage can trigger S5 on a multi-model validator), an irreversible ban would be disproportionate.
For mainnet, we may revisit an escalation path: repeated S5 escalations after jail could lead to a full slash and blacklist.
@umermjd11 could you update MECHANISM_DESIGN.md (the S5 row and the "Full slash" definition) to match the code, and close this issue with that PR?
umermjd11 commentedon Oct 26, 2026
@abrahamnash Done in #286, which updates
Developer/design/MECHANISM_DESIGN.mdto match the code:MIN_STAKE+ jail (no blacklist)".MIN_STAKEslash, thes5JailDurationjail and thereactivate()exit. It also records your decision and reasoning, plus the possible mainnet escalation path.I checked it against
DinValidatorStake.slashPartialondevelop. The other docs already describe this correctly. #286 includesCloses #274, so this issue closes when the PR is merged.docs(MECHANISM_DESIGN): S5 escalation is MIN_STAKE + jail, not full s…
umeradl commentedon Nov 2, 2026
Closed as completed by PR No. 286, verified on
develop.The PR merged through the merge queue as
07e5bd79on 2026-11-02, and itsCloseskeyword closed this issue at 15:47:58 UTC. Robbert verified the PR and Santiago approved and queued it (outcome comment).Checked against the decision above (keep the code's behaviour) and both items requested:
develop(Developer/design/MECHANISM_DESIGN.md)MIN_STAKE+ jail (no blacklist)"MIN_STAKEslash,s5JailDurationjail with a 7-day default,reactivate()exit), the decision dated 2026-10-25, the reasoning, and the possible mainnet escalation pathThe code matches the doc.
DinValidatorStake.slashPartialapplies_applySlash(validator, MIN_STAKE, "S5_RECIDIVISM")and then_jailInternal(validator, uint64(s5JailDuration), ...)(lines 369–370).s5JailDurationdefaults to7 days(line 239). Blacklisting is only the owner's separateblacklistValidator(line 471).Leftover (outside this issue's scope, not reopening): two task specs still describe the old escalation:
Developer/tasks/task_100926_13.md, lines 38 and 82: "escalation to full slash".Developer/tasks/task_240926_17.md, line 58: "S5 escalation to full slash + jail".Only the specs' wording is stale. PR No. 218 (task_240926_17 Part 2) already describes and tests S5 as a
MIN_STAKEslash + jail with no blacklist (adversarial-threat-model.mdRow 3). The task wording can be corrected when those tasks are next touched.