Skip to main content
With Concurrent Liquidity Programs (CLPs) users can execute onchain trades against offchain liquidity. Instead of executing a trade atomically against onchain liquidity, users submit a limit-priced intent onchain. Liquidity providers fill that intent asynchronously through follow-up transactions. CLPs separate trade intent from trade fulfillment.

Why CLPs Exist

On Solana, users can only trade directly against liquidity that exists onchain. CLPs make offchain liquidity accessible without requiring users to give up self-custody or move funds offchain. Users keep SPL tokens in their wallet while liquidity providers act on onchain intent. This expands available liquidity beyond what atomic trades alone can support. For builders, this makes it possible to integrate professional liquidity providers without custodial risk.

CLPs and Prediction Markets

DFlow uses CLPs to execute prediction market trades, where outcome tokens are filled asynchronously by liquidity providers after a user submits limit-priced intent onchain. This execution model makes it possible to trade prediction market outcomes using offchain liquidity while keeping positions tokenized on Solana.

CLP Trade Lifecycle

A typical CLP trade follows this flow:
  1. A user submits limit-priced trade intent
  2. Liquidity providers observe the open intent
  3. Fill transactions execute over time
  4. The user’s position increases, decreases, or closes
The trade completes when the intent is fully satisfied.

Liquidity Providers

Liquidity providers operate offchain. They monitor onchain CLP state and submit fill transactions when pricing conditions are favorable. They never custody user funds.

Takers

Takers are users who initiate CLP trades. They write trade intent onchain and receive fills asynchronously as liquidity providers act on that intent.

CLP Execution Model

CLP trades execute across multiple transactions. The initial transaction expresses trade intent. One or more subsequent transactions perform fills. Because execution is spread over time, CLP trades are async trades.

Increasing and Reducing Positions

To increase a position, a user writes a limit price and trade side onchain. A liquidity provider fills the position at that price or better by minting SPL tokens that represent the position. To decrease a position, a user writes a limit price and trade side. A liquidity provider transfers value to the user equivalent to the position reduced at the limit price or better.