Appearance
Fees ​
Performance Fee ​
Kana charges a 10% performance fee on harvested yield only. There are no deposit fees, withdrawal fees, or management fees.
How It Works ​
When the keeper bot calls harvestWithSlippage():
- Strategy claims rewards from all protocols (Yei, Takara, Morpho via Merkl)
- Swaps reward tokens to USDC with slippage protection (reverts if price manipulated)
- Vault calculates the yield earned since last harvest
- 10% of the yield is minted as additional kUSDC shares to the fee recipient
- The remaining 90% accrues to depositors via increased share value
Slippage protection: The keeper calculates fair prices off-chain and passes minimum output amounts to the harvest function. If the actual swap output is less than expected (e.g., due to MEV attack), the transaction reverts and no fees are taken.
Example ​
| Amount | |
|---|---|
| USDC in vault | 100,000 |
| Yield earned (1 week) | $200 |
| Performance fee (10%) | $20 |
| Net yield to depositors | $180 |
| Effective depositor APY | ~9.36% (if gross APY is 10.4%) |
Key Properties ​
| Property | Value |
|---|---|
| Fee type | Performance only |
| Current rate | 10% |
| Maximum rate | 20% (hardcoded cap) |
| Deposit fee | None |
| Withdrawal fee | None |
| Management fee | None |
| Fee recipient | Configurable address |
Why Performance Fee Only? ​
- Aligned incentives — Kana only earns when users earn
- No cost to enter/exit — encourages participation and reduces friction
- Simple — easy to understand and verify on-chain
Fee Changes ​
The vault owner can adjust the performance fee, but it cannot exceed 20% (hardcoded maximum in the contract). Fee changes are transparent and visible on-chain.
solidity
function setPerformanceFee(uint256 newFee) external onlyOwner {
require(newFee <= MAX_FEE, "Fee exceeds maximum");
performanceFee = newFee;
}