How Reflex works, end to end.
A precise account of the mechanism — the curve that seeds supply, the lifecycle that stakes ETH, the Reflex Arc that discharges yield, and the floor that ratchets. Every parameter here is fixed at deploy.
01Overview
Reflex is a liquidity protocol built as a Uniswap v4 hook. One million RFLX are seeded as single-sided liquidity across 100 price bands before the first trade. As buyers cross bands, the ETH they pay is staked on Lido; the staking yield is periodically converted back to ETH and used to buy RFLX at the floor — deepening the lowest active band. That buy-side liquidity has no withdrawal path, so it accumulates rather than draining away.
There is no treasury, no governance and no mint function. After launch the owner is renounced and the hook runs autonomously for as long as Uniswap v4 exists.
Trading → staked ETH → stETH yield → floor liquidity → a deeper floor that invites the next trade. The loop is mechanical.
02The bonding curve
Supply is distributed by a softened hyperbolic curve with exponent α = 0.75:
where x is cumulative ETH into the curve and V_ETH ≈ 10.22 is a virtual reserve that sets the launch price at roughly 68,027 RFLX/ETH. The curve runs to a maximum of 10,000 ETH across all 100 bands. Early bands are narrow and dense; later bands widen and require real ETH depth to cross.
03Distribution
Band widths follow a linear ramp — each band is wider than the one before, so no two bands fill at the same rate. RFLX per band is then shaped by a power compression (k = 0.75) applied to the raw curve allocation, concentrating supply in the early bands without making the tail negligible.
Price (the Uniswap ticks) is derived from the curve; the RFLX amounts are shaped independently. Both are computed deterministically on-chain in the RFLDF library.
04Band lifecycle
When price crosses a band its RFLX converts to ETH. That ETH does not sit idle — it moves through four states:
The most recently crossed band always stays Triggered so a price retrace re-adds liquidity instantly. Staked positions are tracked in wstETH shares — a non-rebasing wrapper — so yield accrues without changing the share count.
05The discharge
When harvestable yield clears 0.1 ETH, anyone can call triggerReflexArc() — the discharge. It is permissionless, pays the caller a keeper reward, and runs with no operator deciding to act. Each discharge:
- 01Unwraps wstETH to stETH, then swaps to ETH through the Curve stETH/ETH pool under a 5% slippage guard.
- 02Splits the proceeds: 98% discharge · 1% keeper · 1% operations.
- 03Deploys a bounded amount into the floor (capped per discharge) and buys RFLX at the lowest active band.
- 04Adds the RFLX as liquidity to that band — deepening it.
- 05Advances the floor band once that band reaches 2× its original depth.
Gas is capped at 30 gwei, the Curve leg has a 5% slippage guard, and each cycle deploys only a bounded amount into the floor — so no single buy is large enough to be worth sandwiching. A stricter observation-based price oracle is planned as future hardening.
06The reflexive floor
The floor is buy-side liquidity placed in the pool at the lowest active band, owned by no one. Three properties make it a ratchet:
It only adds. Each cycle buys RFLX and deepens band 0. There is no withdrawal path in the contract — liquidity placed at a band stays there.
It climbs in steps. When a band doubles its original depth, the target advances to the next band and the floor price steps up the curve.
It cannot retreat. Sellers meet accumulated depth on every trade. Progress locks in, cycle after cycle — the ratchet has a pawl.
07Parameters
All values are fixed at deploy and cannot be changed.
08Contracts
Reflex deploys two contracts — the RFLX token and the ReflexHook. Everything else is existing mainnet infrastructure.
On launch day, every parameter above maps to a public view function you can read directly on Etherscan — nothing here is off-chain.
09Security & trust
startReflex() is called once and ownership is renounced on the spot. After that there are no admin keys, no upgrade path, no parameter setters. External liquidity changes are blocked at the hook level, so no one can add or remove pool liquidity except the protocol itself.
10Glossary
Deployed once.
No one can touch it.
Reflex deploys immutably on Ethereum mainnet and ownership is renounced at launch. After that, no one can change the parameters, move funds, or pause it — the contract just runs.
Contract0x0000…dEaD↗