Skip to content

Latest commit

 

History

History
170 lines (114 loc) · 6.74 KB

File metadata and controls

170 lines (114 loc) · 6.74 KB

IntentLP — Demo Day Walkthrough

Demo Date: June 19, 2026
Hookathon: UHI9 — Impermanent Loss & Yield Systems
Deployment: Arbitrum Sepolia (0x8BFBAA48cB579600FBDe29aAAf04965C3FDBDac0 — fixed contract)
Total Time: ~3.5 minutes | Live Demo: ~2 minutes


1. Problem (30 seconds)

"Uniswap v4 hooks give LPs powerful new tools, but one problem remains: once you deposit, anyone can swap against your liquidity at any time, with any volume. Toxic flow — large swaps, out-of-hours trades, high-slippage MEV — creates impermanent loss that LPs can't control. IntentLP gives that control back."

Key points:

  • LPs currently have no on-chain way to filter which swaps route through their liquidity
  • Impermanent loss disproportionately comes from uncontrolled, toxic flow
  • Existing solutions (keepers, rebalancing bots) are reactive, not preventive

2. Solution (30 seconds)

"IntentLP is a before-swap hook that lets LPs register a set of conditions — an intent — that a swap must satisfy before it touches their liquidity. If the swap violates any condition, the LP earns a penalty fee. Compliant swaps go through at the base fee. LPs get the upside they want and get compensated for the risk they don't."

Key points:

  • Register an intent once; it stays active until deactivated or bridged
  • Conditions: volume window (min/max), time window (UTC hours), slippage tolerance (bps)
  • Violations are counted per-LP per-pool; penalty fee scales with violation ratio (up to 30 bps)
  • Chainlink price feed enforces the slippage bound on-chain
  • USDC streaming rewards for active LPs (Circle integration)
  • Cross-chain bridging via Across Protocol (ERC-7683)

3. Live Demo (2 minutes)

3a. Register Intent (30 seconds)

"Let's register an intent on Arbitrum Sepolia. I'll set my conditions: only route swaps between 0.1 and 50 ETH, during business hours (9:00–17:00 UTC), with a max slippage of 1%."

  1. Navigate to https://intent-lp-hook.vercel.app/register
  2. Connect wallet (MetaMask on Arbitrum Sepolia)
  3. Fill the form:
    • Min Swap Volume: 0.1 ETH
    • Max Swap Volume: 50 ETH
    • Max Slippage: 100 bps (1%)
    • Active Hours: 917 UTC
  4. Click Register Intent
  5. Confirm the MetaMask transaction
  6. Show the success state — "Intent Registered!"

Visual cue: Point to the Intent Preview card showing the parsed conditions.


3b. Compliant Swap — Preview (20 seconds)

"Now let's simulate a swap that fits my intent. A 5 ETH swap during business hours should pass cleanly."

  1. Navigate to the Swap Simulator section (on Register page or /swap)
  2. Enter volume: 5 ETH
  3. Click Simulate
  4. Show the result: "All intents satisfied — swap routes normally" with a green check

Visual cue: Green badge "No Penalty" — the LP gets the base fee.


3c. Violating Swap — Preview (20 seconds)

"Now let's simulate a swap that violates my intent — say 100 ETH, which is over my max."

  1. Enter volume: 100 ETH
  2. Click Simulate
  3. Show the result: "1 of 3 intents violated" with orange warning
  4. Point to the penalty fee: +X.XX% applied
  5. The violating LP pays a premium; the LP gets compensated

Visual cue: Orange badge "Partial Penalty" — the LP earns extra for taking the risk.


3d. Toggle Live On-Chain Preview (20 seconds)

"If you're connected to the network, you can toggle 'Live' to query the deployed contract directly."

  1. Click Live toggle button
  2. Show the live on-chain query result: activeIntentCount from the contract
  3. Show previewSwap() returning violation data in real-time

Visual cue: Green "Live on-chain" banner with the number of active intents in the pool.


3e. Claim Rewards (15 seconds)

"The Circle USDC reward module streams rewards to active LPs proportionally. Let's check pending rewards."

  1. Navigate to /rewards
  2. Show the stats cards: Your USDC balance, Pending Rewards, Reward Pool
  3. Click Claim Rewards (if any pending)
  4. Alternatively, show Deposit USDC flow (approve → deposit → set rate)

Visual cue: Three-column card layout with real-time USDC figures.


3f. Cross-Chain Bridge (15 seconds)

"IntentLP integrates Across Protocol for cross-chain intent bridging. You can deactivate your intent here and forward it — with all conditions — to another chain."

  1. Navigate to /bridge
  2. Show the active intent is detected (green banner)
  3. Fill:
    • Destination: Arbitrum One (42161)
    • Input/Output USDC amounts
    • Recipient address (auto-filled)
  4. Click Bridge Intent
  5. Show confirmation dialog, then success state

Visual cue: Green "Active Intent Found" card, then submitted transaction card with Across Scan link.


4. Impact (30 seconds)

"IntentLP makes Uniswap v4 liquidity management proactive instead of reactive. LPs get conditional control, penalty compensation for toxic flow, streaming USDC rewards, and cross-chain portability — all in a single hook."

Key metrics:

  • 63 test cases passing (41 unit + 22 integration on Arbitrum Sepolia fork)
  • ~25K gas saved per swap via gas optimization (volume tracking moved to afterSwap)
  • 3 sponsor integrations live: Chainlink (price feed), Circle (USDC rewards), Across (cross-chain bridge)
  • Claimed prizes: Chainlink Dynamic Fee Hooks, Circle Streaming Rewards, Across Cross-Chain CoW

Roadmap:

  • EigenLayer AVS for shared intent state across chains (LVR reduction)
  • Stylus rewrite for gas-critical paths
  • Fhenix FHE for private intent parameters

"Thank you. Questions?"


Appendix: Backup Plan

If the Arbitrum Sepolia deployment is unavailable, run:

# Terminal 1: Start local anvil fork
anvil --fork-url $ARBITRUM_SEPOLIA_RPC_URL

# Terminal 2: Deploy to local fork
forge script script/Deploy.s.sol --rpc-url http://localhost:8545 --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

# Terminal 3: Start frontend locally
cd frontend && npm run dev

Then use http://localhost:5173 with MetaMask pointing to http://localhost:8545 (chain ID 31337).


Appendix: Sponsor Talking Points

Sponsor Talking Point
Chainlink maxSlippageBps enforced via AggregatorV3Interface in _countViolations() — no external data, no trust assumptions
Circle USDC reward pool with per-second accrual, depositRewards()/claimRewards()/setRewardRate() — streaming yield for active LPs
Across ERC-7683 bridgeIntent() pulls USDC, calls Across open(), encodes intent params into the message for re-registration on destination
Uniswap beforeSwap hook with zero external calls in hot path (gas efficient), full PoolKey-based intent isolation