Development of a JIT Liquidity System
JIT liquidity is an MEV strategy that Uniswap Labs calls "honest MEV" as opposed to sandwich attacks. The mechanics: in the same block as a large swap, a provider adds concentrated liquidity around the current price, earns fees from that swap, and removes the liquidity in the same block — three on-chain operations plus fees in one transaction. According to our backtests, the JIT strategy generates 3–5 times more fees than passive liquidity provision in the same range. On Ethereum mainnet at 30 gwei gas and a pool fee of 0.3%, the average income from a single JIT cycle on ETH/USDC is about $50–200, with gas costs of $10–30. On L2, like Arbitrum, gas is 10–20 times cheaper, making JIT profitable for swaps from $100.
Our team specializes in turnkey JIT systems: from mempool analysis to deployment of gas-optimized contracts. Over our work, we have completed more than 20 projects for clients from different jurisdictions.
How JIT Intercepts Fees
Concentrated liquidity and fee share. In Uniswap v3, swap fees are distributed proportionally to liquidity in the active tick range. If a JIT position adds $1M liquidity in a narrow range at the moment of the swap, while all other LPs have $500k in that same range, JIT receives 66.7% of the swap fee.
The strategy is profitable when:
- The swap is large enough (otherwise fees don't cover gas for three operations).
- The tick range is narrow enough (larger share, less temporary loss while holding).
- The position is held for one block (zero impermanent loss risk).
Minimum swap size for break-even depends on network and gas: on Ethereum mainnet at 0.3% fee and average gas price, a swap in the thousands of dollars is needed; on L2 (Arbitrum), a few hundred.
Why JIT Only Works with Bundle Submission
JIT requires seeing the swap in the mempool before it is included in a block. Private mempool via Flashbots MEV-Share or public mempool via WebSocket — between transaction detection and inclusion of your bundle — seconds.
Optimal infrastructure:
- Own node with MEV-Geth or reth with mempool websocket.
- Connection to Flashbots MEV-Share to view hints about pending swaps.
- Bundle submission via
eth_sendBundle— atomic inclusion of all three transactions in one block.
Without bundle submission, JIT does not work: if addLiquidity and the swap end up in different blocks, the strategy is pointless and unprofitable.
JIT System Architecture
Off-chain Components
Mempool scanner: WebSocket subscription to node, filtering Uniswap v3 swaps by exactInputSingle/exactInput selector. Decode calldata to determine pool, size, slippage.
Profitability calculator: for each candidate computes:
- Expected fee =
swapAmount * feeTier. - Fee share =
depositAmount / (poolLiquidity + depositAmount). - Gas cost of bundle =
(addLiq + removeLiq + collect) * gasPrice. - Net profit = (fee * share) - gas.
If net profit exceeds threshold (a few tens of dollars), bundle is sent. Bundle builder: creates three transactions for Flashbots bundle:
-
tx1:mintposition in the required tick range. -
tx2: original swap (backrun). -
tx3:burn+collectposition.
Smart Contract for JIT Operations
The contract wraps liquidity operations and minimizes gas:
function executeJIT( address pool, int24 tickLower, int24 tickUpper, uint128 liquidity, bytes calldata swapData ) external onlyOperator { // tx1: add liquidity INonfungiblePositionManager(NPM).mint(MintParams({...})); // tx2: forward swap (in bundle via Flashbots — separate tx) // tx3: remove liquidity + collect INonfungiblePositionManager(NPM).decreaseLiquidity(...); INonfungiblePositionManager(NPM).collect(...); } Important: the contract must have sufficient balance of both pool tokens to add liquidity. Balance management is a critical operational aspect.
Tick Range Selection
A narrow range maximizes fee share but increases risk: if the swap moves price outside the range, the JIT position becomes inactive. For a swap without significant price impact (<0.5%), a range of ±0.3% from current price is sufficient. For large swaps with 1–2% price impact, the range should be expanded to ±2%.
| Swap Type | Price Impact | Recommended Range | Buffer |
|---|---|---|---|
| Small | <0.5% | ±0.3% | 20 ticks |
| Medium | 0.5–1% | ±1% | 30 ticks |
| Large | 1–2% | ±2% | 40 ticks |
Risks and Limitations
Revert risk of bundle. If the original swap reverts (e.g., due to trader's slippage protection), the entire bundle reverts. Gas for addLiquidity is lost. Mitigation: only include swaps with loose slippage tolerance (>1%).
Competition with other JIT bots. On highly liquid pairs (ETH/USDC), dozens of bots compete for the same swaps. Gas wars via priority fee can destroy profit. A more profitable strategy is on mid-cap pairs with low competition.
Uniswap v4 and JIT. With the advent of hooks, pools may introduce a beforeAddLiquidity hook with a minimum holding time — a direct countermeasure against JIT. Several pools are already testing such mechanisms.
Process and Timeline
| Stage | Content | Duration |
|---|---|---|
| Analytics | Identify target pools, networks, competitive landscape | 1 day |
| Off-chain dev | Mempool scanner, profitability calculator, bundle builder | 4–5 days |
| On-chain dev | JIT executor, access control, gas optimization | 2–3 days |
| Infrastructure | Node (reth/geth), MEV-Share, monitoring | 2–3 days |
| Testing | Simulation on mainnet fork, back-testing | 2–3 days |
Total: 1–2 weeks to launch. Cost is calculated after specifying target pools and networks. Contact us for an individual estimate.
What's Included
- Documentation: architecture diagram, configuration description, launch instructions.
- Access: repository with code, deployment docs, API keys (if required).
- Training: system walkthrough, knowledge transfer to your team.
- Support: one week of post-release monitoring and critical bug fixes.
Our engineers have years of experience in blockchain development and the DeFi market. We guarantee transparent support at all stages. Schedule a consultation to learn how JIT can increase your returns on Uniswap v3.







