Skip to main content

Dispute Resolution

Any party with evidence of validator misconduct can report a dispute. Disputes are resolved by an arbitration committee that reviews submitted evidence and renders one of three verdicts: guilty, innocent, or dismissed. Guilty verdicts slash the validator and reward the reporter. Innocent verdicts burn the reporter’s bond. Dismissal returns the bond without penalty. This page documents bond amounts, the lifecycle, and the outcomes.

The three outcomes

Reporting a dispute

Rules:
  • validator MUST be an active validator (stakedAmount >= 10,000 NOTA).
  • evidence MUST NOT be empty. It is hashed on-chain (keccak256(evidence)); raw bytes are not stored.
  • The reporter posts a tier-dependent bond in NOTA.
Bond amounts are determined by the accused validator’s current tier: Mapping from tier to dispute level:
  • INSTITUTIONAL or ENTERPRISE tier validator: dispute level is INSTITUTIONAL (25K NOTA bond).
  • PROFESSIONAL tier validator: dispute level is ENHANCED (5K NOTA bond).
  • BASIC tier validator: dispute level is BASIC (1K NOTA bond).

Evidence handling

Evidence is hashed on-chain but stored off-chain. The on-chain evidenceHash provides tamper-evidence; the raw bytes are not part of the contract state. Implementations SHOULD use decentralized storage like IPFS for evidence and submit the CID as the evidence payload, enabling any party to retrieve and verify the evidence independently.

Dispute resolution

Restricted to ROLE_SLASHING_ARBITRATOR. The arbitration committee reviews evidence off-chain and renders a verdict.

Guilty verdict

  1. The validator’s current tier determines slash rate.
  2. slashedAmount = (stakedAmount * slashBps) / 10000.
  3. Tokens are transferred from NotareumValidatorStaking to NotareumSlashingManager.
  4. Slashed tokens are forwarded to burnAddress.
  5. reporterReward = (slashedAmount * 1000) / 10000 (10%).
  6. Reporter receives bondAmount + reporterReward.

Innocent verdict

  1. Reporter’s bond is transferred to burnAddress as anti-spam.
  2. Validator’s stake is unaffected.

Dismissal

Authorized dismissal returns the bond without penalty. Used when a dispute is filed in error (wrong validator, wrong resource, insufficient evidence).

Dispute struct

Dispute lifecycle

Disputes only transition from OPEN. Once resolved or dismissed, they are final.

Example: reporter math

A BASIC tier validator with 10,000 NOTA staked gets caught falsely attesting. The reporter posts 1,000 NOTA bond. The arbitration committee rules guilty.
  • Slash: 25% of 10,000 = 2,500 NOTA burned
  • Reporter reward: 10% of 2,500 = 250 NOTA
  • Reporter receives: 1,000 (bond) + 250 (reward) = 1,250 NOTA
  • Validator loses: 2,500 NOTA from stake
An ENTERPRISE validator with 250,000 NOTA gets caught in a coordinated collusion.
  • Slash: 50% of 250,000 = 125,000 NOTA burned
  • Reporter posted: 25,000 NOTA bond
  • Reporter reward: 10% of 125,000 = 12,500 NOTA
  • Reporter receives: 25,000 + 12,500 = 37,500 NOTA

Why innocent verdicts burn bonds

Anti-spam. If bonds were returned on innocent verdicts, frivolous dispute spam would be free and the arbitration committee would drown in noise. Burning the bond imposes a real cost on bad-faith reports while preserving ample reward for good-faith whistleblowers.

Arbitration committee

In v1.0, arbitration is centralized to ROLE_SLASHING_ARBITRATOR. This role SHOULD be held by a multisig with a minimum 3-of-5 threshold. The committee is a bootstrapping compromise on the path to fully decentralized on-chain arbitration via governance voting in later protocol versions.

Example code

Reporter (TypeScript):
Arbitrator: