---
title: "Onchain liquidity vs off-ramp liquidity: why a deep DEX pool doesn't mean a deep BRL payout"
seoTitle: "Onchain liquidity vs off-ramp liquidity, explained"
description: "Onchain liquidity is tokens in pools. Off-ramp liquidity is local currency a provider can pay into bank accounts. Why one doesn't predict the other."
date: "2026-09-28"
updated: "2026-09-28"
category: "stablecoins"
author: "BlindPay Team"
faq:
  - q: "What is the difference between onchain liquidity and off-ramp liquidity?"
    a: "Onchain liquidity is how many tokens sit in pools and order books on a blockchain, which sets how much you can swap before the price moves. Off-ramp liquidity is how much local currency a provider can pay into bank accounts at a quoted rate. The first ends with tokens in a wallet. The second ends with money in a bank account."
  - q: "Does a deep stablecoin pool mean I can off-ramp large amounts?"
    a: "No. A deep USDC/USDT pool only means you can swap between two dollar tokens cheaply. Paying reais or pesos into a bank account needs someone holding that currency in bank accounts, plus access to a rail like Pix or SPEI. Test off-ramp depth with quotes at several sizes on your corridor, not with pool sizes."
  - q: "What is price impact in a DEX swap?"
    a: "Price impact is how much your own trade moves the price in a pool. A pool prices swaps from the balances it holds, so a large swap shifts the balance and fills at a worse average rate. Uniswap's docs put it simply: the greater the liquidity available at a given price, the lower the price impact for a given swap size."
  - q: "Is slippage the same on a DEX and on an off-ramp?"
    a: "The word is shared, the meaning differs slightly. On a DEX, slippage is the price change that can happen while your transaction is pending, and you cap it with a slippage tolerance. On an off-ramp, slippage is the gap between the rate you were shown and the rate that settled. A binding quote executed inside its window has none."
  - q: "Which blockchain should I use to off-ramp stablecoins?"
    a: "Pick the network for fees, confirmation time, and which tokens your provider accepts on it. The chain doesn't change how much local currency the provider holds. At BlindPay, a payout quote takes a network and token, and the supported chains reference lists every valid pair, such as USDC on Base or USDT on Tron."
---

Onchain liquidity is how much you can swap between tokens on a blockchain before the price moves. Off-ramp liquidity is how much local currency a provider can pay into bank accounts, at a quoted rate, over rails like Pix or SPEI. They're different pools of money, so a deep USDC pool says nothing about a deep BRL payout.

The confusion is easy to make. Both get called "stablecoin liquidity," both have spreads and slippage, and both show up in the same payment. But one lives in smart contracts and the other lives in bank accounts. This guide separates them, does the pool math on a $50,000 swap, and shows which one to check for your use case.

**Key takeaways**

- Onchain liquidity is tokens in pools and order books. Its output is tokens in a wallet.
- Off-ramp liquidity is local currency in bank accounts, plus the ability to bind a quote and deliver over a rail.
- A deep USDC/USDT pool moves you between two dollar tokens. It doesn't put reais in a bank.
- Pool depth shows up as price impact. Off-ramp depth shows up as the rate on quotes at several sizes.
- Choose the network for fees and finality. Choose the off-ramp for depth and delivered amount.

## What is onchain liquidity?

Onchain liquidity is the token balance available to trade against on a blockchain, mostly in automated market maker pools and exchange order books. A pool holds two or more tokens and prices each swap from the balances it holds.

