Method · sources · limits
How every number is made.
Simulate
eth_simulateV1 on the latest block with traceTransfers on (native HYPE moves appear as transfer events from 0xeeee…eeee). Pass one learns which tokens, spenders and pools the calls touch. Pass two runs the same calls between two Multicall3 snapshots of your balances, prices and allowances, plus a code-size read. The node's debug tracer needs a key; simulateV1 does not.
Measure
Balance changes are balanceOf after minus before, in the same simulated block. Events are compared with them (rule R11). Gas is the simulation's gasUsed × eth_gasPrice; the dollar line uses the Uniswap v3 WHYPE/USDC 0.05% pool mid price, not an oracle.
Prove pools
A v3-style pool counts only when its factory's getPool(token0, token1, fee or tickSpacing) returns that same address. A v4 swap counts only when it comes from one of the four PoolManagers listed below.
Quote
DelvoQuoteLens is never deployed. Its runtime code is placed at an empty address inside an eth_call (state override); for each pool it starts a real swap and reverts inside the payment step with the amounts and the price after. Fork tests show the executed amount equals the lens quote to the unit on Uniswap v3, CL, Ramses and v4 pools.
Allowances
Approval and ApprovalForAll logs with your address as owner, from block 0, are leads. Each pair is confirmed with allowance() or isApprovedForAll() on the token; symbol, decimals and totalSupply must answer. Confirmed blocks (head − 20) are cached; the last 20 are re-read every time, and logs marked removed are dropped. A scan that hits its call or time cap says incomplete.
Fail closed
Any read that fails turns the result into “incomplete”. A preview never says safe.
| Uniswap v3 (8c60) factory · getPool by fee | router |
| Uniswap v3 (1707) factory · getPool by fee | no checked router: compare only |
| CL pools (efd7) factory · getPool by tickSpacing | router |
| Ramses v3 (29cd) factory · getPool by tickSpacing | router |
| Uniswap v4 (e2e1) | used by the Universal Router |
| v4 PoolManager (06c6) | compare only |
| v4 PoolManager (5fb0) | compare only |
| v4 PoolManager (b308) | compare only |
| Universal Router (v4 swaps) | |
| Multicall3 | |
| WHYPE · USDC · KNTQ | |
| Lens placement (no code on chain) |
How they were found: v3 factories answer getPool for their own pools; each router’s factory() (or deployer) names its factory and its verified source on the Elysium explorer is “SwapRouter”. PoolManagers are the emitters of v4 Initialize and Swap events. The Universal Router’s v4 swaps were executed on a fork against the e2e1 PoolManager.
Foundry: 33 unit and fuzz tests (1,024 runs each fuzz) and one invariant (64 runs × 48 calls) for the executor, with hostile tokens: fee-on-transfer, false-returning, no-return, reentrant, blocklisting and balance-lying; dishonest routers that pay less, keep the input, pay someone else, pull twice or re-enter.
Fork tests on real Elysium pools (13 Nov 2026): Uniswap v3 WHYPE/USDC 0.05%, CL tickSpacing 100, Ramses tickSpacing 50 and the hookless v4 HYPE/USDC 0.3% pool; each executed output equals the lens quote; a minimum one unit above the quote reverts.
Site: unit tests for the decoder, every rule, the plan builder, input checks, the rate limit and the relay; an end-to-end run in a real browser with a test wallet.
Planned, not built
Wallet extension / snap
Previewing every dapp request inside the wallet, before the signature prompt. Today you paste or build the transaction here.
Developer API
The preview and route comparison as an API with quotas. Not open yet.
$DELVO for API quotas
Only once the API exists. Nothing on this site needs the token, and holding it gives no rights or income.