The "PoSe Score Calculation" section of docs/core/guide/dash-features-proof-of-service.md states the per-failure score increase two different ways, and the two disagree.
Table:
| PoSe Parameter |
Value |
Example Value |
| PoSe Score Increases |
Maximum PoSe Score * 2/3 |
3333 |
Prose, immediately below the same table:
The current PoSe scoring algorithm increases the PoSe score by 66% of the maximum score for each failed DKG session.
Since 2/3 = 66.67%, these produce different numbers, and a reader has no way to tell which one to trust.
The implementation uses an integer percentage:
// src/evo/deterministicmns.cpp
int CDeterministicMNList::CalcPenalty(int percent) const {
assert(percent > 0);
return (CalcMaxPoSePenalty() * percent) / 100;
}
// src/evo/specialtxman.cpp — the only call site
mnList.PoSePunish(members[i]->proTxHash, mnList.CalcPenalty(66), debugLogs);
So the prose is correct and the table is not. For the table's own example of 5000 masternodes, the increase is 5000 * 66 / 100 = 3300, not 3333.
Scope, to be clear about how much this matters: I re-ran the worked example that follows the table under both formulas, and every Valid/PoSe-Banned outcome in it is unchanged. So this is a consistency problem rather than a wrong conclusion. It's still worth fixing because the page currently contradicts itself, and an operator working out how much recovery time they have left after a DKG failure has no way to know which figure applies.
Suggested fix: change the table row to Maximum PoSe Score * 66% with example value 3300. The score columns in the worked example below would shift slightly as a result, though as noted the outcomes stay the same.
Reported with assistance from Claude (Anthropic).
The "PoSe Score Calculation" section of
docs/core/guide/dash-features-proof-of-service.mdstates the per-failure score increase two different ways, and the two disagree.Table:
Prose, immediately below the same table:
Since
2/3 = 66.67%, these produce different numbers, and a reader has no way to tell which one to trust.The implementation uses an integer percentage:
So the prose is correct and the table is not. For the table's own example of 5000 masternodes, the increase is
5000 * 66 / 100 = 3300, not 3333.Scope, to be clear about how much this matters: I re-ran the worked example that follows the table under both formulas, and every Valid/PoSe-Banned outcome in it is unchanged. So this is a consistency problem rather than a wrong conclusion. It's still worth fixing because the page currently contradicts itself, and an operator working out how much recovery time they have left after a DKG failure has no way to know which figure applies.
Suggested fix: change the table row to
Maximum PoSe Score * 66%with example value3300. The score columns in the worked example below would shift slightly as a result, though as noted the outcomes stay the same.Reported with assistance from Claude (Anthropic).