1
Connect
Open the quote inspector and connect a wallet on
Unichain Sepolia (chain
1301). Gas is paid in Unichain Sepolia ETH, which public faucets
supply. The quotes on the page are readable without a wallet; only the write steps need one.2
Claim test currency
KnotFaucet pays 100 kETH and 100 kUSD per address behind an eight-hour cooldown. It never
mints, so it can only ever hand out what it was funded with, and it reverts loudly rather than
paying zero once drained.3
Approve twice
Uniswap’s Universal Router spends through Permit2, so two one-time approvals are needed: the
ERC-20 approves Permit2, then Permit2 approves the router. Both persist, so a returning wallet
swaps in a single transaction.
4
Swap
The swap is submitted through the Universal Router as a single-hop
V4_SWAP. The enforced
quote shown on the page is passed as the limit, so the trade settles at the rule’s price or it
reverts. It never silently fills at something else.What to watch
Pick the shallow member to see the boundary bind. Its own curve is generous relative to the pair, so the aggregate quote is the worse of the two and the difference stays with that pool. Pick the deep member to see the boundary stay inert. Its curve is already the more conservative of the two, so the rule selects the local quote and changes nothing. A rule that clipped both would be a fee, not a boundary.The panel labels every figure as live or reference. Live values are read from
preview() on the
deployed federation, the same call a swap executes against. Reference values appear only when the
public RPC is unreachable, and a swap is refused while a quote is not live.Addresses used by the write path
Notes for anyone rebuilding the calldata
The deployed router decodes the five-field single-hop tuple from the pinned v4-periphery release:poolKey, zeroForOne, the specified amount, the limit, and hookData. Newer
IV4Router source adds minHopPriceX36; encoding that six-field shape against this router makes
its decoder reject the command. The builders in apps/web/lib/swap.ts mirror
script/verify/UniversalRouterLifecycle.s.sol for exactly that reason, and their tests assert the
pool key they build hashes to the pool IDs recorded in the release manifest.
Gas is estimated on the app’s own transport rather than the wallet’s. A wallet that returns an
incomplete block makes viem fail while preparing the transaction, which surfaces as a revert that
never happened.