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.
The round lifecycle
Section titled “The round lifecycle”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]
The audit draw
Section titled “The audit draw”audit_block = the first Sepolia block with timestamp ≥ round_deadlineaudit_draw = u16be(keccak256("necter-audit-v1" ‖ round_id_hash ‖ audit_block.hash)[0..2]) mod 10000audit = 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.
The finality record
Section titled “The finality record”{ "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.
Watching it live
Section titled “Watching it live”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": "…"}What else validators do
Section titled “What else validators do”- 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.