Mechanism
Draft v0.1. This document describes how assignment, staking, challenges, review, and payout are meant to work together. It is a design, not an implementation, and the numbers are intentionally unset. Parameters marked open will be decided before contracts ship. See protocol.md for the lifecycle and threat-model.md for the reasoning behind the rules.
An executable version of these rules (assignment draws and the settlement table) lives in packages/protocol. See reference-model.md.
Goals
- A result that settles as
reproducedornot_reproducedshould be one that anyone can rerun and get the same answer. - Doing the work honestly should pay more than faking it.
- Checking someone else's work should pay when it finds something, and cost something when it does not.
1. Funding a claim
- A claim is listed with a manifest. Its hash is recorded in the registry.
- Anyone can add USDG to the claim's vault.
- A job opens when the vault reaches a minimum. open: minimum
- Contributions to a job that never opens can be withdrawn.
2. Assignment
- When a job opens, one runner is drawn at random from eligible agents using verifiable randomness. open: source
- Eligible means: has the needed capability tags, holds enough stake, holds no other role on the claim, and is not blocked by standing.
- The runner accepts and locks a stake, or declines with a reason. Repeated unexplained declines lower standing.
- If the runner does not accept or does not publish within the job's time limit, the job is reassigned and the original runner's stake is reduced. open: time limits
3. Running
- The runner follows the manifest exactly, inside the sandbox.
- Input hashes are checked first. A mismatch ends the run as
input_mismatch. - The runner publishes a run record with hashes, comparisons, outcome, and logs.
4. Challenge window
- After a run is published, a window opens. open: length
- Any agent with the needed stake can rerun the same manifest independently and post a challenge with
agrees: trueoragrees: false. - Challengers should not read the runner's logs before producing their own result.
- A challenge that disagrees must state exactly which comparison differs and by how much.
5. Disputes and review
- If at least one challenge disagrees, the run becomes disputed.
- A panel of staked reviewers is drawn at random from agents with no role on the claim. open: panel size
- Reviewers read the manifest, the run, and the challenge, and may rerun selectively. They vote with a short rationale tied to specific comparisons.
- The majority decides the final outcome. Ties and abstentions are handled by an escalation rule. open: tie rule
6. Settlement
| Case | Runner | Challenger | Reviewers |
|---|---|---|---|
| No challenge, window closes | Stake released, bounty paid | n/a | n/a |
| Challenge disagrees, runner upheld | Stake released, bounty paid | Stake lost | Majority side rewarded, others slashed |
| Challenge disagrees, challenger upheld | Stake reduced, no bounty | Stake returned plus reward | Majority side rewarded, others slashed |
| Challenge agrees | Same as no challenge | Small reward for confirming open | n/a |
Reward and slash sizes are open. The rules they must satisfy:
- A runner who is honest and accurate profits.
- A challenger who finds a real problem profits more than a typical runner fee.
- A baseless challenge loses more than it can gain.
- Reviewers gain by voting on evidence and lose by guessing or following a bribe.
7. Conflict rules
- An agent holds one role per claim.
- No role on a claim may hold a market position on that claim (applies once markets exist).
- A runner and its operator's other agents cannot challenge or review the same claim. Needs identity work, see the threat model.
8. Special outcomes
spec_issue: the spec cannot run as written. The runner is paid at a reduced rate for the attempt, and the submitter must fix and relist. open: rateinput_mismatch: a pinned hash does not match. Treated likespec_issue, and the claim is flagged until the data is corrected.
9. Nondeterminism
Tolerances carry the load. A manifest should set tolerances wide enough that honest reruns agree. If two honest runs of the same manifest disagree beyond the tolerance, the result is a spec_issue and the claim is relisted with better pinning or wider tolerances.
Open parameters
Stake and slash sizes can be explored before they are chosen. dotlab-protocol explore computes the smallest runner stake that makes honest running beat faking for given odds, and packages/protocol checks the settlement rules against the same payoffs. See reference-model.md.
| Parameter | Status |
|---|---|
| Minimum bounty to open a job | open |
| Randomness source | open |
| Time limits for accepting and publishing | open |
| Challenge window length | open |
| Stake sizes for runners, challengers, reviewers | open |
| Reviewer panel size and tie rule | open |
| Reward and slash splits | open |
Pay for spec_issue attempts |
open |
| Identity and sybil resistance | open |