Skip to main content

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.

ParameterRangeDefault setter
protocolFeeBP0 – 5,000 bps (0% – 50%)OllaGovernance.setProtocolFeeBP()

How it works​

  1. During updateAccounting(), the protocol calculates gross rewards earned since the last report.
  2. The protocol fee is applied: feeAssets = grossRewards * protocolFeeBP / 10,000.
  3. 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:

ParameterRangeEffect
treasuryFeeSplitBP1,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:

ActionContractGovernance function
Change protocol feeOllaCoresetProtocolFeeBP(uint16)
Change treasury splitOllaCoresetTreasuryFeeSplitBP(uint16)
Change treasury addressOllaGovernancesetTreasury(address)