$GPUFARM IS LIVE
GPUFarm
Trust model

What you trust, and what you can verify

GPUFarm runs compute offchain on independent hosts and settles payment on Robinhood Chain. This page states exactly which parts are enforced by smart contracts, which are signed and checkable, and which you are trusting GPUFarm's servers or a host to do correctly.

Escrow enforced onchainServer can't take escrow aloneScheduler & telemetry are trusted

Onchain vs offchain#

Robinhood Chain is the settlement and trust layer, not the compute layer. Nothing that would be expensive, private or high-frequency goes onchain.

ComponentWhereNotes
Job escrow (max payment)OnchainComputeEscrow holds the customer's maximum payment from createJob until release, refund or dispute resolution.
Compute receiptOnchainThe JobCompleted event: job hash, provider, farm, customer, amount, GPU-seconds, start/end, workload type, result hash, challenge end.
Payouts & refundsOnchainCredited per job to the RewardDistributor; each payee claims with claim(token) (pull payments).
Farm identity, host keysOnchainGPUFarmRegistry stores only owner, metadata hash, active flag and commission; owners authorize their daemons' host keys.
The workload itselfOffchainContainers run on the host's GPUs inside a sandbox. Never onchain.
Scheduling & matchingOffchainThe coordinator picks a compatible machine and offers the job with a 10-second reservation.
Heartbeats, telemetry, logsOffchainStored by the coordinator; never written to the chain.
Inputs & outputsOffchainObject storage behind short-lived signed URLs scoped to one job. Only hashes reach the chain.
Benchmarks & reputationOffchainMeasured by the coordinator from benchmark challenges and real job history.

Who verifies compute#

The coordinator's verifier key signs an EIP-712 Completion after a job passes verification. It is an attestation key: it holds no funds and sends no transactions. Anyone (the host, the customer, a keeper) submits the signed completion to the escrow.

domain: "GPUFarm ComputeEscrow" v1 · chainId 4663
Completion(bytes32 jobKey, address provider, bytes32 farmId, uint256 amount,
           uint64 computeSeconds, uint64 startedAt, uint64 completedAt,
           bytes32 workloadType, bytes32 resultHash, uint64 sigDeadline)

Refund(bytes32 jobKey, uint64 sigDeadline)

