Whitepaper · technical docs
How dotpi works.
The fee buys the pool. Everything below is the mechanism, the parameters, and the parts that can go wrong.
Overview
Most protocols pay outside suppliers to provide liquidity. Those payments are rent: when they stop, the liquidity leaves with them. dotpi holds part of every trading fee back and uses it to buy both sides of a pair, placed in a concentrated range the treasury keeps.
Positions earn fees of their own. Some of that income buys the next position. The treasury compounds, and every field that matters is read off the chain and published, including the ones that count against it.
- Pool fee
- 0.30%
- Fee kept
- 40%
- Paid out
- 60%
- Range fees
- 100%
Charged on every trade through the pool
Share held back to buy owned liquidity
Share that still leaves as it always did
Owned-range income buys the next position
The problem
Rented liquidity works while the emissions keep arriving. The pool is full, spreads are tight, and volume looks healthy. The cost never becomes an asset. When the payments thin out, suppliers leave, and the protocol has nothing left to show for what it spent.
The pool itself is fine. It is the cost of keeping it full that never goes away. Protocol-owned liquidity answers that by turning part of the fee into a position the treasury holds, rather than into a payment that vanishes.
The fee
Every swap through a concentrated-liquidity pool charges a fee. In a rented model that fee is treated as an expense and routed out to whoever is being paid to stay. It can equally be read as income: it is the one thing a protocol earns without asking anyone for money.
dotpi reads it as income. Nothing else in the mechanism needs capital from elsewhere. The fee is collected at the moment of the swap and split immediately.
- 01
- TradeA swap crosses the pool and pays the pool fee.
- 02
- CollectThe fee is taken at settlement, in the assets the pool holds.
- 03
- SplitPart is paid out. Part is held back for the treasury.
The split
Some of each fee stays in the treasury instead of going out. That kept share buys both sides of a pair and places them between two ticks, which is where the trading actually happens. This is the only decision in the mechanism. Everything after it follows on.
The lit arc on the landing page is this kept share. It never closes the ring, because the protocol does not claim to own all of the liquidity, only the part it bought.
The position
A concentrated range exists on chain as a position token. It records which pair it covers and the two ticks at its edges. Anyone can trade against the pool. The fees that range earns belong to whoever holds the token.
In dotpi that holder is the treasury. Withdrawal of owned positions is not part of the design: the point of buying the liquidity is to keep it.
Holding a range still carries risk. The assets inside can fall in value, and the price can move outside the band the position covers. When that happens the position stops earning until the price returns or the range is moved by governance.
- Form
- An on-chain position token
- Holder
- The dotpi treasury
- Withdrawal
- Not part of the design
The loop
Return has two parts. The first is the share of each fee that was never held back, which goes out the way it always did. The second is the fee income the owned range earns whenever someone trades through it.
Some of that second part buys the next position. That is the step that brings the mechanism back to where it began.
- 01
- FeeA trade pays the pool fee.
- 02
- BuyThe kept share buys both sides of a pair.
- 03
- OwnThe treasury holds the position token.
- 04
- EarnThe range earns fees; some of them buy the next one.
Ownership of the range does not depend on either leg of income. Income from it does. When volume cools, the paid-out share thins with it; the owned positions remain, and they keep earning on whatever volume still crosses them.
Renting vs owning
Both models can charge the same fee. What separates them is where that fee ends up.
| Criterion | Rented liquidity | dotpi |
|---|---|---|
| Who provides liquidity | Outside suppliers, while paid | The protocol, out of its own fee |
| What the fee buys | Nothing. It is spent | A position, held as a token |
| If payments stop | The liquidity leaves | The position stays, because it was bought |
| What accumulates | Nothing accumulates | Range fees buy more of it |
| What a holder can check | Reported emission figures | Positions and fees, read off the chain |
| What can still go wrong | Suppliers leave; emissions dilute | Assets fall; ranges go offside; volume dries up |
The ledger
Owning something only matters if somebody can check it. Every field below is intended to be read straight off the chain rather than reported by hand. The two that make the numbers look worse stay in on purpose.
| Field | How it is worked out |
|---|---|
| Treasury NAV | Owned positions marked to market at the current tick |
| Fees earned | Collected and uncollected, summed across every position |
| Divergence loss | What a position gave up against simply holding the two assets |
| Net against holding | Fees earned minus divergence loss, which can be negative |
| Position feed | Every deposit, withdrawal and collection, priced at execution |
| Addresses | Contracts, treasury wallet and pools, printed as text |
If a number on this site ever disagrees with the chain, the chain is right.
Parameters
“Governed” means changeable only by public on-chain governance, and only within the hard bounds the contracts enforce. Figures marked standing are placeholders until the treasury is live.
| Parameter | Value | Mutable? |
|---|---|---|
| Pool fee | 0.30% | Pool creation · standing |
| Fee kept | 40% | Protocol policy · standing |
| Fee paid out | 60% | Protocol policy · standing |
| Owned-range fee use | 100% buys next position | Protocol policy · standing |
| Position form | Concentrated range token | No · by design |
| Treasury withdrawal | Not part of the design | No · by design |
| Ledger fields | NAV, fees, divergence, net, feed, addresses | Published set · standing |
| Audit | Pending | Link appears here when ready |
Roadmap
Not a schedule. No dates. The order the work is being done in, and this list changes when the work does.
-
01
Live
The loop
Protocol-owned liquidity. Part of each fee buys a range, the treasury keeps it, and range fees buy the next one.
-
02
Live
Live ledger
NAV, fees, divergence and the position feed update in public, read straight off the chain. If the site and the chain disagree, the chain is right.
-
03
Next
Holder airdrops
A share of fee income lands in wallets that hold through the loop. Nothing to stake or claim. Every send links to its transaction.
Airdrops are a share of fees already earned. Not a yield promise.
What dotpi cannot do
- Cannot invent the fee
- Income starts with a trade. No volume means no fee to keep, and nothing to buy with.
- Cannot withdraw owned positions
- Withdrawal is not part of the design. The treasury buys liquidity in order to keep it.
- Cannot hide the bad rows
- Divergence loss and net-against-holding stay on the same page as NAV and fees earned.
- Cannot promise yield
- Owned ranges earn when trades cross them. That income varies and is never guaranteed.
Risks
- Asset prices inside a position can fall.
- The market can trade outside the range, so the position stops earning until price returns or the range is moved.
- Divergence against simply holding the two assets can exceed fees earned. Net can be negative.
- Volume can dry up. Both the paid-out share and the owned-range income shrink with it.
- Smart contracts, oracles and pool venues can fail. Until an audit link appears above, treat the system as unaudited experimental software.
- If a figure on this site disagrees with the chain, the chain is right.
Nothing here is a yield promise or financial advice. Do not risk more than you can lose.
Addresses
Contracts, the treasury wallet and the pools publish here as plain text once they are deployed. Until then the rows stay empty on purpose rather than filled with decoys.
| Component | Address |
|---|---|
| Treasury | Publishes at deploy |
| Fee splitter | Publishes at deploy |
| Position manager | Publishes at deploy |
| Primary pool | Publishes at deploy |
| Ledger reader | Publishes at deploy |
FAQ
How is this different from rented liquidity?
Rented models spend the fee to keep suppliers in the pool. When the payments stop, the liquidity leaves. dotpi holds part of the fee back and buys a position the treasury keeps, so ownership does not depend on the next emission round.
Where does the money to buy liquidity come from?
From the trading fee itself. Nothing else in the mechanism needs capital from elsewhere.
What does the treasury actually hold?
On-chain position tokens for concentrated ranges. Each one names the pair and the two ticks it sits between. The fees that range earns belong to the treasury.
Can the treasury withdraw?
No. Withdrawal is not part of the design. The point of buying the liquidity is to keep it.
What gets published?
Treasury NAV, fees earned, divergence loss, net against holding, the position feed, and the addresses. The two flagged rows stay in even when they look bad.
Are the numbers on the homepage live?
Yes. The ledger reads amounts off the chain. If the site and the chain disagree, the chain is right.
Is there a token airdrop?
Holder airdrops are next on the roadmap. A share of fee income from owned ranges will land in wallets that hold through the loop — nothing to stake or claim. Until that ships, the return in this design is the fee income the owned ranges earn, some of which buys the next position.