# Slither Triage — v0.11.5, 63 detectors, filtered: lib/test/script, info+low excluded 41 raw results → 4 detector classes. Every finding reviewed; none exploitable. Detail: ## 1. `arbitrary-send-erc20` — ReserveManager.depositStable (1 finding) `safeTransferFrom(from, …)` with caller-supplied `from`. **Status: SAFE by access control.** `depositStable` is `onlyPSM` (reverts `NotPSM`), and the PSM always passes `msg.sender` as `from`. No path lets an attacker specify another user's address. Defense-in-depth option for auditors to consider: move the `transferFrom` into the PSM itself so the reserve only ever receives. ## 2. `divide-before-multiply` (2 findings) - `PSM.redeem`: `usdrWad / SCALE` then `* SCALE` — **intentional**, protocol-favoring rounding: burns the full WAD, pays the floored 6-dec amount. Dust accrues to the protocol. - `LiquidationEngine._currentPrice`: Dutch decay span computed at BPS precision then scaled by time — max error 1 wei of price per step, keeper-neutral. **Accepted.** ## 3. `reentrancy-no-eth` (several findings, all in CDPVault/LiquidationEngine) Pattern: state written after external calls to `usdr.burn/mint`, `vault.seize`, `guard.reportCdpShortfall`, `buffer.absorbBadDebt`. **Status: NOT exploitable in this system:** - Every flagged function is `nonReentrant` (OZ ReentrancyGuard). - The external targets are **protocol-internal contracts** (USDR, SolvencyGuard, SurplusBuffer, CDPVault) — USDR is a plain OZ ERC20 with no transfer hooks / callbacks; none of these can re-enter the caller. - Collateral transfers use SafeERC20 to standard ERC-20s (no ERC-777 support; listing policy: hook-token collateral is prohibited — noted for governance). **Action for auditors:** confirm the no-hook-collateral listing policy is enforced operationally when adding new collateral types. ## 4. `unused-return` (10 findings) All are deliberate partial destructuring of multi-return values (`(price,) = oracle.getPrice(...)`, `(, int256 answer, ...) = latestRoundData()`), or `buffer.absorbBadDebt` whose uncovered remainder is tracked inside the buffer (`badDebtOutstanding`). **Accepted; no silent failure paths.** --- Re-run command: ``` slither . --filter-paths "lib|test|script" --exclude-informational --exclude-low ```