Uniswap, the best-known example, started as "an automated liquidity protocol based on a 'constant product formula'," per the [Uniswap v2 whitepaper](https://app.uniswap.org/whitepaper.pdf). The pool keeps the product of its two balances constant (x times y), so every token you take out costs more than the last one.

That's what price impact means. Uniswap's [swaps documentation](https://developers.uniswap.org/docs/get-started/concepts/traders/swaps) puts it plainly: "The greater the liquidity available at a given price, the lower the price impact for a given swap size." It defines slippage separately, as "alterations to a given price that could occur while a submitted transaction is pending." You cap it with a slippage tolerance, and if the price moves past it, the swap fails.

Pools built for pegged assets go further. The [StableSwap paper](https://classic.curve.finance/files/stableswap-paper.pdf) behind Curve describes "a fully autonomous market-maker for stablecoins with very minimal price slippage." For USDC to USDT, onchain liquidity is very good. The [market maker explainer](/resources/more/what-is-a-market-maker-stablecoin-payments) covers how these pools compare with human market makers.

## What is off-ramp liquidity?

Off-ramp liquidity is a provider's ability to take your stablecoins and pay local currency into a bank account, at a rate it committed to, at the size you need. The [glossary for this cluster](/resources/more/onramp-offramp-liquidity-glossary) defines it as converting at size, at a quoted rate, without the price moving against you.

Three things have to exist for it to work:

1. **Local currency in bank accounts.** Reais in Brazil, pesos in Mexico, sourced from the provider's own inventory, market makers, or banking partners.
2. **A binding quote.** A price the provider will honor for a window, so the amount you see is the amount that lands.
3. **Rail access.** A connection to Pix, SPEI, ACH, SEPA, or SWIFT (POBO/COBO) that delivers the money.

None of those are onchain. You can read a pool's reserves from any block explorer. You can't read a provider's reais. You infer them from how its quotes behave at size, which is what [on/off-ramp liquidity with live quotes](/resources/more/on-off-ramp-liquidity-live-quotes) walks through.

## How do onchain and off-ramp liquidity compare?

Side by side, they share vocabulary and little else.

| | Onchain liquidity | Off-ramp liquidity |
| --- | --- | --- |
| What's in the pool | Tokens (USDC, USDT, other tokens) | Local currency in bank accounts |
| Where it lives | Smart contracts and exchange books | Bank accounts at the provider or its partners |
| How the price is set | A formula or an order book, per swap | A quote from the provider, binding for a window |
| How you see depth | Read the pool reserves | Request quotes at several sizes |
| What slippage means | Price change while your transaction is pending | Gap between shown rate and settled rate |
| What you end up with | Tokens in a wallet | Money in a bank account |
| Hours | Every block, all week | The destination rail's hours (Pix and SPEI run 24/7) |
| Identity checks | Usually none at the pool | KYC or KYB before the first payout |

The bottom row explains a lot. A pool will swap for anyone. An off-ramp has to know who is sending and who is receiving, because it is moving money into the banking system. [Types of crypto off-ramps](/resources/more/types-of-crypto-off-ramps) covers the different ways that gets done.

## Why doesn't a deep USDC pool mean a deep BRL payout?

Because the reais aren't in the pool. A USDC/USDT pool, however large, swaps one dollar token for another. Getting reais into a Brazilian bank account needs somebody who holds reais in Brazilian bank accounts and will sell them to you.

Some pools hold tokens pegged to local currencies. Swapping into one still leaves you holding a token, not a bank balance. Turning that token into reais is a second off-ramp, with its own spread and its own depth. The [direct vs indirect exchange guide](/resources/more/direct-vs-indirect-stablecoin-exchange) explains why each extra hop adds cost.

**Illustrative example.** A constant-product pool holds 2,000,000 USDC and 10,800,000 units of a hypothetical BRL-pegged token, a price of 5.40. You swap 50,000 USDC in, ignoring pool fees:

- Tokens out = 10,800,000 - (2,000,000 x 10,800,000) / 2,050,000
- = 10,800,000 - 10,536,585.37 = 263,414.63 tokens
- Effective rate: 263,414.63 / 50,000 = 5.2683
- Price impact: (5.40 - 5.2683) / 5.40 = about 2.44%, or 244 bps

A $50,000 swap moved the price 244 bps in a $4 million pool. And you still hold tokens. An off-ramp with real depth quotes $50,000 at close to the same rate as $500, because the reais come from inventory sized for payouts, not from a pool sized for swaps. You'd confirm that with quotes at both sizes, captured in the same minute.

## Where do the two meet in an off-ramp?

At one moment: when your stablecoins move onchain to the provider. Everything before that is onchain. Everything after is bank money.

1. **You get a quote.** At BlindPay, a [payout quote](/docs/payout-quotes) takes the bank account, the amount, the `network`, and the `token`, and returns the rate, fees, and `receiver_amount`, valid for 5 minutes by default.
2. **You authorize the exact amount.** On EVM chains, you `approve` the quoted amount using the `contract` payload in the quote ([payout with EVM](/docs/payout-evm)). Stellar and Solana have their own authorization flows.
3. **The stablecoins move onchain.** Network fees and confirmation time depend on the chain. [What happens onchain in a stablecoin payment](/resources/more/what-happens-on-chain-in-a-stablecoin-payment) walks through this leg.
4. **The provider pays out locally.** The reais or pesos come from off-ramp liquidity and land over the rail.

BlindPay settles stablecoins on Ethereum, Polygon, Base, Arbitrum, Tempo, Arc, Stellar, Solana, and Tron, with USDC or USDT depending on the network. The [supported chains reference](/docs/kb/supported-chains) lists every valid pair. Payouts funded from a wallet you control are non-custodial: you authorize the exact amount and BlindPay executes that single transaction.

The chain changes step 3. It doesn't change step 4. That's the whole point of keeping the two liquidity types apart.

## Which one should you check before choosing a route?

The one that matches where the money needs to end up.

- **Ending in tokens** (treasury rebalancing between USDC and USDT, moving funds between wallets): check onchain liquidity. Look at pool depth, expected price impact, and set a slippage tolerance.
- **Ending in a bank account** (supplier payments, payroll, marketplace payouts): check off-ramp liquidity. Request quotes at several sizes, confirm they're binding, and compare the delivered amount.
- **Both** (you hold USDT on Tron but your recipient needs reais): check the network for fees and finality, and the off-ramp for depth. [The best network to off-ramp stablecoins](/resources/more/best-network-to-off-ramp-stablecoins) compares chains on the first part.

Decision rule: never use a pool size to judge an off-ramp. A pool tells you about tokens. A quote at size tells you about the payout.

## What to do next

Pick your largest regular payout, then request [payout quotes](/docs/payout-quotes) at that size and at a tenth of it, on the network you already hold funds on. If the rate barely moves, the off-ramp has the depth you need, whatever the pools look like.
