What providing liquidity is, what you earn, what you risk, and how to do it in Tidepool from the first click to the last.
Every swap on a decentralised exchange trades against a pool of two tokens that other people put there. Those people are liquidity providers. The trader pays a fee on every swap, and that fee goes to the providers in proportion to how much of the traded liquidity was theirs.
You are not lending and you are not betting on a direction. You are holding both tokens of a pair and being paid for letting others trade against them. While the price moves inside your range, the pool keeps selling you the token that falls and buying the token that rises, and you collect a fee each time.
Old pools spread your money across every price from zero to infinity. Almost none of it sat near the price where trading actually happens, so almost none of it earned. Concentrated liquidity fixed that: you choose a price range, and all of your money works inside it.
Narrow it and the same money earns a bigger share of every swap. Narrow it too far and the price walks out, your position stops trading, and it earns nothing until the price comes back.
Where the price sits inside your range decides what you are holding:
Two forces pull in opposite directions.
Fees. Every swap through your range pays you. A busy pool with a high fee and a narrow range can pay a lot in a day. Tidepool ranks pools by 24h fee to TVL, which is the fee the pool paid over the money sitting in it. Ten percent means the pool paid a tenth of its own size in fees in a day.
The price moving. Fees are the income. Price swings are the cost, and the next section explains why.
Inside your range the pool trades against you on every move. When the token falls, the pool uses your SOL to buy more of it. When the token rises, the pool sells your token for SOL. So you always hold more of what went down and less of what went up.
Impermanent loss is the name for that cost: how much less your position is worth than if you had simply held the two tokens you put in. It is impermanent because it shrinks back to zero if the price returns to where you entered. It becomes permanent when you close the position while the price is away.
A narrow range makes this stronger in both directions. It earns more fees per dollar, and it loses more to the same move. A 10% fall costs a range of plus and minus 10% about 2.6% against holding. A position over the full price range (the old way) loses about 0.1% on the same move.
A worked example, from the chart above. You put in $100, half SOL and half token, in a range of plus and minus 10%. The token falls 20% and leaves your range. You now hold only the token, worth about $82. Simply holding would have left you at $90, so the impermanent loss is about $8. With $6 of fees you are at $88: fees paid for most of the move, but not all of it. If the token had moved up and down inside the range instead, the same $6 would have been nearly all profit.
So the question is never only "did I earn fees". It is "did fees beat the impermanent loss". Busy pools with a high fee to TVL, a range that fits how much the price really moves, and closing or rebalancing before a trend runs far are how LPs win that race.



Fees do not compound by themselves. They sit next to your position until you take them, on Meteora and on Uniswap alike. Taking them costs a transaction, so there is a point below which it is not worth doing yet.
Claimed fees are yours to keep, redeploy, or compound by hand into the same position.
You can arm an automatic exit, either when you open the position or later from the card. Set the price, choose what to receive, and Tidepool closes the position and swaps it into that token when the price gets there, whether or not the app is open.
It works through a one-time approval. The contract can remove your liquidity and pay you, and nothing else. Tidepool never holds your keys or your funds, and you can cancel or revoke at any time. An exit is a best effort, not a promise: it can run late or at a worse price than the trigger.
A bot is a Tidepool profile that posts position calls from your own program, such as a Telegram bot. People follow it like a person and copy a call in one tap. When they claim fees from a copied position, 2% of those fees go to the bot's wallet, inside the same transaction. Make a bot in the Feed, tab Bots, button Your bots. You get its key once.
POST https://tidepool.ag/api/bot/call
Authorization: Bearer tpb_...
{"chain": "solana", "pool": "<pool address>", "lowerPct": -10, "upperPct": 15, "thesis": "Why this range"}
Instead of pool you can give token (the token address): Tidepool then uses the pool with the most liquidity for that token on that chain, or against quote when you give one (a symbol such as SOL or USDC, or an address), and the answer names the pool it chose. The range is lowerPct and upperPct around the price now, or lower and upper as pool prices (token1 per token0), or "full": true. Optional: shape (spot, curve, bidask), stopLoss, takeProfit. Chains: solana, base, robinhood, arc, hyperevm. The answer holds openUrl: a link that opens the deposit step with that pool and range, ready for your message. GET /api/bot/me shows the bot, its followers and the creator fees its wallets received. GET /api/bot/calls lists its last calls, and GET /api/bot/calls/<id> one call, each with the number of copies. POST /api/bot/calls/<id>/close (optional reason) marks a call closed: it stays visible and can no longer be copied. DELETE /api/bot/calls/<id> removes a call that nobody copied. GET /api/bot/calls/<id>/copies lists every position opened from a call: its deposit, its value now or at the close, the fees it claimed, the creator share it paid the bot, its result, and open or closed. Copies carry an anonymous id, never a wallet address. The numbers update every 15 minutes. Absolute lower and upper are human-readable prices of token1 in token0, in the pool's own order: token Y per token X on Meteora. At most 20 calls an hour.
Structured calls. Every call shows the same headings. Optional text fields, each at most 280 characters: setup, why, reviewWhen, risk, disclosure; category (at most 40, shown as a badge, for example "Baseline range · unconfirmed") and funding (at most 40, for example "two-sided"). thesis (at most 1,000 characters, plain text) sits behind "Read full thesis". Text over a limit is refused with an error that names the field; it is never shortened. A call is the bot's own assessment; Tidepool does not check it.
Plain-text formatting. Send plain text, never HTML or Markdown: it is always shown as text. In thesis, a blank line starts a new paragraph, other line breaks stay, and a line written in capitals (at most 48 characters, for example WHY or RANGE · EST. MARKET CAP) is shown as a bold heading. marketCap ({"bottom": 587800, "top": 854900, "at": 1790500000000}, USD) is your own estimate of the range as market cap at call time: it is shown labelled as such and never used to execute. The Price / USD / MCap switch shows the range live in each unit.
Retries, tests and previews. clientRef (1 to 64 characters, letters, digits and _ . : -) makes a call idempotent: the same reference returns the call already made, with duplicate: true, unchanged, even when the new body differs (the first call wins). dryRun: true checks everything and returns the call as it would be saved, without saving it; it echoes clientRef with clientRefReserved: false and never uses it up. A dry run with a reference that is already used returns that saved call with dryRun: true and duplicate: true. test: true saves a call that only you see (at its own link, and under Tests on the bot's page), outside the feeds; nobody can copy it unless you add allowCopy: true.
What comes back. lower and upper as submitted, human-readable token1 per token0. On Meteora DLMM also details.snapped: the whole bins the deposit takes (lower, upper, bins, binStep); Uniswap snaps to the tick spacing when the position is opened. closed is a Unix time in milliseconds (or null) and closeReason the reason given. stopLoss and takeProfit are information for readers only: Tidepool does not execute them. Closing a call stops new copies and never closes anyone's position.
3% of every claim (1% on Robinhood Chain), paid in SOL or ETH value inside the claim, close or zap transaction. No subscription, no fee on swaps, no fee on deposits.
Swaps go through Jupiter on Solana and the Uniswap routers on EVM chains. Bridges go through Relay. Tidepool never holds your funds in between.
Connecting only shares your public wallet address. That lets Tidepool read your positions and balances. It gives no permission to move anything. After that, your wallet asks you every time:
Tidepool never asks for your seed phrase or private key, and it never holds your funds. Your positions stay in your own wallet.