onchain intent solver marketplace
A user signs a gasless EIP-712 intent — "I'll send you 0.01 mWETH, pay me at least 1,900 mUSDC". Solvers compete in a 12-block onchain auction to execute it for the best net value, committing to a target contract + calldata. After the window closes, anyone calls settle and the Executor runs the solver's calldata atomically — pull tokens, run the swap, verify the delivered amount beats the user's floor, split fee to solver. No trusted offchain relay, no custody, griefing-proof.
Today the demo routes swaps through MockSwapRouter. The whitelisted-target design means the same auction also supports lending / staking / bridging intents — just whitelist the target.
How it works
User signs
The user signs a typed Intent off-chain via EIP-712: tokenIn, amountIn, minAmountOut, maxSolverFee, deadline. Single click, no gas.
Solvers bid
Within a 12-block window, solvers submit bids by committing to a target + calldata. Highest net value wins (outputOffered − solverFee).
Anyone settles
After the window closes, anyone calls settle(). The Executor runs the calldata, verifies balances atomically, pays the user and solver.
Try it yourself
Two roles to play, both work end-to-end against the live Sepolia deployment. You only need Sepolia ETH for gas — test tokens come from the faucet below.
- User · Mint a little mWETH, then create an intent. The app signs it (EIP-712) and posts it onchain.
- Solver · Switch to a second wallet (or incognito + different account), open any intent from the feed, and place a bid. The preset builds calldata for you; no hex-hacking required.
- Anyone · Wait ~12 blocks (≈2.5 min) for the auction window to end, then hit Settle from either wallet. One transaction: swap + fee split + delivery.
Need Sepolia ETH? Alchemy Sepolia faucet.
Test token faucet
Mock tokens — free, unlimited, only work on this demo. Use them to play either role: post an intent as a user, or place a solver bid.