protocol · claim to precedent · live on Somnia Shannon

How a verdict is reached.

A consumer contract opens a case with evidence and a panel fee. The court convenes a panel of Somnia validator LLM agents that each run the same inference and must converge byte-identically. The verdict comes back through onVerdict(), the consumer settles by pull-payment, and the ruling is filed as precedent — no human in the loop.

7 on-chain steps, claim to precedent 5/5 byte-identical at the gate 0 humans in the settlement loop
5 validators on the default trial panel
100% byte-identical at the determinism gate
6 verdict labels, incl. graded splits
0.4 STT to open a case (quoteOpen)
the case lifecycle · seven on-chain steps

From an open case to recorded precedent.

Every step below runs on-chain on Somnia Shannon. The contract convenes the panel itself — there is no admin, no UI, and no human in the settlement path.

01open

The consumer opens a case

A consumer contract — an escrow, an insurance pool, or an agent-to-agent deal — calls into VerdiktCourt with the dispute: a question, the structured evidence each side has submitted, and the panel fee. Evidence is formatted deterministically via EvidenceLib so the prompt every validator sees is identical, and it is sanitized and fenced as untrusted so a party can't smuggle instructions into it. Opening a case quotes at quoteOpen = 0.4 STT — the cost of dispatching the default five-validator panel.

dispute + evidence + fee quoteOpen 0.4 STT
02convene

The court convenes a validator panel

The Court builds a fixed inferString request — a prompt with a fixed allowed-values set, so every juror can only answer with one of the legal labels — and dispatches a panel of Somnia validator LLM agents via createAdvancedRequest(agentId, cb, selector, payload, subcommitteeSize, threshold, ConsensusType.Majority, timeout). The contract does this itself: no operator, no wallet prompt. The trial panel is five validators by default, caller-selectable down to three when the validator set is thin.

createAdvancedRequest Majority consensus · panel 5
03infer

Each validator runs the same inference

Every validator in the subcommittee runs the identical LLM inference over the identical prompt, independently. The allowed-values set constrains each output to a single canonical label — no free-form text to drift on — and each juror's chain-of-thought is captured in an off-chain receipt, retrievable per node at agents.somnia.network/receipts/<id>, so the reasoning behind every vote is auditable.

inferString · fixed allowedValues per-juror receipt
04consensus

Byte-identical majority consensus

Because the label set is fixed, the validators' outputs are directly comparable, and the platform takes a Majority consensus over them. In practice the panels converge byte-identically — every juror returning the same label — which is the property the determinism gate proved live (PAYEE 5/5). Consensus here is unanimous convergence on one label, not an averaged or split tally.

byte-identical 5/5 Majority, threshold = panel
05deliver

The verdict is delivered programmatically

The platform calls the Court's response handler with the consensus result and a receipt id; the Court decodes it and, after the appeal window, delivers the verdict back to the consumer via onVerdict(escrowRef, verdict). There is no off-chain relayer to trust — the verdict arrives as a contract call. The appeal window is short for the live demo (appealWindow = 60s); the deadline is snapshotted on the ruling so it can't be retro-changed.

onVerdict(escrowRef, verdict) appealWindow 60s (demo)
06settle

The consumer settles by pull-payment

On onVerdict the consumer credits the winning party in a pending[] ledger and the party calls withdraw() to collect. Pull-payment is deliberate: a reverting recipient can't brick finalization. A guard prevents settling the same deal twice, and graded splits pay out at the verdict's ratio — a live SPLIT75 credited the payee 0.0075 STT and the payer 0.0025 STT. Finalization is permissionless, so a keeper can drive it.

pull-payment · withdraw() no double-settle
07record

The ruling is filed as precedent

Once a case is final, anyone can record it into VerdiktRegistry — a permissionless, append-only index that reads court.getCase and stores the verdict plus receipt id, indexed by topic and consumer. The result is queryable, on-chain, AI-authored case law that the next dispute's evidence can cite as a prior. The party's win/loss/split record is also written to VerdiktReputation as a portable credential.

VerdiktRegistry · precedent VerdiktReputation
evidence handling

Two sides. One prompt. No smuggled instructions.

Each party submits its own structured statement, and the court treats all of it as hostile input until proven otherwise.

Deterministic formatting

Evidence is assembled by EvidenceLib into one canonical prompt — every validator sees byte-for-byte the same input.

Sanitized and fenced

Party statements are sanitized and fenced as untrusted, so a litigant can't smuggle instructions into the jury's prompt. A live red-team probe with an embedded "rule PAYEE" injection ruled against the injector, 5/5.

Attested facts outrank claims

