Skip to content
Orient

Docs

How it works, in full.

Orient is one contract over one Uniswap v4 position. This page is the whole mechanism: the four calls, what a share is worth, what the protocol takes, and a row-by-row statement of what on this site is real.


The shape of it

A Mantle owns exactly one position: full range, one pool, no hooks. It mints Nacre, a plain ERC-20 with no pause, no blocklist, no upgrade path and no owner — because a lending market that wants to hold it needs it to behave like every other token, and the way to guarantee that is to add nothing.

The vault holds no view about what anything is worth. There is no oracle, no TWAP and no quote anywhere in it. Every amount it moves came back from the PoolManager call that moved it, which is why a redemption cannot be attacked by pushing a price around: no price is ever read.

That single rule is what forces full range. A concentrated range has to be managed, and a managed vault is a vault with a manager — someone whose decisions you are exposed to. Full range never leaves the market, never needs a keeper, and reduces all the tick arithmetic in the contract to rounding the two usable bounds to the pool’s spacing. The cost is capital efficiency, and it is a real cost.

Vault
Mantle
Share token
Nacre, 18 decimals
Range
Full, rounded to the pool’s tick spacing
Hooks
None — hookless pools only
Protocol cut
10% of harvested fees
Hard cap on the cut
20%, a constant in the contract
Admin functions
None
Upgradeability
None

The four calls

01

seed

seed(uint128 liq, uint256 max0, uint256 max1, address to)
  returns (uint256 shares, uint256 used0, uint256 used1)

You pass the liquidity you want to add; the pool decides what that costs. Anything you sent above the cost comes straight back in the same transaction.

Shares are minted in proportion to liquidity — and you also contribute your proportion of any fees the vault has harvested but not yet compounded, rounded up. That is what stops a deposit from diluting the holders who were already there.

The first seed burns a thousand shares to the zero address. An empty vault whose share price can be walked up by a donation is the oldest bug in this shape of contract, and a floor is the cheapest fix.

02

secrete

secrete() returns (uint256 got0, uint256 got1)

Harvests the position’s fees into the vault. Uniswap v4 only moves fees when liquidity is modified, so this calls modifyLiquidity with a delta of zero and takes what the pool credits.

Anyone may call it. It moves nothing out of the vault except the protocol cut, so gating it would buy nothing and cost a dependency.

03

accrete

accrete(uint128 liq) returns (uint256 used0, uint256 used1)

Adds harvested balances back to the position as liquidity. No shares are minted, so the same supply now sits on more liquidity: this is the only call that raises the price of a share.

It reverts if the pool asks for more than the vault is holding idle, so a wrong number costs gas and nothing else.

04

release

release(uint256 shares, address to, uint256 min0, uint256 min1)
  returns (uint256 amount0, uint256 amount1)

Burns shares and removes exactly that proportion of the position, plus that proportion of anything harvested and not yet compounded.

Removing liquidity from a v4 position also collects the whole position’s pending fees, so those are split: the redeemer keeps their proportion and the rest stays with everyone else. Subtracting feesAccrued from callerDelta is what makes that split exact.

There is no queue, no lockup and no address that can prevent it.


What a share is worth

A share is a pro-rata claim on two things at once: the position’s liquidity, and anything harvested that has not yet been compounded. Both are claimed in the same redemption, so the claim is complete at every instant — there is never a moment when part of what you own is unreachable.

The published figure is liquidityPerShare(), which is liquidity times 1e18 over supply. It rises when fees are compounded, and it does not fall on a deposit, a redemption or a harvest. The test suite asserts that over a randomised sequence of all three.

What it is not is a promise that you end up ahead. Liquidity per share can rise while the two tokens underneath it are worth less than when you deposited: that is impermanent loss, and no vault design removes it. Orient makes the position fungible; it does not make it safe.

Checking the vault against the pool

The Mantle keeps its own record of the liquidity it owns. isFlush() reads the singleton’s storage with extsload and compares the two, so the vault’s bookkeeping is checkable without trusting the vault. If those two numbers ever disagree, something is wrong and you can see it from outside.

The cut

Ten percent of harvested fees goes to the collector named when the vault was deployed. It is set once, in the constructor, and there is no function that changes it. The constructor refuses anything above CUT_CAP_BPS, which is a constant of 2000 — so twenty percent is the ceiling for every Mantle that can ever exist.


The state table

What is real, one row each

A site that will not say what it has not built is not worth reading. Every claim Orient makes appears below with its status attached.

ClaimStatusWhat that means
The Uniswap v4 singleton read by this siteRealDeployed at 0x8366a39cc670b4001a1121b8f6a443a643e40951 on chain 4663, 24,009 bytes. The app reads its storage directly.
The pool list, prices and liquidity in the appRealFetched by your browser from a public RPC and decoded in the page. No indexer, no API key, no server of ours.
The Mantle and Nacre contractsWritten, tested, not deployedThey compile, and sixteen properties are executed against the singleton’s real runtime bytecode in an in-process EVM on every build. There is no vault on any chain.
The MantleFactoryWritten, not deployedThere is no factory address, so the app cannot deploy a vault for you yet and says so where the button would be.
The nacre colours in the hero and the chartComputedA transfer matrix through an aragonite–conchiolin stack at normal incidence, integrated against the CIE 1931 observer. Not a gradient and not a photograph.
The token $ORNTDoes not existNo token has been launched, no supply exists, and nothing on this site is an offer to sell one.
An auditNoneThese contracts have not been audited by anyone. The tests are mine and so is the reasoning.

Known limits

  • Impermanent loss is not removed

    You hold a liquidity position. Its two tokens can be worth less than what you put in, and compounding fees does not undo that.

  • Full range is capital-inefficient

    The same money earns fewer fees than a tight range would. That is the price of never needing a manager, and it is paid every day.

  • No audit

    Nobody independent has reviewed this code. The property tests run against the real PoolManager bytecode, which is worth something, but it is not an audit.

  • Hookless pools only

    A pool with hooks can change what modifyLiquidity does. Orient will not deploy over one rather than reason about every hook that might exist.

  • One pool per vault

    A Mantle cannot migrate to a different pool or a different fee tier. If you want another pool, that is another vault.

  • The cut is permanent

    It is fixed at deployment. That means it cannot be raised on you — and it also means it cannot be lowered.

Read the pools it would sit on.

The app lists every hookless v4 pool on chain 4663 that currently holds liquidity, read from the singleton in your own browser.

Open the app