Skip to content

Economics: fees & coverage

The protocol is deliberately not a business in the middle. It escrows, it routes, it slashes — it never holds.

What a request costs

ComponentAmountWhere it goes
Flat request feenetwork parameter (mainnet: 1 000 000 lamports = 0.001 SOL; devnet: 150 000)escrowed inside the request account; released to the delivering prover's operator on fulfill; returned to the payer at close otherwise
Coverage premiumpremium_bps of your at-risk amount (mainnet: 25 bps; devnet: 2)same escrow, same routing — it prices the bond capacity your guarantee reserves
Account rent~0.004 SOL, reclaimabletemporary deposit for the 460-byte request account; returned at close
Terms acknowledgment~0.0015 SOL, once per walletrent for the on-chain acknowledgment record

100% of fees go to the prover that delivered. There is no protocol treasury; there is nothing to govern, drain, or trust.

The free tier: at_risk = 0

Zero at-risk is legal and means randomness only, no delivery guarantee — you pay only the flat fee, and if a prover is slow you simply retry (and reclaim() the stranded rent later). This is the right default for consumer-facing apps and everything the web SDK does out of the box.

The delivery guarantee: at_risk > 0

Declaring at_risk_lamports buys an exact, automatic promise:

  • The amount is reserved against the prover's bond for your request's entire window — the bond invariant (bond ≥ reserved) is enforced on every mutating path, so coverage is never nominal.
  • If the window passes unfulfilled, anyone can trigger slash: exactly that amount moves from the bond to your comp_dest. Not "up to". No committee. No appeal.
  • Size it at or above the maximum output this randomness can trigger — it is your compensation ceiling, and nothing warns you if you under-buy.

Two protections you inherit automatically:

  • A single request cannot reserve more than a capped share of any prover's bond, so one consumer cannot starve everyone else.
  • comp_dest may not be the prover, the request, or the prover's operator — a prover cannot slash itself into a profit.

Getting money back

  • close_request (or the web SDK's reclaim()) returns rent and unspent fee escrow to the payer once a request is terminal.
  • Slash compensation lands directly at your comp_dest — no claim step.

The Terms gate

Every value-bearing entry point requires the payer wallet to hold a current on-chain acknowledgment of the protocol Terms of Use — a one-time transaction per wallet, re-required only if the terms are revised. The acknowledgment must echo the hash of the exact published document, which is what makes it meaningful; the SDKs show the full text and refuse to acknowledge anything that does not hash to the on-chain value.

Resolution paths — fulfill, slash, close_request — are deliberately not gated: an un-acknowledged wallet can always be made whole, just never newly exposed.

Apache-2.0. Live on Solana devnet.