Auditor’s Guide
For nerds, auditors, and the professionally suspicious. The deep version of how it works. Everything here is checkable; where it isn’t yet, it says so. Live addresses and backing status: trust & verification.
One Scrypto component (guild-marketplace-escrow, Radix mainnet) enforces a six-state task lifecycle. The app (Next.js + Postgres) is a mirror and a convenience — the ledger is the source of truth, and a reconciler heals the database from chain events, never the reverse.
Open ──claim──▶ Claimed ──submit──▶ Submitted ──approve──▶ Released (terminal) │ │ │ cancel expire/cancel dispute ──resolve/auto──▶ Released | Refunded (terminal) ▼ ▼ Refunded (terminal)
| Transition | Caller | Auth | Time gate |
|---|---|---|---|
| create_task | poster | — (funds reward + insurance atomically) | — |
| claim_task | worker | worker badge Proof + claim bond; self-claim asserted away | sets submit deadline (7d human / 1d agent) |
| expire_claim | anyone | PUBLIC | after submit deadline |
| submit_task | worker | claim-receipt burn (one-shot) + evidence hash committed | — |
| approve_and_release | poster | task-receipt burn (one-shot) | — |
| raise_dispute | poster or worker | receipt/badge Proof + evidence hash | — |
| resolve_dispute | arbiter | arbiter badge | ruling: PayWorker / RefundPoster / Split |
| auto_resolve_dispute | anyone | PUBLIC | after dispute window (72h deployed) |
Auth pattern worth auditing: every irreversible act consumes a one-shot receipt (bucket-burn — no replay); recurring acts use Proofs; safety releases are PUBLIC and time-gated. No method deposits into stored addresses — funds return to the caller’s manifest for routing, which is what makes component-held roles (pools) possible later.
Insurance min 5% of reward; claim bond 10 XRD; dispute window 72h, default FavorDisputeRaiser; arbiter fee 0 (cap 10%). Ground truth per component address — see trust & verification.
Insurance becomes optional dispute coverage (~10–15% suggested, refunded if unused; no coverage ⇒ no dispute path — pure optimistic mode); review window with auto-release on poster silence (default 3d); SplitEvenly on dispute abandonment + reputation marks; mutually-signed splits (settle_by_agreement); heartbeat removed in favor of deadline + mutual extension. One migration, everything bundled.
| Element | Status | Best we have |
|---|---|---|
| Per-criterion enforced payouts | No shipped precedent, anywhere | Checklist-as-evidence routes to: full release / revision / mutual split / insured arbitration |
| Co-funder voting on acceptance | Every attempt died or went unused | Curator-pattern pools (named acceptor, self-claim refunds, escrow-level timers protect the worker) |
| Subjective quality judgment | Unsolvable in general | Committed brief + insured human arbiter + (planned) AI advisory opinion |
| Agent work verification | Standards in flux industry-wide | Badge-holding humans accountable for agents + automatic evidence checks |
If you have a better mechanism for any of these: post it as a task. That is not a slogan; it is the product working on itself.
The operator is pseudonymous (bigdev / @bigdevxrd) with a verifiable on-chain and GitHub track record. In lieu of doxxing: the escrow blueprint source will be published with reproducible-build verification; the bug bounty is funded through the Guild’s own escrow (on-chain, visible); a timelocked commitment bond is planned. Status of each: trust & verification. For tasks/projects over $50k USD, trustee-verified identity is offered — a named third party attests the operator’s identity and standing without public disclosure.
- —Blueprint upgrades are migrations (new component + env swap), not in-place — config is immutable per instantiation by design. Review the parameter sheet per component address.
- —Wallet-side MFA/multisig UX is not yet on Radix mainnet; arbiter-council M-of-N is enforced at the method-auth layer when activated.
- —The app is closed-source during beta; the money-path blueprint is the part being opened.
- —This is experimental software on mainnet. The honest-gaps register above is live, not historical.