fee-architecture
Source References: Use Doppler deployments as the contract source of truth for deployed addresses and revisions.
Fee Architecture
When to use
- You need to explain where fees are tracked and how payouts are derived
- You are debugging fee outcomes across migration and beneficiary paths
- You are changing LP fee configuration or hook-driven fee behavior
- You are validating multicurve fee decay configuration (
startFee,fee,durationSeconds,startingTime)
Prerequisites
- Identify sale path (static, dynamic, multicurve, or hook-initialized multicurve path)
- Identify whether pool is locked (beneficiaries enabled) or migrable
Core workflow
- Identify fee surfaces in the flow:
- Swap-time LP fees (pool/hook context)
- Migration-time proceeds accounting in
Airlock - Beneficiary fee tracking in
FeesManager/ locker modules
- Confirm storage location for each fee bucket:
Airlockfee accounting mappingsRehypeDopplerHookInitializerfee buckets- Locker/initializer
collectFeespaths for beneficiaries
- Validate claim paths for each actor (beneficiary, buyback destination, integrator, or protocol owner).
- Reconcile balances before and after claims on-chain.
Quick facts
| Fee type | Primary location | Typical claim path |
|---|---|---|
| Protocol/integrator accounting | src/Airlock.sol |
collectProtocolFees(...), collectIntegratorFees(...) |
| Beneficiary fees (initializer/locker) | src/base/FeesManager.sol, locker modules |
collectFees(...) |
RehypeDopplerHookInitializer beneficiary + protocol-owner buckets |
src/dopplerHooks/RehypeDopplerHookInitializer.sol |
collectFees(asset), claimAirlockOwnerFees(asset) |
Failure modes
- Wrong signer for beneficiary claim/update methods
- Wrong signer for protocol/integrator claim methods
- Using stale pool status assumptions (
InitializedvsLocked/Graduated) - Confusing proceeds split logic with LP fee accounting
- Confusing Rehype internal
beneficiaryFeeswith initializer or locker beneficiary-share accounting - Treating V2-only mechanics as active defaults
References
- COLLECTION.md
- DISTRIBUTION.md
- DYNAMIC-FEES.md
- Source:
doppler/src/Airlock.sol,doppler/src/base/FeesManager.sol,doppler/src/StreamableFeesLockerV2.sol,doppler/src/dopplerHooks/RehypeDopplerHookInitializer.sol,doppler/src/types/RehypeTypes.sol
Related skills
More from rustydotwtf/doppler-skills
token-lifecycle
Reference for Doppler token creation, vesting, inflation, and factory selection across DERC20, DERC2080, CloneERC20, and CloneDERC20VotesV2 paths.
9uniswap-fundamentals
Reference for Uniswap V3/V4 concepts used in Doppler development, including tick math, sqrtPriceX96, concentrated liquidity formulas, and V4 hooks/singleton architecture.
9verification
Verify on-chain Doppler behavior with cast, viem, RPC, and explorers for dynamic auctions, multicurve launches, hook initializer state, and migration flows.
8proceeds-split-migration
Configure and verify migration-time proceeds split flows using `ProceedsSplitter`, `TopUpDistributor`, `UniswapV4MigratorSplit`, and `UniswapV4MigratorSplitHook`.
7rehype
Operate, configure, test, and deploy Doppler's Rehype V4 hook for buybacks, beneficiary fees, and airlock-owner fee claims.
4pda-multicurve
Reference for multicurve price discovery auctions with scheduled multicurve as the canonical default; covers shares-based curve allocation, deployment modes, and lifecycle constraints.
4