Skip to content

Validators, finality and audits

Committee votes are not final by themselves. Validators check every round and sign a finality record; only finalized rounds earn rewards.

flowchart TD
  A[Task created: slot + committee drawn] --> B[Members accept, lease, execute, vote]
  B --> C{All leased members voted<br/>or round deadline passed}
  C --> D[Hub sends one bundle to every validator:<br/>task, input, votes, audit block]
  D --> E[Each validator verifies votes,<br/>detects equivocation]
  E --> F{audit = contested OR<br/>audit_draw < audit_bp}
  F -- yes --> G[Validator re-executes the task itself]
  F -- no --> H[R = the committee's hash]
  G --> I[R = validator's own result]
  H --> J[Sign finality record: R, gas_used, voters who matched R]
  I --> J
  J --> K{SecureWeave: 2/3+1 validators<br/>signed the same record?}
  K -- yes --> L[Finalized: outcome sent to members]
  K -- "no, by deadline + 300 s" --> M[Escalated: run as a validator round<br/>so the client still gets an output]
audit_block = the first Sepolia block with timestamp ≥ round_deadline
audit_draw = u16be(keccak256("necter-audit-v1" ‖ round_id_hash ‖ audit_block.hash)[0..2]) mod 10000
audit = contested OR audit_draw < audit_bp (audit_bp = 1000 → 10 % on the testnet)

The audit block’s hash does not exist yet when miners vote, so nobody can predict which rounds will be re-executed. A committee that colludes on a wrong answer is caught on a random 10 % of rounds and on every round where anyone disagreed, and its members lose collateral and reputation.

{ "v": 1, "round_id": "task:0x…", "project_id": "0x…", "epoch": 497631, "set_hash": "0x…",
"receipt_hash": "R", "gas_used": 88633, "audited": false,
"voters": [ { "public_key": "0x…", "payout_address": "0x…" } ] }

voters lists only the members whose vote matched R. When an audit shows the committee was wrong, voters can be short or empty, and the signed record plus the wrong votes are self-proving evidence for slashing. A round is final when floor(2n/3)+1 distinct current validators signed the same record. These finality votes are gossiped and counted by SecureWeave, NDSR’s consensus layer.

Terminal window
curl -s "https://testnet-rpc.necter.network/v1/projects/0x84588f60bd2190a6c7929d655010de448e15d22d61ec8021b29ef2c56a553743/rounds?limit=2"
{
"items": [
{ "round_id": "task:0x3f65eeaf…89cc0", "kind": "task", "epoch": 497631, "seq": 42,
"function": "work", "committee_size": 3, "votes": 3, "agreeing": 3, "audited": false,
"state": "finalized", "gas_used": 88633, "receipt_hash": "0x74eed4bc…2c2c",
"created_at": 1791474173, "finalized_at": 1791474244 }
],
"next_cursor": "…"
}
  • Execute direct calls (/v1/execute) and keep module state, with state sync. State
  • Attest miner-set snapshots. Committees
  • Propose and attest per-project reward receipts. Rewards
  • Record slashing evidence (equivocation, audit-proven invalid results). Slashing

Running one: Run a validator.