How it works
A referrer escrows the reward up front. A referee takes a slot, signs up with the code, and submits proof. The referrer approves — or disputes, and an arbitrator rules. Nobody has to trust anybody to hold funds.
The money
Posting a slot locks … of the reward: the reward itself, a … protocol fee, and a … dispute stake. The referee posts a matching … stake only when they submit proof, so accepting a mission is free. Both stakes come back on an honest deal — the loser of a dispute forfeits theirs to the arbitrator, which is what stops either side from disputing for free.
Changing an offer after it is posted
An offer is not frozen. Its referrer can add slots at the price already posted, funding each new one exactly as the first were, and can raise the reward, topping up the escrow on the slots nobody has taken. The offer keeps its id and its history either way, so a campaign that sold out or is not moving does not have to be cancelled and re-posted.
Two limits on the raise. The reward can only go up — the advertised price is what a referee decides on before doing the work, so it can never be walked back under them. And it moves only between missions: while any mission is in progress the price is held, and it unlocks once every one of them has settled. A slot already paid out is never re-priced. Adding slots has neither restriction, because it changes nothing about a mission already under way.
Points and the leaderboard
The board is ranked on points, and points are minted from one thing only: the … fee a settled slot paid the protocol. A slot mints 100 points per USDC of fee, split 70/30 between the referrer and the referee. The referrer takes the larger share because they paid that fee and locked the escrow; the referee has already been paid in USDC.
Nothing in flight scores. A claim that is accepted, submitted or disputed can still go either way, so it is worth nothing until it reaches a terminal state — and nothing already scored is ever taken back. The same rule governs the other columns: they count slots that closed, missions that reached a terminal state and disputes that were ruled on, never work still under way.
The reason for pricing points in fees is that every other number here is free to inflate. Posting an offer costs nothing, because cancelling refunds the reward, the fee and the stake in full; accepting a mission costs nothing, because the referee's stake is not pulled until they submit proof; letting a mission lapse costs nothing. The fee is the only sum that is charged on a real settlement and never returned, so it is the only sum a ranking can safely rest on. No single counterparty may supply more than 25% of a wallet's points either, so one relationship — however genuine — cannot be an entire rank.
This makes rank cost money; it does not make it unbuyable. Anyone holding both sides of a deal can still settle slots with themselves, and they will pay the same … for the privilege as everyone else. That is deliberate — the price of a point is the same however it is earned — but read the board as a record of fees paid, which is exactly what it is, rather than as proof of reputation.
Your proof, and what happens to it
Proof of a signup is usually a screenshot of a personal financial account, so none of it goes on chain: the contract stores only a keccak256 commitment and a link. The file itself is uploaded to private storage and shown to exactly three people — the referee who submitted it, the referrer who is paying for it, and, only while a dispute is open, the arbitrator ruling on it. Not to anyone else holding the link, and not to the arbitrator once they have ruled. Accepted formats are PNG, JPEG, WEBP, PDF, up to 10.0 MB.
It is deleted as soon as the claim settles — paid, rejected or expired — and equally as soon as a submission deadline passes without a claim ever being made. There is no retention period to wait out: the file exists for as long as someone can still act on it and no longer, so a slow offer keeps its proofs longer than a fast one purely because the deal takes longer. Off-chain storage is only private if it also ends, so the deletion is part of the promise rather than housekeeping.
The commitment covers the file's bytes together with this chain, this escrow and this claim id — not just the link, which anyone can read on chain and which would therefore prove nothing. That binds a proof to one claim, so a genuine screenshot cannot be replayed across several, and it means an arbitrator can recompute the hash from the file in front of them and check it against the chain. Since we can read the storage, that referee-signed hash is also what stops us swapping the file. Your browser checks it on every view, and says so. A referee who would rather host the file themselves can still paste a link instead; the commitment works the same way.
Live parameters
Read straight off Base Sepolia. These match cast call against the same addresses.
- Protocol fee
- …
- Dispute stake
- …
- Review period
- …
- Total escrowed
- …
- Settlement token
- …
- Escrow
- 0xd4882565acb54A9673e3776efd87CC2BF1049Cf6
- Arbitrator
- 0x189157B55777C254F85a6689368eF599920E165E
- Platform registry
- 0x4102650F388A4753Bd0967244F715C921BA3132b
Money moved
Lifetime, across every offer ever posted — not what is waiting to be withdrawn, which goes to zero the moment someone sweeps it. Totalled from settled claims rather than read off a counter, because the contract keeps none: the amounts are a function of the outcome and the offer's reward, so they can be recomputed exactly.
- Total spent
- …
- Total earned
- …
- Total revenue
- …
- Arbitrator revenue
- …
Spent is what left referrers' escrow for good; earned is what reached referees. The gap is the protocol fee plus whatever stakes were forfeited. Arbitrator revenue only moves on a dispute that was actually ruled, and by the same amount whichever way.
Offer status
What the badge on an offer means. Unlike a claim's, this is not an on-chain enum — it is read off the slot counts, the cancelled flag and the clock, so an offer can reach it without anyone sending a transaction.
- Open
- Has a free slot. The only state you can take a mission from.
- In progress
- Every slot is taken but some claim is still unsettled.
- Completed
- Every slot has settled — paid out or refunded. Terminal.
- Expired
- The deadline passed while slots were still open. Nobody can take one now, and the escrow on them sits until the referrer either reopens the offer with a new deadline or reclaims it.
- Cancelled
- The referrer called it off and took back every slot nobody had taken. Missions already in flight are untouched and still settle normally.
Claim status
Where one referee's slot has got to. This one is the ClaimStatus enum stored on the claim, so it only changes when someone sends a transaction — and the three terminal states are the only ones in which the money has finished moving.
- Accepted
- The slot is held. The referee has until the submission deadline to sign up and post proof, and has staked nothing yet. Miss it and anyone can release the slot back to the offer.
- Submitted
- Proof is in and the referee's stake is now posted too. The referrer has the review period to approve it or dispute it.
- Disputed
- The referrer rejected the proof and an arbitrator now decides. Both stakes are locked until they rule.
- Paid
- The referee has the reward and the protocol has its fee. Reached either by the referrer approving, by an arbitrator ruling for the referee, or by anyone finalising it once the review period lapsed — silence pays out. Terminal.
- Rejected
- An arbitrator ruled for the referrer and the referee forfeits their stake. The reward and fee were never spent, so the slot reopens for someone else — or is refunded, if the offer has since expired or been called off. Terminal.
- Expired
- The submission deadline passed with no proof. The referee had staked nothing so lost nothing, but cannot retake the mission; the slot reopens or is refunded the same way. Terminal.