Fee Structure

Fees are fully on-chain and verifiable.

Trading fee

Charged on each buy and sell.

tradingFeeBps = 100; // 1%
  • Deducted from USDC on buy.

  • Stays in the vault. This increases NAV.

Performance fee

Charged only when a user sells at a profit.

feeBps = 0 ~ 3000; // max 30%

Calculation (conceptual):

function _calculatePerformanceFee(
  address user,
  uint256 tokens,
  uint256 currentNav
) internal view returns (uint256 feeTokens) {
  EntryRecord storage record = entryRecords[user];
  if (currentNav <= record.weightedEntryNav) return 0;

  uint256 profitPerToken = currentNav - record.weightedEntryNav;
  uint256 totalProfit = (tokens * profitPerToken) / PRECISION;
  uint256 fee = (totalProfit * feeBps) / BPS;

  // paid as newly minted tokens to the leader
  feeTokens = (fee * PRECISION) / currentNav;
}

Notes:

  • Fee is minted to the leader as vault tokens.

  • Entry NAV uses weighted average.

  • Entry NAV is inherited on transfers to reduce fee avoidance.

Exit fee

Tiered by holding duration:

Holding duration
Fee

< 7 days

15%

7–30 days

8%

30–90 days

3%

> 90 days

0%

Destination:

  • exitFeeRecipient = address(0): stays in vault (increases NAV).

  • Otherwise: sent to exitFeeRecipient.

Protocol fee

Taken from trading fees and sent to protocol treasury.

Last updated