Three independent mechanisms: depositsPaused, redemptionsPaused, and global pause() (blocks all transfers).
USDCFW
The production FW implementation. Wraps USDC and earns yield by deploying a portion into an ERC-4626 vault.
State
yieldToken — USDC address (immutable)
vault — ERC-4626 vault (immutable)
idleAssets / vaultShares — Tracked explicitly to prevent donation-based manipulation
Exchange rate
Where totalUnderlying = idleAssets + vault.convertToAssets(vaultShares).
Deposit
USDC deposits are added to idleAssets. Vault share deposits are converted to equivalent USDC. First deposit mints 1:1. The market is seeded on deployment to prevent ERC-4626 inflation attacks.
Redeem
Draws from idle USDC first, then from the vault if needed, minimizing gas costs.
Rehypothecation
triggerRehypothecation() (permissionless) and forceRehypothecation() (owner-only) rebalance between idle and vault based on the RehypothecationModule parameters.