Name your rate.The marketcomes to you.
prove.cash is an order book for swaps on PulseChain. You post an offer at your rate. It stays open until someone takes it. No pool price, no slippage, no transaction from you.
It fills at your rate or better, or not at all. You can let the rate fall over time to a floor: the least you will accept. You can also let it fill in parts.
An example signed offer, drawn over real UNI/LINK prices.
- signer
- 0x7a3f…c19d
- give
- up to16,642
UNI
- receive
- filled at5,801.40
LINK
- may fill
- anyone
You receive at least what you asked for
The contract holds whoever fills your offer to the number you signed, and rounds in your favour. If you add a fee, the app raises the amount you sign to cover it. You still receive what you asked for.
Anyone can fill it
No allowlist, no bond, no registration. Whoever fills your offer pays the gas. They keep whatever the market gives above the number you signed.
Posting costs no gas
Your browser does a moment of work to post it. No gas, no transaction, no sign-up.
How it works
- you
Sign the offer
Take up to this much of one token, deliver at least this much of another, inside this window. That is the whole commitment.
- the board
Carries the offer
The offer travels over a message board, not the chain. Posting costs your browser a moment of work. No transaction, no gas, no account.
- anyone
Fills it
No allowlist, no bond, no registration. Whoever fills it is the executor. They pay the gas and the number you signed, and keep whatever the market gives above that.
What you sign depends on your token
There are five ways your tokens can move at the fill. The app reads your token and picks the cheapest one it supports, so the choice is not yours to get wrong.
- EIP-30092 signaturesThe token can move on a signature alone. You never send a transaction, and nothing is approved in advance.
- EIP-2612 permit2 signaturesTwo signatures. Your tokens stay in your wallet until the moment someone fills.
- Permit22 signatures, 1 tx onceApprove Permit2 once. Its address is the same on every chain, and its code cannot change. Every offer after that is two signatures, and your token needs no special support.
- an allowance1 tx, onceApprove the contract once. Every offer after that is one signature.
- escrow1 txDeposit up front. It costs a transaction, and in exchange the offer is funded, so an executor can trust it on sight.
Where your tokens sit.
An offer is only as strong as what backs it.
authorization
funded at fillThe tokens stay in your wallet. Your signed authorization moves them into the contract at the moment of the fill.
- you spend
- Costs 2 signatures and 0 transactions
- off switch
- validBeforeYour signature moves the tokens at the moment of the fill, and it is tied to this one offer. Its expiry is part of the signature. A cancel on chain ends it at once.
escrow
in escrowThe tokens sit in the contract, committed to this one offer, until you withdraw them.
- you spend
- Costs 1 signature and 1 to 2 transactions
- off switch
- withdraw · 1 txOne withdraw returns your money and ends the offer. No cooldown, no unlock step, no window to miss. An offer you never funded is different: somebody else can fund it from money already parked in your name. Cancel the ones you do not want.
permit2
funded at fillThe tokens stay in your wallet. Your signed Permit2 transfer moves them into the contract at the moment of the fill, once and once only.
- you spend
- Costs 2 signatures and at most 1 transaction
- off switch
- deadlineA Permit2 transfer works once and expires with the offer. No standing allowance to us survives it. Your one approval goes to Permit2 itself, at an address we cannot move. A cancel on chain ends the offer at once.
permit
in walletThe tokens stay in your wallet under an allowance. A second signature sets that allowance, so you send no transaction. You can still spend the tokens before the fill, and then the fill fails.
- you spend
- Costs 2 signatures and 0 transactions
- off switch
- cancel · 1 txA permit is an allowance set by a signature, so it costs no transaction. It is still an allowance. Revoking it does not end the offer, because your signed permit sets it again at the next fill. Cancel is the off switch. A stranger who spends your permit first cannot stop the fill.
approval
in walletThe tokens stay in your wallet under an allowance. You can spend them before the fill, and then the fill fails.
- you spend
- Costs 1 signature and at most 1 transaction
- off switch
- cancel · 1 txRevoking the approval happens on the token, where the contract cannot see it. It stops a fill but does not cancel the offer. Approve that token again later and the offer comes back to life. Only cancel ends it, and it costs one transaction.
The whole bill.
Measured gas, not estimates. Posting is free. Whoever fills your offer pays the rest.
The usual case. The receiving balance already holds some of the token.
Post an offer
you- sign it and put it on the boardproof of workThe board asks your browser for a moment of work instead of money. No gas, no transaction, no sign-up.0
Fund it with escrow
you- deposit, so the offer is fundedfirst touchFunding an empty escrow is always a first touch, so it has no warm price. It is optional: an allowance costs nothing up front.124,808
Fill one offer
an executor- from your allowance120,520
- from escrow127,794
- with a callbackwhyThe executor borrows your tokens, sells them elsewhere, and repays inside the same call. They need no money of their own.135,179
Fill twenty at once
an executor- one pair, per offer58,022
- mixed pairs, per offer65,704
- the twenty-first offermarginalWhat one more offer adds to a batch already running. This number decides whether a thin margin is worth taking.53,435
- with callbacks, per offer+518 creditBorrowing inside a batch costs a little extra on every offer. The figure is the difference: one more offer with a callback, less one more without. It is too small to see on these bars.57,367
On mainnet a warm fill costs a fraction of a cent. The executor pays it, and keeps whatever the market gives above the number you signed.
A stranger pays your gas. Here is what they get for it.
Nobody pays a stranger’s gas out of kindness. You are the maker. Whoever fills your offer is the solver. They earn the gap between what the market pays and the number you signed. That is their whole income, and this is what it costs them to chase it.
what they lose
A solver pays gas for every offer they try, and learns afterwards which ones filled. A fill costs 62,963 gas. These three cost the gas and pay nothing.
the offer expired
Costs 13,711 gasThe offer expired between the moment they priced it and the moment the block landed. The contract refuses it before any token moves, so this is the cheap one.
somebody else was faster
Costs 14,406 gasAnother solver filled the same offer first. This is normal on an open board: two solvers reading it will overlap, and the slower one pays for the duplicate.
the maker took it back
Costs 76,949 gasThe offer was good when the solver checked it. Then the maker pulled the money out before the block landed. This is the only failure somebody can arrange on purpose, and each attempt costs the maker a transaction. An offer that was never good is caught before anything is sent, and costs nothing.
what they earn
What is left over, and nothing else. We charge them no fee and give them no rebate, no priority and no queue. They pay the gas. They pay the number you signed. They keep whatever is left. Your fee comes out of the number you signed, not out of the solver’s share. If nothing is left, they lose the gas.
why that is safe for you
They cannot earn more by giving you less.
Your price is in the signature. The contract charges the solver that number, whatever the market does. They can earn more only by finding a better price, never by passing you a worse one.
Anyone can be one.
No allowlist, no bond, no registration, no stake. A solver is any address that sends the transaction. Nobody can be shut out, and nobody can be locked in.
Competition is what fills your offer.
Solvers do not bid your price down. You set it. They compete on how thin a margin they will accept. The thinner it gets, the more offers fill at the rate their makers wanted.
Where the money goes
One fill
open a step for the arithmeticWhat the executor pays, over the window
The offer opens above what the pool pays today and falls until it closes: from 1,005.17 DAI down to 964.65 DAI over 24h 0m. Both are amounts you sign. Take the fee out of the closing number and you have the floor you typed. The dashed lines are the same offer with no fee and with a two per cent fee: one typed number, three signed amounts. Each dot is where that offer meets the market in the week drawn here, after gas. Another week puts the dots somewhere else.You pay the fee, out of the amount you sign. A higher fee makes the offer fill later. That is all a fee costs you.
What nobody can do to you
You signed. Three things nobody can do, and where to check each.
Nobody can change what you receive.
Your price is in the offer you sign. Payment is computed from it, your named fee comes out, you get the rest. Rounding favors you.
where to check_quote rounds the gross up with _ceilDiv, rounds the fee down out of it, and pays you the rest.There is no fee to us, and no switch to add one.
Fee is rate + sink in your signed offer. No rate: nothing charged. We take no share, add none. A sink has one destination and one lowest rate, fixed for good. The owner can add a sink, never change or remove one. Nothing later reaches a signed offer.
where to check_quote charges i.feeRate and books it to i.feeTo, which _termsOk requires to be a registered sink whose minRate is at most i.feeRate. claim pays feeSinks[i.feeTo].destination. Commit 3961c2a deleted protocolShare, feePolicy, setFees and setFeePolicy.There is no pause and no upgrade.
No switch reaches your money. Owner powers: send tokens that belong to nobody, and add a sink an offer may name. No owner function spends an allowance you gave.
where to checksetDefaultProceeds, registerFeeSink and transferOwnership are the only owner-gated functions.
Two paid reviews (security, economics) tried to break the above. Security findings fixed. One economics finding open by design; its test asserts the attack still works. One of eleven measured, accepted, written limits.
Sign one and see.
Give us an address and we mark the tokens it has already moved on this chain. Pick one and the app opens with it selected. You still set your price, and you see every cost before you sign anything.
Or start with any of these.