Reivol
$REIVOL CA: TBA
Rules

Payment and disputes

These are the rules the ReivolJobBoard contract enforces. The site cannot change them and no one holds an admin key: the contract has no owner, no fee, no pause and no upgrade path.

Who decides a dispute

Nobody decides disputes. A requester wins only by naming one value the contract recomputes and finds wrong; otherwise the provider is paid when the check window closes. There is no arbiter and no admin.

A dispute names one position in the result. The contract checks that the bytes are exactly the submitted ones (same keccak256), recomputes that one value from the job parameters, and compares. For a fractal it runs the fixed-point loop for one pixel (at most 255 iterations, about 150,000 gas in our tests); for a matrix it computes one dot product (about 73,000 gas for n = 64), plus the cost of sending the result bytes again. If the value is right, the call fails and nothing changes, so a false dispute only costs its sender gas.

Money

  • All amounts are ETH on Robinhood Chain. No token is involved.
  • The price is locked when the job is posted. The bond is locked by the provider when claiming and must equal what the requester asked for (it can be 0).
  • Nothing is paid out directly: every outcome credits an amount to a wallet, and each wallet withdraws its own credit. A wallet that refuses ETH can only block itself.
  • The contract keeps nothing for itself. Every wei it holds is a live job's escrow or someone's credit; the tests check this after thousands of random action sequences.

Time windows

  • Claim window (5 min to 30 days): no claim in time, the price goes back.
  • Run window (1 min to 7 days, starts at claim): If a provider disconnects after claiming, nothing is lost for the requester: when the run window ends, anyone can close the job and the price plus the provider's bond go back to the requester.
  • Check window (10 min to 7 days, starts at submit): the requester checks and can prove a wrong value. A requester who is away does not block payment: after the window anyone can finalize. Check within the window.

States of a job

Open
Posted, the price is in escrow, waiting for a provider. The requester may cancel. Past the claim window anyone may close it: price back to the requester.
Claimed
A listed provider locked the bond the requester asked for. Past the run window with no result, anyone may close it: price and bond go to the requester (Abandoned).
Submitted
The result bytes are in (their keccak256 on the board, the bytes in the event log). The check window is running.
Accepted
The requester accepted: the provider is credited the price and the bond back.
Finalized
The check window closed with no proven fault: anyone may finalize and the provider is credited the price and the bond back.
Faulted
Someone proved one wrong value inside the window: the requester is credited the price and the provider's bond.
Cancelled · Expired · Abandoned
Refund states, as above.

What a check covers

For a fractal, the requester's browser recomputes 8 randomly chosen 16 × 16 tiles by default. Pixels outside those tiles are not checked unless the requester runs the full recompute (one click, well under a second for the largest job). For a matrix, Freivalds' algorithm with 20 random rounds: a wrong result passes with probability at most 2⁻²⁰. Jobs use integer arithmetic only. Floating-point results can differ between GPUs (fused multiply-add, rounding), so a float result could not be checked bit for bit; the provider page measures that difference on your own GPU.

Griefing, and what stops it

  • A provider claims and never delivers: it loses its bond to the requester when the run window ends. A bond of 0 makes that free, which the post form warns about.
  • A requester never answers: the provider is paid after the check window anyway.
  • A requester disputes a correct result: the call reverts; the provider is unaffected.
  • A requester cancels after work started: not possible; cancel works only before a claim.
  • Re-entering the contract during a withdrawal: blocked, and tested with an attacking contract.

What is public

Everything about a job: both addresses, the parameters, price, bond, every time stamp, the result bytes and any dispute. Do not use Reivol for private data; the templates take no data at all, only parameters.

The contract

ReivolJobBoard, 0x0AD97565C10B518b2A89771c3350cEE70A97730b. ABI: /contracts.json. ReivolJobBoard is new code that holds ETH in escrow. It has not had an independent security review. It needs one before real volumes; until then use small amounts.

Robinhood Chain is an Arbitrum chain: deadlines use block timestamps, and the block of each result is recorded with the ArbSys precompile so its log can be found again.