SlashingManager
TheSlashingManager contract (Solidity name NotareumSlashingManager) applies economic penalties to validators who misbehave. It is the single contract authorized to reduce a validator’s stake in ValidatorStaking outside of normal cooldown withdrawal. Slashing is triggered by VerificationEngine on successful disputes, by the dispute judge on manual findings, or by automated monitors for downtime.
Slash reasons
Rate schedule by tier and reason
Rates are expressed as basis points of the validator’s bonded stake. Maximum rates are governance-adjustable up to the per-tier ceiling.
The aggregate slash applied in any 24-hour window is bounded by the tier’s
maxSlashRate (Basic 10%, Professional 15%, Enterprise 20%, Institutional 25%) except for terminal categories (Collusion, Double signing at Enterprise+).
Destination split
Slashed funds are routed deterministically by reason:
“Disputer” is the address that opened the successful dispute (for adversarial reasons) or
0x0 for automated reasons (then the share folds into treasury).
Functions
slash
VerificationEngine (for dispute outcomes) or by the SLASHER role (held by the dispute judge or an approved watchdog). Pulls the computed amount out of ValidatorStaking via applySlash, splits it per the destination table, and distributes.
Reverts if:
- Reason/tier ceiling would be exceeded.
- Validator has insufficient bonded stake for the base amount (partial slash applied instead: the contract slashes what is available).
- Caller is not authorized for the reason.
Slashed(validator, reason, amountSlashed, evidenceHash, disputer).
reportDowntime
validator has missed attestations across k consecutive epochs (default k = 4 weeks) and triggers a downtime slash if so. This provides a liveness incentive without requiring a manual dispute.
Governance setters
PROTOCOL_ADMIN role, held by a 14-day timelock.
Views
Interaction with ValidatorStaking
SlashingManager is the only caller that ValidatorStaking.applySlash accepts (enforced via AccessManager). The call signature:
applySlash deducts up to amount from bonded stake first, then (if insufficient) from pendingUnstake. It returns the amount actually slashed. SlashingManager uses the returned value as the basis for destination splitting, so under-collateralized validators slash to less than the full intended amount.
Flow on successful dispute
Freeze
A validator who is slashed for Collusion or Double signing is frozen:ValidatorStaking.isActive(validator) returns false for the governance-set freeze window (default 30 days). During the freeze, the validator cannot submit attestations even if their remaining stake is above the Basic minimum. The freeze is applied via ValidatorStaking.setFreeze, which SlashingManager has permission to call.
Events
SDK usage
Consumers rarely call SlashingManager directly; the SDK provides read helpers and dispute-flow convenience wrappers.Invariants
- The sum of destination splits for each reason equals 10000 bps.
- The total slashed amount in any 24-hour window for a validator does not exceed
tierCeiling(tier)unless the reason is terminal (Collusion, Enterprise+ Double signing). SlashingManageris the sole caller accepted byValidatorStaking.applySlash.- Every slash event is accompanied by an
evidenceHashwhose preimage is publicly accessible for adversarial transparency.