Registered oracles post verified facts through the attestation registry, and the jury weighs them above untrusted party claims. In a live dispute, an attested delivery fact overrode a false refund claim.

the panel · determinism

An AI verdict only counts if validators converge.

Majority consensus is only meaningful if the jurors can actually agree on the exact same answer. If five validators returned five paraphrases of "the payee wins", there would be nothing to take consensus over. The entire design rests on one claim — that a validator subcommittee converges byte-identically on an LLM verdict — and it was the first thing proven live.

Adaptive panel size

Five validators by default, caller-selectable down to MIN_TRIAL_PANEL = 3 when the validator set is thin — a degraded 3-validator agent-to-agent case settled byte-identically (PAYER) live.

The model is pinned

Each case records the exact inference agent that judged it, and appeals re-run on the same model — verdicts are auditable against both law and judge.

Threshold equals the panel

The gate is run with threshold = panel size, so every validator's raw label is collected and compared — not just a quorum.

Proven, not asserted

The determinism gate fired a real five-validator panel on Shannon and it converged byte-identically.

determinism gate · live on shannon probe 0xDCF1…02bb · panel 5 · requestId 3486438
PAYEE
5/5
PAYER
0/5
SPLIT
0/5
PASS · panel converged byte-identically
verdict types · 6 labels

The labels a panel can return.

The Court runs a fixed allowed-values set so outputs stay byte-comparable. The graded set adds partial-fault buckets and an abstain label — both implemented, and validated live.

Payer

The payer wins — funds return to the party that put them in (a refund, or a grant clawed back to the DAO).

Payee

The payee wins — funds are released to the counterparty (the seller is paid, the freelancer is paid, the claim is covered).

Split

Partial fault, graded in coarse 25% buckets so the court can do justice rather than just pick a winner.

SPLIT25 SPLIT50 SPLIT75
Undecidable

On genuinely insufficient evidence the panel abstains and refunds the depositor, rather than guess. Validated live: clear cases stay decisive, contradictory ones abstain.

panels & appeals

The panel sizes to the case — and to the network.

A trial runs on five validators by default, the caller can request fewer when the validator set is thin, and the losing party can stake to escalate the case to a larger panel with new evidence.

Trial panel — 5 default
The default. Five validators each run the inference and converge byte-identically on the verdict.
Live
Resilient panel — 3 MIN_TRIAL_PANEL = 3
When the validator set dips below full strength, a dispute degrades gracefully to the validators present instead of reverting — a degraded 3-validator agent-to-agent case settled byte-identically (PAYER) live.
Live
Appeal panel — 9 stake-backed
The losing party can appeal by staking; the case escalates to a larger panel of nine and re-tries with new evidence — the honest design under deterministic inference, since re-running the same input would only reproduce the same answer. If the original verdict holds, the frivolous appeal's stake is slashed.
Unit-tested
the honest part

The 9-panel appeal can't run live on this testnet.

We'd rather say it plainly: Somnia's validator subcommittee effectively caps at about six on Shannon today, so a nine-validator appeal panel cannot be convened on the live testnet — requesting more validators than are available reverts. The staked-appeal and slashing path is fully implemented and unit-tested, but it runs live only on a larger validator set. It is exactly why the resilient panel exists, and why trial panels are kept at five or below.

prompt governance

The law is on-chain.

Versioned, append-only prompts The court's prompts are versioned, append-only state — the rules a panel judges by are themselves auditable contract data, not a server config.
A snapshot per case Every case snapshots the prompt version that decided it, and the appeal deadline is snapshotted on the ruling — neither can be retro-changed.
Judge on the record The model is pinned per case, so every ruling names both the law it applied and the inference agent that applied it.
settlement

Funds move only by pull.

Pull-payments Winners are credited in a pending[] ledger and call withdraw() — a reverting recipient can't brick finalization, and a guard prevents settling the same deal twice.
Graded payouts Splits pay at the verdict's ratio: a live SPLIT75 credited the payee 0.0075 STT and the payer 0.0025 STT.
Keeper auto-finalize Finalization is permissionless after the appealWindow (60s on the live demo), so a keeper can drive every case to settlement with no party's cooperation.
live on shannon · chain 50312

Not a diagram — deployed and exercised on-chain.

The premium stack runs model-pinned inference, two-sided evidence, adaptive panels, abstention, and the attestation registry. A real dispute settled where an attested delivery fact overrode a false claim; ServiceSLA proves how a reference integration uses the same court.

verdikt

See the lifecycle run, end to end.

Watch a real dispute get opened, judged by the panel, and settled on-chain — evidence, verdict, and pull-payment, no human in the loop.