Fee Structure
Olla charges a protocol fee on staking rewards. It is configurable by governance through the timelock.
Protocol fee
The protocol fee is a percentage of gross staking rewards, charged during each accounting update. It compensates the protocol treasury and the staking provider for operating infrastructure.
| Parameter | Range | Default setter |
|---|---|---|
protocolFeeBP | 0 – 5,000 bps (0% – 50%) | OllaGovernance.setProtocolFeeBP() |
How it works
- During
updateAccounting(), the protocol calculates gross rewards earned since the last report. - The protocol fee is applied:
feeAssets = grossRewards * protocolFeeBP / 10,000. - The fee is converted to stAztec shares and minted. This dilutes existing holders proportionally, which is equivalent to taking a cut of the rewards.
Treasury / provider split
The minted fee shares are split between two recipients:
| Parameter | Range | Effect |
|---|---|---|
treasuryFeeSplitBP | 1,000 – 9,000 bps (10% – 90%) | Portion of fee shares sent to treasury |
treasury shares = fee shares * treasuryFeeSplitBP / 10,000
provider shares = fee shares - treasury shares
- Treasury: The protocol's governance-controlled treasury address, set via
OllaGovernance.setTreasury(). - Provider: The staking provider's rewards recipient address, configured in the
StakingProviderRegistry.
Example
With a 10% protocol fee and a 50/50 treasury split:
- Gross rewards in a cycle: 100 AZTEC
- Protocol fee: 10 AZTEC (minted as stAztec shares)
- Treasury receives: 5 AZTEC worth of stAztec
- Provider receives: 5 AZTEC worth of stAztec
- Stakers receive: 90 AZTEC (reflected in exchange rate increase)
Withdrawals have no fee
Withdrawals through requestRedeem() and claimRequestById() do not incur any fee. Queued withdrawals wait for the next rebalance cycle to be finalized.
Fee flow diagram
Governance controls
All fee parameters are changed through the governance timelock:
| Action | Contract | Governance function |
|---|---|---|
| Change protocol fee | OllaCore | setProtocolFeeBP(uint16) |
| Change treasury split | OllaCore | setTreasuryFeeSplitBP(uint16) |
| Change treasury address | OllaGovernance | setTreasury(address) |