Job #9 — Cross-DEX Price Reader + LP Depth
You are adding a cross-DEX price and liquidity reader to the existing Pons Arb UI. This module reads prices and LP depth from non-Uniswap DEXes on Robinhood Chain (chainId 4663) and displays them alongside the existing Uniswap pool data. It is a READ-ONLY module. No execution, no swaps, no approvals.
Source: https://github.com/identity-md-launches/launch-3068-fix-one-bug-v4 (latest commit). App is a static JS/HTML bundle.
Context:
- Chain: Robinhood Chain (4663)
- RPC: Blockmachine (keyless) with dRPC fallback (already in the codebase)
- The existing monitor reads Uniswap V3/V4 pools. This job adds OTHER DEXes.
- Purpose: cross-DEX price comparison is a signal input for an external model. The UI displays the data clearly.
- No new npm dependencies. No build step.
What to build:
A new section on the page (below the existing spreads table) titled "Cross-DEX Prices." It reads and displays price + LP depth for the configured DEXes.
DEX configuration (hardcoded array in JS):
const DEXES = [
{
name: "SushiSwap V3",
type: "v3",
factory: "0xE51960f1B45f1C9FB6D166E6a884F866fC70433B",
fees: [100, 500, 3000]
},
{
name: "Ramses V3",
type: "v3",
factory: "0xE0c4ceb92d08CA985bB70fe0a22fEb121A9854A8",
fees: [100, 500, 3000]
}
];
For type "v3":
- Call factory.getPool(token0, token1, fee) for each fee in the fees array
- Token sorting: BigInt comparison (same as existing code)
- For non-zero pool addresses: call pool.slot0() and pool.liquidity()
- Price = 1.0001^tick (same math as existing V3 reads)
- Show raw liquidity value (no $ conversion needed)
- If getPool returns 0x0: skip that fee tier silently
Display (table below the existing spreads):
| DEX | Fee | Price | Liquidity | Spread vs Uni | Status |
|-----|-----|-------|-----------|---------------|--------|
| SushiSwap V3 | 0.30% | 0.1542 | 12,410 | +0.05% | OK |
| Ramses V3 | 0.05% | 0.1539 | 8,200 | +0.02% | OK |
- "Spread vs Uni" = (DEX price - best Uni V3 price for same pair) / best Uni price x 100
- "Status": OK / no pool / error
- Poll every 30s (same cadence as existing monitor)
- Only read for the currently active Token A + Token B pair
- If no Uni V3 pool is active for comparison: show "—" in Spread column
Also remove from the existing page:
- The 3-LEG rows in the All Pairs spreads table (remove entirely, do not display)
- The Auto mode checkbox and its label (remove entirely)
- The "Auto mode" section text below the spreads table
Constraints:
- No new npm dependencies
- Static JS/HTML, no build step
- Do not modify existing V3/V4 execution code, quote logic, or wallet flow
- All new cross-DEX code in a separate file: js/cross-dex-reader.js
- Handle RPC errors gracefully (show "error" in status, keep last good data)
- The module must work if both DEXes return no pools (empty table, no errors)
- Test live: call getPool on both factories for WETH (0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73) and USDG (0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168) and confirm non-zero pools are found and readable
Deliverable: Updated files ready to run. No explanation needed, just the code.