Skip to main content

Overview

TreasuryUSDCVault holds protocol treasury funds in USDC. It receives USDC from fee swaps and governance-approved deposits. Withdrawals require governance approval via the ElataTimelock.

Key Functions

Read

FunctionReturnsDescription
balance()uint256Current USDC balance
totalDeposited()uint256Lifetime deposits
totalWithdrawn()uint256Lifetime withdrawals
governance()addressGovernance timelock address

Write

FunctionAccessDescription
deposit(uint256 amount)FeeSwapper / GovernanceDeposit USDC into vault
withdraw(address to, uint256 amount)Governance (via Timelock)Withdraw USDC
setGovernance(address newGovernance)GovernanceUpdate governance address

Security Model

  • Only the ElataTimelock can call withdraw()
  • Withdrawal proposals must pass governance vote + timelock delay
  • deposit() is permissioned to FeeSwapper and governance
  • No emergency withdrawal function — all exits go through governance

Fee Flow to Treasury

App fees → FeeManager → AppFeeRouter → FeeSwapper
  → swap to USDC
  → TreasuryUSDCVault.deposit()

Events

EventEmitted When
Deposited(address from, uint256 amount)USDC deposited
Withdrawn(address to, uint256 amount)USDC withdrawn via governance
GovernanceUpdated(address newGovernance)Governance address changed