Protocol
Protocol architecture.
How the ladder managers sit on top of Uniswap V3 and V4 on Robinhood Chain.
Two small contracts sit between your wallet and Uniswap: one for V3 pools, one for V4 pools. They hold the positions on your behalf and nothing else.
Your wallet
ETH · WETH · USDG · tokens
ObolLadderManager
Uniswap V3
NonfungiblePositionManager
1 NFT per funded bin
V3 pool
token0 / token1 · fee tier
ObolLadderManagerV4
Uniswap V4
PoolManager
singleton · flash accounting
V4 pool
PoolKey · native ETH
Components
| Component | Role |
|---|---|
| ObolLadderManager | Ladders on canonical Uniswap V3 pools. Owns one position NFT per funded bin. |
| ObolLadderManagerV4 | Ladders on Uniswap V4 pools. Owns one position per bin inside the PoolManager, keyed by salt. |
| LadderMath (library) | Range alignment, bin splitting and per-bin budget allocation, shared by both managers. |
| ShapeCalculator (library) | The five shape weightings. |
| LiquidityAmounts / TickMath | Uniswap math: amounts ⇄ liquidity, ticks ⇄ sqrt prices. |
| Frontend | Reads pools from CoinGecko, resolves V4 PoolKeys on-chain, converts ranges to ticks, sends one transaction. |
Ladder lifecycle
Open
openLadder(params)validates the pool and price guard, pulls funds, allocates them over bins, adds liquidity and refunds leftovers. The ladder is stored with its owner, pool, bins and shape.Earn
Swaps through funded bins accrue fees to the manager's positions, tracked per ladder.
Claim
claimFees(ladderId)collects fees from every bin, sends 7.5% to the treasury and the rest to the owner.Close
closeLadder(ladderId)removes all liquidity, collects fees, applies the protocol fee to the fee part only and sends everything to the owner. The ladder is marked inactive.
Design choices
- No token, no vault shares. A ladder is a record owned by your address, not a transferable token.
- Exact accounting. Each open only spends what the caller sent; refunds are computed from amounts, never from the contract's balance.
- Immutable. No proxy, no upgrade path, no pause. New versions are new deployments.