Fees
Every charge the protocol makes, what it is taken from, and where it goes.
Entry fee — 0.5% of a deposit
Charged on the tokens you supply, before any liquidity is added. Your shares are minted against the net amount, so the position you hold reflects what actually went in.
It is charged only on capital the vault actually deploys. Deposits take maximum amounts and hand back whatever the position could not absorb at the pool's current ratio, so supplying generously on one side is the normal way to use them — and the fee on anything refunded is refunded with it. You are never charged for money that never left your control.
This is a haircut on principal, which makes it the most expensive kind of fee to charge: it costs you whether or not the position ever earns, and it has to be won back before you are level. That is exactly why it is kept small — 0.5% is roughly two days of a busy pool's fees, not two months of them.
- Capped in the contract at
MAX_DEPOSIT_FEE_BPS= 2%. The cap sits close to the rate on purpose: a 10% ceiling over a 0.5% fee would tell you nothing about what you might be charged tomorrow. - Readable on-chain at any time via
depositFeeBps(), and shown in the deposit panel before you confirm. - Accrued rather than pushed, and collected separately with
collectDepositFees(). That is a safety property, not a courtesy — see below. - Fuzzed at 100,000 runs against the property that it never exceeds the stated rate on what a depositor actually parted with, at any deposit ratio.
Every charge, side by side
| Charge | Rate | Taken from | Goes to |
|---|---|---|---|
| Entry fee | 0.5% | Your principal, on deposit | feeRecipient |
| Protocol fee | 10% | Yield only — each harvest of trading fees | treasury |
| Pool swap fee | Set by the pool | Traders, not stakers | Liquidity providers — you |
| Exit fee | None | — | — |
There is no withdrawal fee and no lockup. The pool's own swap fee is not a cost to you at all — it is the thing you are earning.
Launchpad taxes stack on top
Many Arc launchpads enforce a tax through a Uniswap v4 hook. That tax is not Slice's and Slice cannot waive it — but it does affect which deposit route is cheaper, so it is worth knowing before you stake.
Measured against a live Argus pool (CINU), pinned to a single block so the price could not move mid-measurement:
| Charge | Rate | Who gets it |
|---|---|---|
| Pool fee | 1.00% | Liquidity providers — that is you, if you are staked |
| Argus hook | 3.00% | The launchpad's splits: creator, buyback, holders |
| Total per swap | 4.00% | Matches the hook's own totalFeeBps() |
The 1% pool fee is the thing you earn, and 1% per swap is high — good for a staker. The 3% hook tax only matters where Slice itself swaps.
Harvesting is also a swap: converting the token side of collected fees to USDC pays the same 4%. Since roughly half of what a pool collects is on the token side, the drag is about 2% of harvested fees — small against what the 1% pool fee brings in, but not nothing.
contracts/script/measure-hook-tax.sh measures this for any pool. It has to run against a live node rather than a fork, because these hooks move USDC and Arc's balance-move precompile does not exist in Foundry's EVM.
Why fees are collected, not pushed
Both the entry fee and the protocol fee accrue inside the vault and are transferred out by a separate, permissionless call. That is deliberate.
Arc's USDC reverts for a blocklisted address, and Circle decides who is blocklisted. If the vault transferred a fee to its recipient inline, blocklisting that one address would make every deposit revert for everybody. Accruing keeps the deposit path free of any transfer a third party can make fail.
harvest(), which sits on the withdrawal path — blocklisting the treasury would have frozen every vault permanently. It was found by forking Arc. When the entry fee was added later it reintroduced the same shape on the deposit path, and the regression test written for the first bug caught the second.Protocol fee — 10% of harvested yield
Taken from trading fees as they are collected, before the rest is streamed to stakers. It costs you nothing on a quiet pool, and scales with what the pool actually produces — which is the right way round for a fee.
It is set to its own ceiling, so the owner can lower it but can never raise it. The rate you read when you deposit is the worst it will ever be. 10% is in line with comparable vaults elsewhere.
Who can change the rates
The vault owner, via setDepositFee and setParameters, within the caps above. The owner cannot withdraw your funds, mint shares, or pause withdrawals — there is no such function.
Check depositFeeBps() and the vault's owner before depositing. The contracts page lists both. Risks covers the rest of what can go wrong.