Docs.
What the contracts do, where the money goes, and how to check any of it without trusting this page. For the plain-language version, read How it works.
What Kiln is
A vault that holds a Uniswap liquidity position on your behalf. You deposit both sides of a pair, the vault mints a position in a fixed price range, and every swap through that pool pays fees into it. Your share is split by how much liquidity you supplied and how long it has been in.
You can withdraw at any time. The term you pick does not lock your money — it only decides the points multiplier you keep if you see it through.
It runs on Robinhood Chain (chain 4663), which settles a block roughly every 100ms.
The contracts
Two factories, because one holding the creation code of both vault types came to 32,620 bytes against the EVM’s 24,576-byte limit and silently failed to deploy. Each factory fixes its treasury at construction and has no owner.
| Contract | Address | What it does |
|---|---|---|
| KilnFactory | 0x778e376f268b38573C34b9b96d6ecd08040EBB1C | Opens vaults on Uniswap V3 pools |
| KilnFactoryV4 | 0x8dc645427F7981a803dB1510A78e046bD9b1F046 | Opens vaults on Uniswap V4 pools |
Vault addresses are never written down anywhere. The app asks the factory which vaults exist for the pool it is showing, so opening a new pool needs no code change and no deploy.
These are the addresses this build points at. On a local fork they are anvil’s; check eth_getCode before believing any address is live — a deploy script prints simulated addresses even when the deploy failed.
Where the fees go
A swap pays the pool’s fee. Uniswap keeps its protocol cut, and the rest reaches liquidity providers. Of what reaches the vault, Kiln takes 5% and 95% goes to the firings in that vault.
| Step | Takes | Leaves |
|---|---|---|
| Uniswap protocol fee | Set per pool | The LP fee |
| Kiln | 5% | 95% to firings |
| Your firing | Share by liquidity × time | Claimed when you pull |
The split uses an accumulator, so settling a firing costs the same whether there are two positions in the vault or two thousand. Fees you have earned cannot be diluted by somebody depositing after you — the accumulator is advanced before any new liquidity is added.
Points
One point is one unit of liquidity held for one day, multiplied by the term you committed to. Points are recorded on-chain by each vault and readable by anyone: points(address) and totalPoints().
| Term | Multiplier | If you pull early |
|---|---|---|
| One day | 1.00× | Nothing to lose |
| Seven days | 1.50× | Keep every fee, lose the multiplier |
| Thirty days | 2.50× | Keep every fee, lose the multiplier |
| Ninety days | 4.00× | Keep every fee, lose the multiplier |
There is no redemption. What a point is worth has not been decided, and we are not going to publish a number that does not exist. Your balance is on Rewards.
Bands and range
A vault’s price range is immutable — set at construction and unchangeable, because there is no owner and no rebalance function. A concentrated vault whose price leaves its band stops earning permanently. That is not a bug; it is the cost of having nobody able to move your position.
| Band | Fee multiple | Pays while |
|---|---|---|
| Loose | 1× | any price |
| Standard | 4× | ±50% |
| Tight | 12× | ±20% |
| Molten | 30× | ±8% |
The multiples are modelled from band width, not measured from any pool’s history. A band only earns while the price is inside it, and we have not measured how often that holds. On a volatile pair, full range is the only setting that cannot die.
Security posture
- ✓No owner. No admin key. Nobody can move your position or pause the vault.
- ✓No upgrade path. The code that is deployed is the code that runs.
- ✓The treasury is fixed at deploy and immutable — the 5% cannot be redirected later.
- ✓The pool price is checked against a 30-minute TWAP twice: once on entry, and again immediately before minting. The second check is the one that matters — everything in between is an external call, and a token that calls back could move the market in that window. This is the flaw that drained Gamma Strategies in January 2024.
- ✓63 tests pass against a live fork of Robinhood Chain, including a regression test that reproduces that attack and fails without the second check.
- ✕No third-party audit. The tests are ours, written against our own code.
- ✕No static analysis. Slither has not been run.
- ✕Divergence loss is unmeasured. We show no number for it because we do not have one.
Risks
Price movement is the big one. Providing liquidity means selling the rising asset and buying the falling one. In a rally you will underperform simply holding. In a crash you hold more of what crashed. No fee rate on this site accounts for that.
Tokenised stocks can be frozen. A registry can freeze a tokenised equity with no appeal and no warning. Pools paired with one are labelled Stock throughout the app.
Leveraged wrappers decay. A 3× daily-reset product loses value in a choppy market even when the underlying ends flat. Those pools are labelled Leveraged.
Rates are one day old. Every rate shown annualises the last 24 hours of trading. Volume falls, the rate falls with it. Nothing here forecasts anything.
Verify it yourself
Nothing below needs this site. Point them at https://rpc.mainnet.chain.robinhood.com.
# the factory has code, and is not just a printed address cast code 0x778e376f268b38573C34b9b96d6ecd08040EBB1C --rpc-url https://rpc.mainnet.chain.robinhood.com # who receives the 5%, and it cannot change cast call 0x778e376f268b38573C34b9b96d6ecd08040EBB1C 'treasury()(address)' --rpc-url https://rpc.mainnet.chain.robinhood.com # every vault the factory has opened cast call 0x778e376f268b38573C34b9b96d6ecd08040EBB1C 'vaultCount()(uint256)' --rpc-url https://rpc.mainnet.chain.robinhood.com # your points in a vault, and the total across all wallets cast call <vault> 'points(address)(uint256)' <you> --rpc-url https://rpc.mainnet.chain.robinhood.com cast call <vault> 'totalPoints()(uint256)' --rpc-url https://rpc.mainnet.chain.robinhood.com # the band a vault is locked to, which nobody can change cast call <vault> 'tickLower()(int24)' --rpc-url https://rpc.mainnet.chain.robinhood.com cast call <vault> 'tickUpper()(int24)' --rpc-url https://rpc.mainnet.chain.robinhood.com
Where the data comes from
Pool liquidity and 24-hour volume are not readable on-chain — no contract stores them. They come from Uniswap’s own public data API. Fee tier, tokens and active liquidity are readable, and the scanner re-reads every V2 and V3 pool from its own contract before listing it. A pool whose contract disagrees with the API is dropped rather than shown.
| Figure | Source |
|---|---|
| Fee tier, tokens, liquidity | The pool contract |
| TVL, 24h volume, APR | Uniswap data API |
| Points, fees, positions | The vault contracts, live |
| Token logos | CoinGecko and DexScreener, via Uniswap |
V4 pools have no per-pool contract to re-read, so they are marked unverified. Their PoolKey is recovered from the Initialize event, which is the only place the hook address is ever written down.
254 pools listed, $205.56M of liquidity, scanned Sun, 20 Sep 2026 11:21:29 GMT. Terms run to 4.00× at the longest.