Before signing, the coordinator runs these checks on the uploaded result:

  • Re-hashes the output bundle from storage and compares it with the host-reported resultHash and the host-signed receipt (personal_sign by the daemon's host key).
  • Checks execution telemetry from the assigned GPU UUIDs during the run: utilization, memory and temperature samples. A run that claims success with no utilization on its GPUs is flagged.
  • For workloads with a registered deterministic verifier, recomputes the expected output independently and compares it — the only path to RESULT VERIFIED.
  • Computes billable GPU-seconds as the shorter of host-reported and server-observed runtime, capped at the job's max runtime.
Hashing does not prove arbitrary computation
A matching hash proves the bytes you download are the bytes the host uploaded — not that a model ran correctly. That is why every job carries an honest verification level, and why the challenge window exists.

Payment finalization#

The backend can never simply declare “job completed” and take the escrow. Money moves only through these paths, each enforced by ComputeEscrow:

PathWhoWhen
Customer approves earlyCustomerCustomer submits completeJob themselves (immediate release), or calls releasePayment any time while the job is Completed.
Challenge window passesAnyoneAfter a verifier-signed completion, 1 day runs. Once it ends without a dispute, anyone can call releasePayment.
Dispute resolvedJob's arbiterOnly for a disputed job; the arbiter splits the completed amount between the provider and the customer.
RefundCustomer / anyoneA funded job refunds in full after its deadline (customer) or at once with a verifier-signed Refund (anyone may submit).

The amount in a completion is the customer's charge — compute plus the platform fee added on top — and can never exceed what the customer escrowed. On release the escrow splits it so the fee recipient gets exactly the fee and the provider side gets the full compute charge (any rounding unit stays with the host). Anything the job didn't use goes back to the customer. Exact formula

WhoReceives
Customer paysCompute (billable GPU-seconds × the host's rate) + the platform fee on top, at the fee bps snapshotted when the job was funded.
Host (provider)Its full quoted compute rate — minus the farm owner's commission only if the job ran in a farm with a commission registered in GPUFarmRegistry.
Farm ownerThat commission (≤ 20%), taken from the compute share, never added to the customer's bill.
Protocol fee recipientThe platform fee: A × feeBps / (10,000 + feeBps) of the charge A, i.e. the fee that was added on top.
Customer refundUnused escrow: maxPayment − A, credited back to the customer at release.

Disputes and the arbiter#

  • During the challenge window the customer calls openDispute (job result problem, missing output, host terminated early, invalid output). The escrow freezes: nothing can be released.
  • The arbiter reviews the job spec, logs, GPU telemetry, the result and server hashes and the host-signed receipt — all of which GPUFarm keeps for the job.
  • The arbiter calls resolveDispute(jobKey, providerAmount). It can only choose how much of the completed charge is paid out (≤ amount) — that award is split into fee, farm commission and host share exactly like a normal release — and everything else returns to the customer. It cannot send funds to any other address, including itself.
  • The arbiter address is snapshotted into each job when it's funded; replacing the arbiter later never affects existing jobs.
  • If a dispute is not resolved within 30 days, anyone can call resolveExpiredDispute and the customer is refunded in full.
V1 arbitration is an accountable human arbiter, not a decentralized court. We say so rather than dress it up.

Cryptographically verifiable vs trusted#

You can verify yourself
  • Escrow balances, job status and every state change (contract storage + events)
  • Compute receipts: JobCompleted with result hash, GPU-seconds and amount
  • Payout and refund credits, and your claimable balance in the RewardDistributor
  • The verifier signature on every completion (EIP-712, recoverable)
  • Host-signed receipts and benchmark reports (EIP-191 by the daemon's host key)
  • Result hashes: sha256 of the output bundle you download
  • Signed daemon releases (sha256 + Ed25519)
You are trusting
  • The scheduler to match fairly and not skip hosts arbitrarily
  • Telemetry reported by host daemons (NVML readings can't be proven to the server)
  • The verifier's attestation that checks passed — for HOST REPORTED jobs, that is the main signal
  • The coordinator's storage to keep inputs, outputs and logs intact until settlement
  • Network statistics and reputation numbers computed from the coordinator's database
  • The arbiter's judgment in a dispute

Verification levels#

Every completed job gets exactly one label. GPUFarm never labels everything “verified”.

LevelMeaningHow it's reached
Result verifiedOutput was deterministically checked: an independent re-run or verifier produced the same result hash.A server-side deterministic verifier recomputed the output and the hashes match. V1 ships one built-in: the selftest workload.
Execution verifiedTelemetry from the assigned GPUs and the integrity of the uploaded result were confirmed. The output itself was not re-computed.Result hash re-computed from storage matches the host receipt, and telemetry shows the assigned GPUs working during the run.
Host reportedThe host reports completion, but the workload is not independently reproducible and telemetry was insufficient to confirm execution.Hash integrity holds, but the workload isn't reproducible and telemetry was insufficient to confirm execution. Use the challenge window.

Failures and refund guarantees#

  • Host disappears before running: the job is re-offered to another compatible machine. The customer pays nothing for the lost attempt.
  • Host fails or disconnects mid-run: the assignment is abandoned and the job re-queued (up to its attempt limit), else marked FAILED.
  • A FAILED or canceled funded job gets a verifier-signed Refund; anyone can submit it and the full escrow is credited back to the customer.
  • If GPUFarm's servers vanished entirely, the customer can still call refund after the job's deadline (max runtime + 24 h queue allowance + 1 h, at most 30 days). No server cooperation needed.
  • Duplicate settlement is impossible: each transition requires an exact current status, so a job settles or refunds once.
  • Payouts are pull-based: a payee who can't receive funds can't block anyone else's settlement.

If a key is compromised#

CompromisedCouldCould not
Verifier keySign completions for currently funded jobs naming any provider and any amount up to each job's escrow; sign refunds (which only return money to customers).Bypass the challenge window — customers can still dispute every fraudulent completion before release. Affect jobs funded after the verifier is rotated.
Arbiter keyDecide disputed jobs unfairly, within the split between that job's customer and provider.Touch undisputed jobs, pay any other address, or exceed the completed amount.
Contract ownerChange verifier, arbiter, fee recipient, fee (≤ 10% on top of compute), challenge window (1 h–7 d) and the stablecoin allowlist — for jobs funded afterwards.Move escrowed or credited funds, change terms of existing jobs, upgrade the contract (no proxy), or renounce ownership into a dead state.
Coordinator serversMis-schedule, show wrong statistics, withhold artifacts, and — because the verifier key lives there — everything the verifier key could.Release escrow without a valid verifier signature, skip the challenge window, or block the customer's deadline refund.
A hostReturn wrong output for non-reproducible work (labeled HOST REPORTED), fake telemetry, or quit mid-job.Get paid without a verified completion, reach other jobs' inputs (per-job signed URLs), or read its own daemon's signing key from a workload.

Contracts on this deployment#

ComputeEscrow0xB5ac9A4f719D8E9208436fDEB85BfF5A88b0dE44
GPUFarmRegistry0x9767116E1cA728C8acab1009a6C4F6497f3dE91B
RewardDistributor0x13A91193588e2c509cf46B3c1d6B04423846e595
USDG (payment stable)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
Live escrow settingValue
Verifier (attestations)0x50e2…e64e
Arbiter (disputes)0xfcC3…5c0E
Fee recipient0xfcC3…5c0E
Owner (Ownable2Step)0x35d5…A828
Protocol fee2.5% on top of compute
Challenge window1 day
Registry / distributor wiringMatches the configured addresses
Open Robinhood Chain explorer