# solidity_prescan report

files scanned: 2 — findings: 21

## HIGH
- `SOL-SECRET` hostile/Vault.sol:10 — secret-shaped declaration holds a long literal — committed key material
- `SOL-TRANSFER-NOAUTH` hostile/Vault.sol:16 — function `drain` moves funds that are not the caller's with no caller identity anywhere in the body
- `SOL-REENTRANCY` hostile/Vault.sol:17 — fn `drain`: low-level .call precedes a state write — checks-effects-interactions violated; the callee re-enters before state settles
- `SOL-MINT-NOAUTH` hostile/Vault.sol:21 — function `mint` mints with no caller gate — unguarded supply
- `SOL-DELEGATECALL` hostile/Vault.sol:26 — delegatecall target `target` is a caller-supplied arg — arbitrary code executes in this contract's context
- `SOL-TXORIGIN` hostile/Vault.sol:34 — tx.origin in an auth context in `adm` — a phished intermediate call passes the check
## MEDIUM
- `SOL-TRANSFER-NOAUTH` hostile/Vault.sol:12 — function `skim` moves funds that are not the caller's on a caller-referencing path with no gate — verify the caller check lives upstream
- `SOL-UNCHECKED-CALL` hostile/Vault.sol:16 — low-level call result discarded in `drain` — a failed call reads as success downstream
- `SOL-UNCHECKED-CALL` hostile/Vault.sol:25 — low-level call result discarded in `run` — a failed call reads as success downstream
- `SOL-SELFDESTRUCT` hostile/Vault.sol:30 — selfdestruct in `kill` — force-feeds balance invariants; deprecated upstream
- `SOL-STATE-NOAUTH` hostile/Vault.sol:33 — function `adm` writes contract state with no caller identity or gate in the body
- `SOL-UNCHECKED-CALL` hostile/Vault.sol:38 — low-level call result discarded in `notify_all` — a failed call reads as success downstream
- `SOL-BLOCK-RAND` hostile/Vault.sol:43 — block-derived value feeds randomness/selection in `pick` — miners can nudge it
- `SOL-SPOT-PRICE` hostile/Vault.sol:47 — fn `price` reads a spot reserve/balance on a price path — single-block reads are flash-manipulable; prefer TWAP/median feeds
- `SOL-STATE-NOAUTH` hostile/Vault.sol:52 — function `initialize` writes contract state with no caller identity or gate in the body
- `SOL-INIT-UNGUARDED` hostile/Vault.sol:52 — public/external `initialize` has no initializer modifier or gate — anyone can take the implementation
- `SOL-BALANCE-EQ` hostile/Vault.sol:61 — exact balance equality in `done` — selfdestruct/force-fed ether breaks the invariant
## LOW
- `SOL-STATE-NOAUTH` hardened/SafeVault.sol:22 — function `deposit` writes contract state on a caller-referencing path with no explicit gate — likely caller-scoped; verify
- `SOL-STATE-NOAUTH` hostile/Vault.sol:42 — function `pick` writes contract state on a caller-referencing path with no explicit gate — likely caller-scoped; verify
- `SOL-MAX-APPROVE` hostile/Vault.sol:57 — approve/increaseAllowance with a max-uint literal in `trust` — unlimited allowance
- `SOL-ECRECOVER` hostile/Vault.sol:65 — ecrecover in `check` — verify nonce/deadline/chain binding against replay
