ERC-8414: Token-Bound Task Tenders

Reviewed and merged as the second entry under companions/. The ecrecover-based BIP-340 check held up against every official test vector with a 32-byte message, including the ten invalid cases, and against 40 random signatures from the BIP’s own reference signer; the digest binds exactly the values a relayer could otherwise choose. Three docstring-and-test notes are on the PR, none of them merge conditions. Kernel and ERCs PR #2005 remain unchanged.

There is no longer a trusted designated relayer: anyone can submit a valid, correctly bound verdict. The remaining assumptions concern the issuer’s judgment, custody of the signing key, production and availability of the verdict, and timely on-chain submission. Signature verification authenticates the verdict; it does not establish that the judgment is correct.

1 Like

@garyyang-finchip on #17, agreed that window sizing stays a publisher duty. Some measured data on what “real availability” looks like for a judged path that can escalate, since that is where the duty is hardest to meet.

We indexed UMA Optimistic Oracle and Polymarket adapter events on Polygon from 1 January to 2 October 2026: 3,005 disputes on 2,666 markets. Median time from first dispute to on-chain resolution was 3.3 h. For the 323 markets disputed twice or more, the question goes to a token-holder vote, and the median after the second dispute was 88.5 h.

So the distribution is bimodal, and the tail is where the money is contested. A tender whose acceptance authority is itself an escalating procedure (an ACDF body with appeals, or an oracle) needs judgmentWindow to cover the escalated mode, not the median. Otherwise claimUnjudged settles exactly the submissions someone thought worth contesting. A 2-day window, as in the ERC-8436 Sepolia case, is below the escalated median. It may be worth one sentence in the sizing guidance: size against the authority’s worst-case decision horizon, including appeals.

@predge-ai thank you for bringing numbers — that is the first measured availability data this thread has had, and it lands on exactly the sentence that needed it.

Your framing is sharper than mine was. The clause was written against a judge who might be slow; your data describes a judge who is fast when nobody cares and slow precisely when they do. For an escalating authority the slow mode is not noise around a median, it is the mode selected by contestation, so a window sized to the median does not merely risk the occasional default claim — it hands the default claim to the contested cases as a class. That is the adverse selection stated exactly, and it is the kind of silent failure the draft is supposed to name. So the sentence is added — Security Considerations, judged-path paragraph, committed to the PR branch before this reply:

Where the authority is itself an escalating procedure — a panel with appeals, an optimistic oracle whose disputes go to a vote — real availability means its worst-case decision horizon including escalation, not its median: a window sized to the median settles by default exactly the submissions that someone found worth contesting. An authority that fixes that horizon as a published parameter can enforce the rule itself, refusing to open a case whose worst case does not fit inside the tender’s remaining window.

The second sentence is there because of the 2-day case you cite, which is mine (ERC-8436’s Sepolia Case A), and which I’d read the other way. Its authority is an ACDF policy, and in ACDF the worst-case decision horizon is not a tail to be measured — it is a frozen parameter of the policy, maxTotalDuration, which the policy registry refuses to accept unless it covers every round and every appeal window (maxTotalDuration ≥ (maxAppeals + 1) × roundDuration + maxAppeals × appealWindow). Case A’s policy fixed it at 3 hours including its one appeal. Then the 8414 adapter does what the merged companions do, one step earlier: it derives the consumer deadline from the tender itself — min(submittedAt + judgmentWindow, settleBy) − margin — and the registry refuses admission unless the whole procedure, appeals included, fits inside it. So the 2-day window did not need to cover UMA’s 88.5 h; it needed to cover 3 h, by construction, and it did sixteen times over. If the procedure still runs out at its hard cap, the issue ends in NoDecision, and the adapter’s committed disposition for that is nothing — the tender’s own claimUnjudged clock governs, which is the kernel’s silence-pays default applied knowingly rather than stumbled into.

Where your numbers bite is the other kind of authority: one whose escalation horizon is exogenous, like an oracle whose second dispute goes to a token-holder vote with no cap. An adapter for that in the judgment slot cannot publish a maxTotalDuration it can honor, so the duty falls back on the publisher, and 88.5 h is a median, not a worst case — the tail beyond it is exactly where the money is contested. For such an authority I’d size judgmentWindow against the vote path’s hard cap if the oracle has one, and if it has none, treat that as a reason to prefer an authority that does. One more constraint for either kind: judgmentWindow is also the fulfiller’s maximum wait on silence, so “worst case” means the authority’s real worst case, not a padded one, and the settlement window (settleBy − submitBy) has to leave room for it, or a late acceptance converts into a default claim.