Disputes & Arbitration
LIVEStatus: LIVE (since 2026-08-29, after the whole path was proven end to end on mainnet, on the previous component).
One limit worth stating plainly: the account the arbiter badge is assigned to may not be the task's worker account — the blueprint enforces that, because the worker's account is pinned on the task when they claim it. It does NOT stop an arbiter who funded a task from ruling on it. That side is not enforced on-chain, because a funder is not recorded on the task, so there is nothing for the contract to compare against. Today the operator funds every task and is the only arbiter.
We turned our own dispute controls on because leaving them off had become the worse option. At the time, the escrow had no auto-release, so if a poster went quiet after a worker submitted, disputing was that worker's only on-chain way out — an off UI just hid the affordance while the methods stayed callable by hand regardless. The live escrow has since added a review-window release that needs no dispute at all and credits the same full reward — the better exit on a merely silent poster now (see Money for its terms). And we did not flip disputes on the day it became technically safe: we flipped it only after proving the whole path end to end on mainnet — prediction written down first, then signed, then matched exactly.
Being equally plain about what this does not promise: the fallback ruling is a fixed 50/50 split of the reward, not a judged outcome — settle disagreements off-chain first if you can. An arbiter can rule before the window closes, but that is an operator ceremony today, signed from the wallet holding a supply-1 badge, not a button either party clicks — and we promise no turnaround time. Only the 7-day default caps the loss: half the reward, with the insurance returning to the poster. An arbiter's ruling does not: it applies one split the arbiter chooses to all three — the reward, the insurance and the bond. Watchers read the escrow every 30 minutes and page the operator on every claim, submission, dispute and settlement, with reminders before a review window closes.
What This Is
If a poster and worker disagree over delivery, a marketplace needs a way to break the tie. The Guild’s escrow blueprint ships one: a task can be moved into dispute, an arbiter can rule on how the funds split, and if no one rules within a set window the contract falls back to a default split.
All of that is deployed on Radix mainnet, and we ran it ourselves end to end before turning our UI on: on the previous component, task 3 was deliberately moved into Disputed on 2026-08-23, and its 72h auto-resolve settled on 2026-08-26 — worker and poster both collected, that component ended back at 0, and conservation was exact to the last decimal. See the ledger evidence below. No outside user has been in a dispute here yet; the path was kept to our own accounts until that settlement proved it.
What It Actually Does
raise_disputeresolve_disputeauto_resolve_disputeThe default ruling is SplitEvenly (a 50/50 split of the reward; the poster’s insurance returns to them in full either way), re-verified against the live component via the Gateway. The auto-resolve window is 7 days for a dispute raised now. Each dispute keeps the window and default in force when it was raised, so one raised before the 11 October 2026 change still closes at 72 hours.
How It Resolves
Two ways out of a dispute. A human arbiter can rule it — a supply-of-one badge, run by the operator as a ceremony, with no deadline of its own — and their fee is fixed at zero: arbiter_fee_pct is 0 on every task this app funds, so insurance funds no arbiter. If nobody rules first, auto_resolve_dispute is public and has no auth: once the 7-day window passes, any account can call it, and it applies the component's fixed default — a 50/50 split of the reward, with the poster's insurance returning to them whole. Calling it is a nuisance, not a theft: settlement credits the poster and the worker as entitlements payable only to their pinned accounts, so a stranger who calls it pays the network fee and moves no money to themselves. We promise no turnaround time for a ruling to land before the default fires — there is no public SLA, only the 7-day chain-enforced backstop. And priced against an honest approval, the lapse costs only the worker: they end with half the reward instead of all of it, while the poster is credited the other half plus their whole premium — and the worker's claim bond is split the same way as the reward: half back to the worker, half to the poster. A worker weighing an unresponsive poster should know that before counting on a dispute to pressure them.
The caller-routed drain this page used to warn about is closed on the deployed blueprint — settlement moved to pull at the 2026-08-17 cutover, so no settlement method pays the reward or the insurance to whoever calls it. What remains is the policy shape stated above: under the 7-day default, the worst a poster can lose to a bad-faith dispute is half the reward, and the insurance comes home. The mirror of that is worth stating too: a poster who disputes and lets the 7 days lapse ends up better off than one who approves, and only the worker carries the loss.
Three things stand behind that, and we would rather name them than overstate them. One, a build gate: the dispute UI can now only be off by a deliberate rebuild — the pre-deploy check fails a release that compiles it off. Two, detection: watchers read the escrow every 30 minutes and page the operator on every claim, submission, dispute and settlement, with reminders before a review window closes. Three, revision first: a poster can request changes before either side reaches for a dispute — that request is a record we keep, not a chain event, so treat a silent one as a reason to check in, not proof it never arrived.
That is a blocking gate plus detection plus, under the 7-day default, a fixed-loss ceiling. It is not a promise that no task will ever be disputed — the on-chain methods answer to the caller, not to our UI — and it is not a promise an arbiter rules before the 7-day default fires: we have committed to no turnaround time, on purpose, and the fixed 50/50 default is what makes that honest rather than reckless.
Proven End to End on Mainnet — on the Previous Component
On task 3, we wrote down the predicted outcome before signing anything — worker entitled 10, poster entitled 11, a fixed 50/50 split of the reward, zero arbiter fee, the claim bond untouched — and the chain returned exactly that. Worker and poster each collected with their own signed withdrawal; the escrow component and both of the task’s vaults ended at 0, conservation exact to the last decimal. That is the property this page asks you to trust: not our word, the ledger.
Where this ran: on the previous escrow component, component_rdx1cz46…akd82f, retired on 2026-09-13 — not the live one named above, whose own task 3 is a different, undisputed task. The dispute code is the same crate; this remains the only run of the timeout path, where nobody rules and the fallback fires.
All three CommittedSuccess, 2026-08-26 13:53:43Z → 13:59:08Z. One property worth knowing: the 72h window opened at 00:37:54Z and nobody called the public auto-resolve for 13 hours — permissionless and unauthenticated does not mean someone will volunteer the fee for zero reward of their own.
On the live component there has been one dispute: task 5, ruled on 2026-09-14 by the arbiter — Split(0.5, 0.5), arbiter fee 0, worker 262.5 XRD and poster 262.5 XRD, and the 76.45 XRD claim bond split the same way, 38.225 XRD to each. Poster, worker and arbiter were all accounts the operator controls, so it shows the ruling path works; it is not evidence of a neutral ruling between strangers. None has happened yet.
Verify It Yourself
On the component you can read the live dispute window and the dispute_auto_resolve_default (SplitEvenly) directly — that is ground truth, ahead of any doc.
The escrow blueprint source is public at github.com/radixguild/guild. A reproducible build that ties it to the deployed package is still planned.
Don’t Read This As
Full trust story: verify, don’t vouch and the auditor’s guide. Questions or anything that looks off: say it on Telegram.