HYPOTHETICAL MODELS
Compare liquidity scenarios
Change a price, range or fee assumption. Compare the outcome with holding.
FULL-RANGE LIQUIDITY
Provide liquidity, or hold?
Compare a liquidity provider (LP) position with holding the same starting ETH and USDC.
Try a quick change
Your assumptions
Start with equal dollar amounts of ETH and USDC.
This lab is independent of your saved swap sandbox.
Enter a valid scenario to compare outcomes.
Check the highlighted input message. Results and sharing will return when all inputs are valid.
Explore the price range
Assets if you hold
Assets from liquidity
LP assets before assumed fee income: . Arbitrage trades rebalance the pool to your future ETH price, changing the token amounts you can withdraw.
Compare outcomes
Select a price to explore it. Investment and assumed fee income stay the same in every row.
Swipe or scroll sideways to see every column.
| Future ETH price | Holding | LP + fees | LP minus holding | IL before fees |
|---|
Values are hypothetical outcomes, not probabilities or recommendations.
How this model works
This Uniswap v2-style full-range model starts with 50% ETH and 50% USDC by dollar value. USDC stays at $1. Ideal, frictionless arbitrage brings the pool price to the future market price.
For an initial investment V and price ratio r = future price / starting price, holding is worth V × (1 + r) / 2. The LP assets are worth V × √r before fee income. Initial ETH = V / (2 × starting price); after rebalancing, LP ETH = initial ETH / √r and LP USDC = initial USDC × √r.
Fee income is your assumed total for this position, added as separate USD cash at the end. It is held fixed across the comparison, does not compound, and is not inferred from market prices or trading volume. The model excludes gas, incentives, depegging, and concentrated liquidity. It shows endpoints, not a trading path.
Passiko calculation revision: cp50-v1. The v1 identifies this model revision, not Uniswap v1. Shared links and CSV exports include the assumptions and model version so another person can reproduce the calculation.
CONCENTRATED LIQUIDITY
Test a liquidity price range
Choose price bounds and compare the position’s tokens and value at different ETH prices.
Edit budget & range
Your setup
The starting price and range determine the tokens required for your budget.
Check the range inputs
Use positive prices, with the upper boundary above the lower one. Your results will return as soon as the setup is valid.
Use the price slider, the price checkpoints, or the future price input. You can also select a price on the chart.
Holding keeps your range's starting tokens. The full-range LP uses the same budget and starts 50/50, so its starting mix may differ.
Your range now holds
By asset value
Values across future ETH prices
Range status describes the endpoint. Assumed fees may include earlier time inside the range; they are held fixed across this comparison.
Compare prices at the edges
Select a row to explore it. Each row keeps the same range, investment and separate fee assumptions.
Swipe or scroll sideways to see every column.
| Future ETH price | Range status | Hold starting mix | V2-style 50/50 LP | Your range LP | Range LP minus holding |
|---|
How this range model works
Prices are USD per ETH, with USDC fixed at $1. The starting range determines your token mix; concentrated positions do not always begin 50/50. Holding keeps those exact starting tokens. The full-range LP invests the same amount in a separate 50/50 position.
For liquidity L and lower/upper prices a and b, clamp the current price p to the range. The position holds ETH = L × (1/√p − 1/√b) and USDC = L × (√p − √a). L is sized so those assets equal your investment at the starting price. Below a the position is all ETH; above b it is all USDC.
This simplified Uniswap v3-style model allows any valid price bounds; real v3 positions use tick-aligned bounds. It does not apply Uniswap tick spacing or on-chain rounding, and does not estimate fees, gas, incentives or trading paths. Each fee input is assumed total USD cash, added separately without compounding.
Passiko calculation revision: cl-range-v1. The v1 identifies this model revision, not Uniswap v1. Shared links, CSV exports and result cards include the range and assumptions. Read the Uniswap liquidity math →
Choose an example1 · Foundations → 2 · Comparisons → 3 · Ranges → 4 · Applied cases
The examples add one idea at a time, from an unchanged-price baseline to recorded positions. Follow their order or open the stage you need. Each setup can be edited in the lab.
Want the mechanics explained along the way? Start with the first lesson →
Saved experiments 0 saved
Save your setup and notes. Reopen it to try a variation, or compare two or three saved experiments.
Stored in this browser. Export a backup to keep it elsewhere.
No saved experiments yet
Set up either liquidity lab and choose “Save experiment”.
No experiments match this search.
Select two or three experiments to compare.
Compare saved experiments
Each holding benchmark keeps that experiment’s own starting tokens. Fees are assumed USD cash; gas, incentives and trading paths are excluded. Values use USDC = $1.
POOL SNAPSHOTS
Import a Uniswap v2 pool snapshot
Capture the Ethereum Uniswap v2 WETH/USDC pool at a finalized block, or reopen a saved snapshot.
Fetching contacts PublicNode, with dRPC as a backup for public chain data. Saved files open locally. WETH is wrapped ETH; the calculator assumes USDC = $1.
Inspect the snapshot
- Pool contract
- —
- Block hash
- —
- Token 0 · USDC
- —
- Token 1 · WETH
- —
- USDC reserve · base units
- —
- WETH reserve · base units
- —
- Captured at
- —
- Recorded provider
- —
The recorded 1 WETH quote is checked using exact integer arithmetic against the Uniswap v2 router at the same block. It describes that snapshot, not an executable live trade. Fee income in the lab remains your own assumption.
POSITION SNAPSHOTS
Import a Uniswap v3 position
Read a Uniswap v3 WETH/USDC position on Ethereum. See its range, token mix and fee accounting at a recorded block, then test future-price assumptions in the range lab.
Refresh or open another position
Find the NFT ID in your Uniswap position or its NFT page. This release supports WETH/USDC positions; no wallet connection is needed.
Fetching contacts PublicNode, with dRPC as a backup for public Ethereum data. Position files open locally. Values assume USDC = $1.
No position snapshot loaded.
Enter an NFT ID or choose a recorded example. Your snapshot keeps the exact ticks, token amounts and block. Loading it leaves your experiments unchanged until you apply it.
Fees and tokens owed Fee growth was not recorded in this file.
This older snapshot includes principal and recorded owed balances, but lacks the growth data needed to calculate new fees. Fetch the position again for a new capture, or open the applied fee example →.
This position exceeds the manager’s fee-accounting capacity. The exact uint128 contract values remain in the inspector and exported file; normal dollar totals are not shown.
- Newly accrued fees
- Recorded tokens owed
- Estimated collectable tokens
Newly accrued fees cover the growth since the position’s last accounting update, up to this block. The update’s date is not reconstructed. Collection can return slightly less because of rounding in the pool’s accounting.
Principal + estimated collectable value
Values use this block’s pool price and USDC = $1. Displayed amounts are rounded; the inspector and exported file retain exact token base units. This is a balance breakdown, not historical profit or a fee forecast.
Work through this snapshot
At an unchanged price and ignoring costs, removing $1,000 of principal without collecting moves about $1,000 from active liquidity into owed tokens. That bookkeeping change does not increase total assets or create $1,000 of fee income.
Inspect the fee calculation
Growth differences wrap modulo 2^256. The contract tick chooses growth below and above the range, with the lower raw tick included and the upper raw tick excluded. Credits and owed totals follow the manager’s uint128 accounting; capacity overflow is flagged.
Uniswap’s fee-growth explanation ↗ Position manager accounting ↗
Inspect the position snapshot
- Position manager
- —
- Pool contract
- —
- Block hash
- —
- Position ticks · raw order
- —
- Pool tick
- —
- Tick spacing
- —
- Liquidity · integer
- —
- Pool sqrtPriceX96
- —
- USDC principal · base units
- —
- WETH principal · base units
- —
- Recorded USDC owed
- —
- Recorded WETH owed
- —
- Captured at
- —
- Recorded provider
- —
Fee accounting inputs
- USDC global growth · Q128
- —
- WETH global growth · Q128
- —
- USDC lower outside growth
- —
- WETH lower outside growth
- —
- USDC upper outside growth
- —
- WETH upper outside growth
- —
- USDC last inside growth
- —
- WETH last inside growth
- —
- USDC current inside growth
- —
- WETH current inside growth
- —
- Lower boundary liquidity
- —
- Upper boundary liquidity
- —
- USDC new fees · base units
- —
- WETH new fees · base units
- —
- USDC collectable estimate · base units
- —
- WETH collectable estimate · base units
- —
- Manager accounting capacity
- —
Principal uses integer Q96 prices and rounds down to token base units. Status uses the contract tick: lower tick inclusive, upper tick exclusive. Raw ticks quote WETH per USDC, so the displayed USD/ETH bounds run in the opposite order.
Recorded tokens owed may include withdrawn principal and do not include fee growth since the last accounting update. New snapshots also record global and boundary fee growth to estimate newly accrued fees and collectable tokens. These amounts do not reconstruct historical returns.
All experiments use virtual funds. Pool imports read public blockchain data. No wallet connection or transactions. Your sandbox is saved in this browser. Reset clears the saved session.
UNISWAP V2-STYLE · VIRTUAL POOL
Swap sandbox
Explore pool mechanics with your own virtual balances.
Simulate a swap
Trade against a constant-product pool.
Slippage tolerance sets the minimum output you accept. Price impact is already included in the quote. This sandbox executes immediately and does not simulate intervening trades.
Add liquidity to the virtual pool
Deposit both tokens at the pool’s current ratio.
Withdraw your liquidity
Withdraw all your LP tokens for both assets.
In this sandbox, all swap fees stay in the reserves. Real pools may allocate a protocol share. LP tokens represent proportional ownership; this sandbox omits protocol fee minting and on-chain rounding.
UNDER THE HOOD
Reserves and the swap curve
Swapping ETH for USDC increases the ETH reserve and reduces the USDC reserve. Larger trades receive less USDC per ETH. The chart shows the curve for the current reserves; fees and deposits can change k.
Try this: compare swapping 1 ETH with 5 ETH. Watch the price impact grow as your trade uses more of the pool.
WHAT IF?
Explore impermanent loss
When ETH’s market price changes, a rebalanced pool can be worth less than simply holding the original tokens.
An independent scenario assuming arbitrage, equal starting token values, and no fees. 1× means an unchanged price. It does not change your sandbox pool.
YOUR EXPERIMENTS
Activity
No actions yet.
Make a swap or add some liquidity.
UNISWAP V3 · VERIFIED HISTORICAL CASE
Choose a recorded case
Follow principal, earned fee tokens and holding through an unchanged position’s recorded period.
Dollar values are rounded separately; the difference uses unrounded values.
Since the previous checkpoint
Tokens and verification
- Recorded window · UTC
- Position principal
- Period fee tokens
- Holding basket
- Selected block
- Block hash
- Period fees · exact integers
- Interval fees · exact integers
- Interval time · exact seconds
- Range-time counter · uint32
The state and event providers agreed on the endpoint block hashes. Position-update event queries cover the complete period. Read-only collection simulations independently check period fees within one base unit per token. Interval credits are differences of cumulative period credits, preserving their integer rounding.
How to read this replay
Range status is a checkpoint fact. An outside sample shows that the position was outside at that block. A return sample is the first recorded in-range checkpoint after an outside sample; it does not identify the exact crossing time.
Elapsed time and fee income measure different things. The range-time counter measures active seconds. Fee growth measures tokens earned through swaps. They include activity between samples; swaps within one block can earn fees without adding an active second.
Earned tokens and their dollar value differ. Each interval adds the change in cumulative fee credits. Earlier fee tokens remain held, so their dollar value can move with ETH even while no new fees accrue. Fees are not compounded.
Holding uses the starting principal tokens. Previously accrued fees and recorded owed balances are excluded from both strategies. Dollar comparisons use each selected pool price and USDC = $1; gas and incentives are excluded. This is a recorded period, not lifetime PnL or a forecast.