Minter
The Minter contract handles fee calculation for the minting, burning and redeeming of cUSD, where dynamic fees are used to maintain the exposure of each backing asset to its optimal level. A balanced reserve composition reduces centralization of a particular asset, ensuring that the protocol is resilient to black swan events. Fees accrue to the treasury used for protocol safety.
Mechanics
Dynamic Mint/Burn Fees
Fees are dynamically adjusted according to the exposure of assets in the system. For each asset, there are two predefined piecewise linear functions that determine the mint/burn fees. Fees increase as they deviate from the optimal ratio, increasingly sharply beyond the kink ratio.
Process Flow for Mint/Burn:
Pre-fee Calculation: Calls
_amountOutBeforeFeeto get base amount and new ratioWhitelist Check: Bypasses fees if user is whitelisted
Fee Application: Applies dynamic fees using
_applyFeeSlopesif not whitelisted
Fee Calculations

The fee system operates across three distinct zones based on where the current ratio is:
current ratio <= optimal ratio: Minimum mint fee to mint, 0 fees for burnoptimal ratio < current ratio < kinkRatio: Linear fee increase using the first slopecurrent ratio > kinkRatio: Steep fee increase using the second slope
Price Oracles are used for fee calculations and amount determination. A minimum mint fee is placed to prevent manipulation around price oracles.
The current minimum mint fee is set to 10bps, capped to 5% maximum.
Fee Parameters
minMintFee
Base fee for minting
≤ 0.05e27 (5%)
optimalRatio
Target allocation ratio
0 < ratio < 1e27
mintKinkRatio
Mint fee kink point
0 < ratio < 1e27
burnKinkRatio
Burn fee kink point
0 < ratio < 1e27
slope0
First slope coefficient
slope1
Second slope coefficient
Redeem Fees
Redeem fees in Cap Protocol are simple percentage-based fees applied to proportional redemption operations. Same fees apply to all assets proportional to their asset allocation. Whitelisted users pay 0% redeem fee
Process Flow for Redeem:
Fee Determination: Sets redeem fee (0 if whitelisted)
Share Calculation: Calculates user's share of total supply
Amount Calculation: Calculates proportional amount for each asset
Fee Application: Applies redeem fee to each asset amount
Whitelisting
Whitelisted users can bypass fees for larger scale operations. Whitelist management is restricted to authorized admins.
Architecture
Minter
Core Functions
getMintAmount: Calculates mint amount and fees for a given asset input
_asset: Asset address to mint with_amountIn: Amount of asset to use for mintingReturns: Amount of cUSD to mint and fee to be paid
getBurnAmount: Calculates burn amount and fees for a given cUSD input
_asset: Asset address to burn for_amountIn: Amount of cUSD to burnReturns: Amount of asset to receive and fee to be paid
getRedeemAmount: Calculates redemption amounts for multi-asset withdrawal
_amountIn: Amount of cUSD to redeemReturns: Amounts of each asset to receive and redeem fees
Admin Functions
setFeeData: Sets the fee parameters for an asset
_asset: Asset address to configure_feeData: Complete fee configuration structure
Parameters:
minMintFee: Minimum mint fee (maximum 5%)
slope0: Fee slope below kink ratio
slope1: Fee slope above kink ratio
mintKinkRatio: Mint fee kink ratio threshold
burnKinkRatio: Burn fee kink ratio threshold
optimalRatio: Optimal allocation ratio
setRedeemFee: Sets the global redeem fee
_redeemFee: Redeem fee percentage in ray format (1e27 = 100%)
setWhitelist: Sets whitelist status for a user
_user: User address to modify_whitelisted: True to whitelist (exempt from fees), false to remove
View Functions
whitelisted: Checks if a user is whitelisted
Minter Logic
The MinterLogic library provides four main functions that handle the complete lifecycle of minting, burning, and redeeming operations:
amountOut- Main entry point for mint/burn calculations with fee applicationredeemAmountOut- Handles proportional redemption calculations_amountOutBeforeFee- Internal function for calculating the base amount and new asset ratio before applying fees_applyFeeSlopes- Internal function for dynamic fee application based on the current ratio
Data Structures
MinterStorage
FeeData
FeeSlopeParams
AmountOutParams
RedeemAmountOutParams
Last updated