Smart contract security

Prove your contracts are safe from bugs.

Solbend checks every way an attacker could drain your contracts. You get a proof, or the exact line to fix, without having to write any lemmas yourself.

01What we solve

Smart contract audits are hard, expensive, and not definitive.

Everyone finds out the hard way.

Drained by hackers since 2016

−$5.57B

797 incidents across 7 bug classes

Access control

A function that should have been locked was callable by anyone.

−$611M
Parity Multisig 2017
−$150M
UPCX 2025
−$70M
−$62.5M
−$30M
−$17.6M
Table
Stolen
Poly Network$611M
Parity Multisig$150M
UPCX$70M
Munchables$62.5M
Parity Wallet$30M
Wintermute$17.6M

Total drained

−$1.24B

193 incidents since 2016

Amounts from the DefiLlama hacks database, on EVM chains since 2016, by its primary class, plus a few large attacks the database misses, recorded by hand from the reports. Incidents link to rekt.news where its archive covers them and to the project's own report where it does not.

02Why Solbend

Scanners only flag. We can prove.

Other scanners match patterns and leave you to review the noise. Other provers need experts to write specs by hand. Solbend proves or disproves safety for you.

Scanners compared with Solbend
Other ScannersSolbend
When code is safeNothing matched a known patternProven safe
When code has a bugReview it by handUnproven, with attack if one exists
On safe code that looks riskyOften flagged as a false positiveProven safe

Tested on four public research datasets

SmartBugs curated (143 contracts), SolidiFI (50 contracts), Not So Smart Contracts (25 contracts) and Consolidated Ground Truth (1422 contracts), the public benchmarks researchers use to measure security tools.

188/237
vulnerable contracts caught
0
marked safe by mistake
100%
of exploitable planted bugs found

Vulnerable contracts caught

Contracts the datasets call reentrant. Green is a contract the dataset called safe that Solbend proved reentrant, each attack written out and checked on a test chain.

  • Caught
  • Proven safe, label disputed
  • Not checked
  • Marked safe
SmartBugs curated
100% 31/31
SolidiFI
100% 50/50
Not So Smart Contracts
100% 3/3
Consolidated Ground Truth
90.8% 139/153
Table
CaughtProven safe, label disputedNot checkedMarked safeTotal
SmartBugs curated3100031
SolidiFI5000050
Not So Smart Contracts30003
Consolidated Ground Truth10435140153

Safe contracts proven safe

Contracts the datasets call safe, plus generated variants built to be safe. A flag on one is a false alarm, or a pattern Solbend cannot prove yet. Green is a contract the dataset called safe that Solbend proved reentrant, each attack written out and checked. Of the 432 generated variants that are not safe, every one is flagged.

  • Proven safe
  • Flagged, found reentrant (label disputed)
  • Flagged
  • Not checked
Consolidated Ground Truth (labelled safe)
89.4% 1,134/1,269
Generated variants (safe by construction)
99.3% 1,060/1,068
Table
Proven safeFlagged, found reentrant (label disputed)FlaggedNot checkedTotal
Consolidated Ground Truth (labelled safe)1,1151958771,269
Generated variants (safe by construction)1,0600801,068

Planted bugs found, by tool

389 exploitable reentrancy bugs planted across 50 real contracts, found by each tool.

Solbend
100% 389/389
Slither
100% 389/389
Oyente
86.1% 335/389
Securify
83.8% 326/389
Mythril
66.3% 258/389
SmartCheck
0% 0/389
Table
FoundTotal
Solbend389389
Slither389389
Oyente335389
Securify326389
Mythril258389
SmartCheck0389

Every bug class, not just reentrancy

Solbend can catch different kinds of bugs. Slither has no check at all for 6 of these classes. Mythril has none for 8. Solbend covers every bug class, and where it can, it proves whether the code is safe or not.

Detection rate by bug class
Bug classMythrilSlitherSolbend
Re-entrancySolidiFI line-level, 389 exploitable planted bugs66%100%100%
Access controlprivileged code callable by anyone31%31%100%
Owner trust / rugpullowner can take user value or accessno checkno check48%
Arbitrary storage writea write reaches any storage slot70%40%50%
Controlled delegatecallcaller chooses the code that runs89%100%100%
Unprotected initializeranyone can set the authority0%30%80%
Uninitialized storage pointera write lands at slot zerono check100%90%
Upgrade storage collisionan upgrade moves a live slotno check100%100%
Show all 21 classes
Unprotected selfdestructanyone can destroy the contract78%89%67%
Approval draina caller spends an allowance it was not given60%40%100%
Oracle manipulationa price can be moved before value movesno checkno check93%
Double claimthe same claim pays more than once0%no check100%
Repeatable withdrawala withdrawal can be repeated25%no check100%
Read-only reentrancya view is read while a callback is liveno checkno check100%
Solvencythe contract cannot pay what it owes0%11%89%
Weak randomnessa caller can predict or choose the outcome42%58%92%
State-variable shadowingtwo declarations disagreeno check100%90%
Roundingrounding moves value in the wrong directionno check0%100%
Strict balance equalityforced ETH breaks an equalityno check100%87%
Griefing / DoSa caller can block another user20%20%100%
No free lunchvalue is created without a matching debit11%no check78%

