What QuevFi is.
QuevFi is an on-chain liquidity intelligence and execution layer. It reads market state directly from blockchain sources, resolves fragmented liquidity into understandable routes, evaluates execution quality, and lets you act from the same interface. Its one rule: verify before display. Every number answers where it came from, when it was read, and how to verify it.
Architecture
- Chain registry (
src/config/chains.ts) declares every data source per chain. A missing source disables the feature and shows NOT SUPPORTED. - Read service (
src/lib/chain/reader.ts) wraps viem and returnsObserved<T>: value, source, block number, timestamp, status. Reads are anchored to one block via Multicall3. - RPC failover (
src/lib/chain/rpc.ts) tries configured endpoints then public ones; the browser reads through the same-origin relay/api/rpc/:chainId(read-only method allowlist) so keyed URLs never ship in the bundle. - Depth engine (
src/lib/liquidity/depth.ts), simulator (simulate.ts) and execution classifier (verdict.ts) are pure, deterministic functions. - Pricing and routing are adapter modules (
src/lib/pricing/*,src/lib/routing/providers/*) behind small interfaces. - Server routes validate input with Zod and are rate limited:
/api/health,/api/token,/api/pool,/api/prices,/api/routes,/api/markets.
Depth classification
Depth classification is based on observable pool reserves and configured normalization rules. It is not a universal risk rating.
| Class | USD basis (both sides) | Native basis (no USD reference) |
|---|---|---|
| NO LIQUIDITY | a reserve is zero | a reserve is zero |
| VERY THIN | < $5,000 | < 2 ETH-equivalent |
| THIN | < $50,000 | < 20 |
| HEALTHY | < $1,000,000 | < 400 |
| DEEP | ≥ $1,000,000 | ≥ 400 |
| UNKNOWN | no sourced price, no USD peg, no native reference — reserves are shown as read, nothing is invented | |
The 0–100 depth score is log-scaled (USD 10 M = 100). When pricing is unavailable the interface shows TOKEN-NATIVE DEPTH (e.g. 124.22 WETH + 280,413 USDC) and USD DEPTH: UNAVAILABLE.
Execution condition
Deterministic, in order: NO LIQUIDITY when a reserve is empty · UNSUPPORTED when neither depth nor a quote exists · FRAGILE when impact ≥ 5% or the trade is ≥ 10% of the input reserve · THIN when impact ≥ 1%, share ≥ 2% or depth is THIN/VERY THIN · DEEP when depth is DEEP and impact < 0.3% · otherwise HEALTHY. It never says “safe” or “guaranteed”; it is not financial advice.
Prices
Priority: 1. Chainlink oracle where a feed is configured · 2. on-chain pool-derived mid (deepest stable pool, else WETH pool × Chainlink ETH/USD) · 3. CoinGecko public API · 4. DexScreener · 5. UNAVAILABLE. Every price carries provider, source string, upstream timestamp, read time, confidence and (when on-chain) block number.
Routing
Uniswap V3 is quoted through QuoterV2 (single hop across all fee tiers and two-hop paths through the chain's intermediates, in one block-anchored multicall). Uniswap V2 through Router02.getAmountsOut. 0x and 1inch adapters call their APIs only when ZEROX_API_KEY / ONEINCH_API_KEY exist server-side; otherwise they report NOT CONFIGURED and are excluded. A quote is only labelled BEST EXECUTABLE QUOTE when at least two valid quotes were compared; ranking is net output after gas when the buy token has a sourced USD price, else raw output.
Execution
The flow is connect → choose pair → amount → quote → route → expected output → minimum received → slippage → gas → exact approval if needed → review screen → wallet signature → hash → receipt (confirmed / reverted). Nothing signs automatically. Unlimited approval is behind an advanced toggle with a warning.
Networks
| Chain | Chainlink | V3 quotes | V2 quotes | Indexers |
|---|---|---|---|---|
| Ethereum (1) | 8 feeds | yes | yes | GeckoTerminal, DexScreener, CoinGecko |
| Base (8453) | 4 feeds | yes | yes | GeckoTerminal, DexScreener, CoinGecko |
| Arbitrum One (42161) | 6 feeds | yes | yes | GeckoTerminal, DexScreener, CoinGecko |
| Robinhood Chain (4663) | none | NOT SUPPORTED | yes | GeckoTerminal, DexScreener |
What is live
- RPC health monitor (connection, latest block, latency) per chain
- Wallet connection (MetaMask, Rabby, Coinbase Wallet, injected; WalletConnect when a project id is set)
- Native balance, ENS, listed-token balances
- ERC-20 inspector (name, symbol, decimals, supply, bytecode, holder balance)
- Uniswap V2 pair reader and V3 pool reader with depth classification
- Price resolver: Chainlink → pool-derived → CoinGecko → DexScreener, always with source/age/confidence
- Market scanner from GeckoTerminal / DexScreener with live block stamp
- Constant-product simulator and price-impact curve from live reserves
- Route engine: Uniswap V3 QuoterV2 and Uniswap V2 Router02 on-chain quotes with route graph
- Swap execution on SwapRouter02 / Router02 with exact approvals, review screen and receipt tracking
Planned (shown as COMING SOON / NOT CONFIGURED in the app)
- 0x and 1inch quotes (adapters exist; activate with server keys)
- Historical market data
- Additional DEX adapters (Curve, Balancer, Aerodrome, …)
- V3 active-range depth (tick-walk) instead of pool holdings
- Multi-chain route comparison across bridges
Security
QuevFi never asks for seed phrases or private keys, never logs wallet data, never signs automatically. Addresses are validated with viem, chain ids and token decimals are checked, API responses are validated, server routes are rate limited, and no dangerouslySetInnerHTML is used. External token metadata is sanitised before display.