Free snapshot slots open this week info@inversez.com
DetectionVulnerabilitiesToolsAuditsPricingBlogFree monitoring assessmentContact
Home/Tools/Solidity scanner
Free tool · No signup

Solidity vulnerability scanner

Paste a contract. Thirteen vulnerability patterns are checked as you type, entirely inside your browser. Your source code is never uploaded, stored, or transmitted anywhere. There is no server to send it to.

Runs offline · No account · No rate limit. Open the page, paste, read.
Press Escape before Tab to move focus out of the editor.
Findings Heuristic · not an audit
Idle
Honest limits

What a clean result actually means.

It means thirteen text patterns did not match. Nothing more than that.

This tool does not compile your code. It does not follow values between functions, model your protocol’s economics, read your other contracts, or understand what you intended the code to do. It cannot tell you whether your access control makes sense, whether your incentives can be gamed, or whether two individually-correct functions combine into a bug.

Those are the findings that matter, and every one we have ever reported that mattered came from a person reading the code slowly, not from pattern matching.

Use this the way you would use a spell-checker: it catches the obvious, and its silence proves nothing.

Known blind spots, stated plainly

Inline assembly is not analysed. Read-only reentrancy is not detected as reentrancy. Cross-contract and cross-function state flow is invisible to it. Proxy upgrade logic beyond the initializer check is out of scope. Anything expressed through an unusual idiom may simply not match.

Coverage

The thirteen patterns it checks.

Each maps to a vulnerability class we check by hand during a real review. Follow any of them for a full worked explanation with vulnerable code, a fix, and a test.

SWC-107

Reentrancy

An external call hands control to another address before the contract updates its own state. Detects low-level calls, ERC777 hooks, ERC721 safe-transfer callbacks, and typed interface calls to a caller-controlled address.

Critical
SWC-106

Unprotected selfdestruct

A function reachable by anyone can destroy the contract and forward its balance to the caller.

Critical
SWC-118

Unprotected initializer

An externally callable initialize() with no initializer modifier, allowing anyone to claim ownership, repeatedly.

High
SWC-115

tx.origin authorisation

Authentication against the transaction originator rather than the immediate caller, which any contract the owner touches can defeat.

High
SWC-120

Block-derived randomness

Randomness built from block.timestamp, prevrandao, or blockhash, all visible to or influenced by the proposer.

High
Oracle

Spot price from AMM reserves

Prices derived from instantaneous reserves or slot0, which a flash loan can move and restore inside one transaction.

High
SWC-121

Signature replay

A recovered signature with no nonce consumed and no deadline checked, so the same bytes can be submitted repeatedly.

High
SWC-101

Pre-0.8 arithmetic without SafeMath

A pragma older than 0.8.0 with no SafeMath import, where unsigned subtraction below zero wraps instead of reverting.

High
SWC-101

Unchecked downcast

Solidity 0.8 checks arithmetic but not explicit casts. uint128(x) truncates silently when the value does not fit.

Medium
SWC-104

Unchecked call return value

send() and call() return a boolean rather than reverting. Ignoring it lets execution continue as though the transfer succeeded.

Medium
SWC-113

External calls in an unbounded loop

A payout loop over an array anyone can grow, where one reverting recipient or enough entries bricks the function permanently.

Medium
SWC-132

Exact balance comparison

Logic gated on address(this).balance ==, which a stranger can break forever by force-sending ETH.

Medium
SWC-116

Timestamp-dependent control flow

Conditions on block.timestamp. Fine for day-scale deadlines, exploitable when it gates a payout or a short window.

Low

All 12 vulnerability guides

How it works

Four stages, no server.

01

Mask

Comments and string literals are blanked to spaces, preserving length and line breaks. A vulnerability written inside a comment does not fire.

02

Parse

Function bodies are extracted by brace matching, so the tool knows whether a call and a state write sit inside the same function.

03

Detect

Thirteen detectors run over the masked source. Locals are distinguished from storage, so a temporary variable is not mistaken for state.

04

Render

Findings sort by severity, deduplicate, and display with two lines of context either side. Everything above happens in your tab.

A person reads it in 72 hours. Free.

Send one contract and a named auditor reviews it by hand: every issue found at that depth, with severity, impact and a concrete fix, plus an honest list of what was not covered.

Get a free assessment See pricing

Why we published this

Most audit firms put a contact form where their expertise should be. We would rather show you thirteen of the checks we run, hand you the tool, and let you judge whether we know what we are doing before you talk to us.

If it finds nothing and you still feel uneasy, that instinct is worth more than the tool. That is what the free snapshot is for.