Reentrancy in Vault.withdraw()
flagged by an AI model · unverified
An independent model spots a possible issue. On its own that's just a claim — so we don't trust it yet.

Findings have to earn their place against your system's invariants and trust boundaries — challenged on a fork, validated by independent models, and dismissed only when we can cite the exact line that disproves them.
vault-core
−3 critical, −5 high vs previous scan
Unchecked external callback before balance update
Admin rotation bypasses timelock constraint
Oracle staleness window exceeds safe threshold
Unchecked transfer return value hides failure
Missing zero-address check on initialization
Built for Solidity teams shipping on EVM
Grounded
findings tied to invariants + code
Independent
multiple models, 23 categories
Proven
criticals with fork exploit
Honest
uncertain findings flagged for review
Every finding links to architecture context and source — not opaque scanner IDs.
Finding detail
Severity, exact location, and the vulnerable code
Unchecked external callback before balance update
The withdraw function calls an external contract before updating internal state, enabling reentrant calls to drain funds.
142function withdraw(uint256 amount) external {143require(balances[msg.sender] >= amount);144token.transfer(msg.sender, amount); // external call before state update145balances[msg.sender] -= amount;146}
Exploit proof
Criticals come with a working exploit
Validation
Dismissals need a cited line
Citation verified — dropped
guard_exists · Vault.sol:142
No line defeats it — needs_manual
stays in front of a human
A false positive is dropped only when the validator can quote the exact line that disproves it.
Architecture
Findings graded against your invariants
Total supply equals the sum of balances at all times
Admin role changes cannot bypass timelock constraints
Assumptions (5) · Decisions (3)
Triage-ready
Prioritized, not dumped
Versioned and shareable — stakeholders see what engineers see
We map what the system must guarantee, then test whether each finding actually violates it.
Reentrancy in Vault.withdraw()
flagged by an AI model · unverified
An independent model spots a possible issue. On its own that's just a claim — so we don't trust it yet.
We try to prove it real — and we try to prove it false. The finding has to hold up against your invariants.
The exploit drained 142.8 ETH on a fork. It's real — and you get the working proof.
Line 142 already guards it. Dropped — and we hand you the exact line that disproves it.
Can't prove it either way? It stays in front of a human — never silently dropped.
Behind every result: your system's invariants, several independent models, and a benchmark of real historical exploits we're never allowed to tune against.
PR analysis uses prior scan context and open findings — inline comments where the risk actually is, a re-review on every push, and a clean check when it's safe to merge. Rolling out now.
141require(balances[msg.sender] >= amount);142token.transfer(msg.sender, amount);143balances[msg.sender] -= amount;
External call runs before the balance update — reentrancy risk. Add nonReentrant or move the state change above the transfer.
−3 critical, −5 high vs previous scan
Versioned scans, diffable results, shareable reports pinned to commits. Re-run on your next push at the same flat price.
Guardix
$200
per audit · one-time
Manual audit
$50,000+
per engagement
Architecture-first, adversarial validation — repeatable per commit instead of once per release. Read the full comparison →
Third-party report verification: credibility, code freshness, finding quality, owner privileges, and on-chain deployment — as one scored, shareable trust scorecard.
$50 quick scan · $200 full audit · re-runs at the same flat rate. No subscriptions or scoping calls; teams get a free-audit allowance to evaluate. The full audit includes:
See pricing details →
Architecture map, earned findings, fork proof — connect a repo and see the difference.
$200 one-time per audit. Teams get a free-audit allowance to evaluate.
Featured on