★ Rescue/emergencyWithdraw without timelock
Fluid's assessment for RD-F-041 — scored yellow on the v1.7.0 rubric. The evidence below is the curator's reasoning for this score.
Evidence summary #
collectRevenue() on AdminModule callable by Auth role holders with no timelock -- extracts accrued protocol fees. withdrawFunds(address[],uint256[],address,string) on FluidReserveContract is gated by an isAuth mapping (multiple addresses can be authorised via updateAuth()) and accepts an arbitrary receiver_ parameter -- i.e. authorised callers can route funds to any address, not just a hard-coded Treasury / Buyback. No general rescue/emergencyWithdraw/sweep found in AdminModule ABI. Not a full-drain vector at the AdminModule layer, but ReserveContract withdrawFunds() has no timelock and no destination allowlist.
Sources #
- GitHubAdminModule: collectRevenue() with onlyAuths, no timelock; not a full-drain but undelayed fee extractionfluid-contracts-public/contracts/liquidity/adminModule/main.sol collectRevenueretrieved 2026-04-29
- ReserveContract impl: withdrawFunds() restricted to TREASURY_ADDRESS or BUYBACK_CONTRACT_ADDRESS0xFb3102759F2d57F547b9C519db49Ce1fFDE15dB2retrieved 2026-04-29
Methodology #
Determine whether a `rescue(…)` or `emergencyWithdraw(…)` function exists callable by admin without a timelock delay on execution.
See the full factor methodology and distribution across all protocols →