The 20 classes are the labelled datasets/classes matrix, run 2026-10-24. Slither 0.11.6 and Mythril 0.24.8 at default settings. The Re-entrancy row is SolidiFI line-level, Mythril from the SolidiFI paper (2020). Solbend's figures are the published 2026-10-24 snapshot.

Method
  • Measured on the public research datasets above and the labelled class matrix (datasets/classes, 437 contracts, 231 buggy and 206 safe), 2026-10-24. A buggy contract counts as caught when a finding of its class lands in the vulnerable function, or in a function it calls internally. For declaration classes a finding anywhere in the contract counts.
  • A safe contract Solbend proves reentrant is counted in green, and every one of those proofs was reviewed by independent auditors and attacked on a test chain. Where a dataset label relies on a low-gas payout, an owner-chosen address or a contract the code creates, the report names it.
  • Slither 0.11.6 and Mythril 0.24.8 run at default settings. A dash in the table means a tool has no check for that class. Solbend's class figures are the published 2026-10-24 snapshot.

03How it works

A proof, or a precise warning.

Solbend writes the proof itself, nothing for you to write. If it cannot prove a contract safe, it shows exactly where, and on Professional it then hunts for a real attack.

Proven
Re-entering reaches only states that plain transactions reach. Each proof is rechecked by Bend's kernel, proven consistent in Lean.
Not proven
No proof and no confirmed attack. You see where the proof breaks, to review by hand.
Attack found
A confirmed bug, on Professional. Z3 finds the attack, Bend and Lean confirm it.

A contract that uses code Solbend cannot model yet gets no verdict.

exit 1
$ solbend examples/BankDAO.sol

Reentrancy: NOT PROVEN
  ✗ State changed after other code gets control
      withdraw  calls out at BankDAO.sol:16
        then BankDAO.sol:18: balances[msg.sender] = 0
  ✓ Call no untrusted code
      deposit

Invariants: PROVEN without reentrancy
  ✓ sum(balances) <= balance

Counterexample: FOUND  (bend checked it: CEX.bend proves reentrancy_safe false)
    deployed  constructor(), by 0x1
    0x3       deposit(), sending 1 wei
    0x1       deposit(), sending 1 wei
    0x3       withdraw()
                BankDAO.sol:16 sends 1 wei to 0x3, which calls back:
                  0x3  withdraw()
                         BankDAO.sol:16 sends 1 wei to 0x3
  sum(balances) <= balance fails there, and every plain transaction keeps it:
    before  sum(balances) = 2, balance = 2
    after   sum(balances) = 1, balance = 0

Every proof and every attack is double-checked by an independent checker.

04Pricing

Pay per scan, or per repository.

Starter

$199per scan

For public repositories.

  • One contract on main branch
  • Download proof files as .tar.gz
  • Public repositories only
Try now

Enterprise

Custom

For auditing firms, security researchers and teams with many projects.

  • Everything in Professional
  • Volume pricing
  • No-source bytecode scan
  • Priority support
Contact us

05FAQ

Questions, answered.

Do I need to write specs or proofs?

No. Unlike Certora prover, Solbend generates invariants and proofs automatically. You just connect a repository and pick a branch.

What does Solbend check?

It specializes in reentrancy and checks it in depth. Scans also cover overflows, access control, stuck funds, denial of service, front-running, ERC-20 rules and who can upgrade, and flag risky patterns such as tx.origin checks, weak randomness and unchecked calls.

What if Solbend cannot prove a contract as safe?

Solbend will say so, because it never assumes safety. The result is Not proven, with where the proof breaks. On Professional, Solbend also searches for a real attack, and when it confirms one the result is Attack found, with every call step by step.

Can I check a proof myself?

Yes. Download a scan's .tar.gz proof files and check them with Bend on any machine. With --verdict, Bend's kernel, whose logic is proven consistent in Lean, rechecks them too.

Which Solidity versions are supported?

Solidity 0.4.11 and newer.

Does Solbend support Vyper?

Yes, Vyper 0.2.16 and newer. Solbend proves a Vyper contract from the bytecode Vyper compiles, and replays any attack it finds on that same bytecode. A contract that uses delegatecall is not supported yet, because the code it runs is not known until the call happens.

Are Foundry and Hardhat projects supported?

Yes. Solbend detects a Foundry or Hardhat project and installs its git submodules and npm packages in an isolated sandbox before the scan. Setup commands from a .solbend.yml, or saved for the repository on the dashboard, run there too. Tested on OpenZeppelin, Uniswap v3 and v4, Aave v3, Safe, Compound, Morpho, Solady and Solmate.

Can I run Solbend in CI?

Yes. Install the Solbend GitHub App to get a check on every pull request, or run the solbend-ci command (npx @encribe/solbend-ci) or the encribe/solbend-action GitHub Action from any CI on Professional.

Get Started

Only scan your own repositories. Scanning other code is against our ToS.