Last updated: 13 October 2026
Most of what goes wrong in lending is not a clever exploit. It is someone with a key doing something you did not expect. So here is every power StaterFi holds over your money on the mainnet app, every power it does not, who holds the rest, and where to check each answer yourself.
| Question | Answer | Why |
|---|---|---|
| Can anyone at StaterFi move your deposit? | No | It sits in the protocol's pool under your address. Only a transaction signed by your wallet can withdraw it, and StaterFi has no contract function that touches it. |
| Can StaterFi take more than the fee? | No | The fee router receives your borrow from the protocol, sends the fee to the treasury and the rest to you in the same transaction. The exact borrow allowance you grant it is the most it can ever move. |
| Can StaterFi switch this page off? | Yes | We can replace the borrow page with a notice, for example while a problem is checked. That cannot move, freeze or reach your deposit: it stays in the protocol's pool under your address, and any other interface to the same protocol reaches it with the same wallet. |
| Can the fee be raised without limit? | No | Capped at 10% by a constant in the contract. The owner can set it anywhere from 0% to 10%, never above. It is 3% today. |
| Can StaterFi change the protocol's limits, rates or liquidations? | No | Loan-to-value, liquidation thresholds, caps and interest rates are set by the protocol's governance. The app reads them live and shows them; it cannot alter them. |
| Can anyone stop or soften a liquidation? | No | The protocol's rules run on-chain when a health factor drops below 1. Nobody can intervene, including us. The app shows the price at which that happens before you borrow. |
| Can an approval be unlimited? | No | Every approval is for the exact amount of that one action. An unlimited approval is what a drainer needs, and the app never asks for one. |
| Is there a customer-service account that can reverse a transaction? | No | Nobody has that power, including us. This is the cost of self-custody, and we would rather you know it now. |
| Can the protocol change the rules of a market? | Yes | Its governance can change limits and caps, freeze or pause a market, or change a price feed. The app reads the current values on every load and shows a paused market as paused. |
Borrowing through StaterFi goes through one small contract of ours, the fee router. Here is everything it can do, and who can make it do it.
| Function | Who can call it | What it does |
|---|---|---|
borrow, borrowETH | You | Asks the protocol for your loan plus the fee, with the debt booked to you under the credit delegation you granted for that exact amount; sends the fee to the treasury and the loan to you, as plain ether for borrowETH. Nothing stays behind. |
setFee | The owner | Sets the fee between 0% and the 10% ceiling. The ceiling is a constant and cannot be changed. |
setTreasury | The owner | Changes where the fee goes. It cannot redirect your loan or your deposit. |
rescue | The owner | Returns tokens someone sent to the contract by mistake. Nothing in normal use leaves a balance there. |
receive | WETH only | Accepts ether only from the WETH contract during an unwrap, so no ether can be stranded there by accident. |
It is not upgradeable: the code deployed is the code forever. It is tested on every change, including against the protocol's real contracts on a copy of mainnet, and it has not been audited by an outside firm. Its address and verified source will be linked here the day it is deployed; until then the app offers deposits and withdrawals, and shows Borrow once it is live.
0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2, under your address. Plain ether goes in and out through the protocol's own gateway, 0xd01607c3C5eCABa394D8be377a08590149325722, which wraps and unwraps it inside each transaction.StaterFi is also building its own lending market. It is not on mainnet and nothing on the app touches it. The
ceilings below are constant values compiled into that contract: not configuration, not governance
parameters. A vote cannot move them; only deploying a different contract can, and that contract would have a
different address you would have to choose to use.
| Ceiling | Value | What it prevents |
|---|---|---|
| Origination fee | ≤ 10%designed at 3% | A fee rise that makes an open loan unaffordable to refinance. |
| Liquidation bonus | ≤ 20%6.5–7.5% for Bitcoin | A liquidator being paid an arbitrary share of your collateral. |
| Borrow APR | capped per market100% stablecoins, 150% majors | A utilization spike compounding your debt without limit. Fixed at deployment, immutable. |
| Fixed-rate premium | ≤ 20%designed at 1.5% | Locked-rate loans being priced arbitrarily above the variable rate. |
| Liquidation close factor | 50%100% below health factor 0.95 | Your whole position being closed over a small shortfall. |
| Fixed-loan term | 7–365 days | A term so long the locked rate stops reflecting reality. |
| Listed markets | ≤ 128 | Unbounded growth in the per-account bookkeeping that tracks your collateral. |
Its governance is designed the same way: every parameter change waits 2 days in a public timelock before it can execute, a guardian can pause in an emergency but cannot unpause alone, a stale or disputed price halts the market rather than guessing, and repaying is never governable and cannot be switched off. It opens on mainnet only after an independent security review, published in full, and only behind separate governance and treasury multisigs whose addresses will be linked here so you can check them rather than take our word.
A page like this is worthless if it only lists strengths.
MAX_FEE_BPS constant and the feeBps value readable on-chain.MAX_ORIGINATION_FEE_BPS,
MAX_LIQUIDATION_BONUS_BPS, MAX_FIXED_RATE_PREMIUM_BPS and
CLOSE_FACTOR_BPS constants in LendingPool.sol; the APR cap is maxRateBps,
an immutable in InterestRateModel.sol. The code and its security assessment are
available on request, and will be published with the independent review.