mythril
Installation
SKILL.md
Mythril
Mythril is a symbolic execution tool for EVM bytecode that detects security vulnerabilities in Solidity smart contracts. It uses the LASER symbolic virtual machine to explore all reachable contract states across multiple transactions, then feeds path constraints to the Z3 SMT solver to generate concrete exploit inputs. It is maintained by Consensys Diligence.
Unlike static analyzers (Slither, Semgrep) that match code patterns, Mythril proves whether a vulnerability is actually exploitable by constructing valid transaction sequences that trigger it. This makes it slower but significantly more precise for certain vulnerability classes.
What You Probably Got Wrong
LLMs generate bad Mythril commands. These are the blind spots that cause wasted time and missed bugs.
- Mythril is SLOW. Always set timeouts. A single-contract analysis with default settings can run for 30+ minutes and consume 8+ GB of RAM. Production usage requires
--execution-timeoutand--solver-timeout. Without them, your CI pipeline will hang indefinitely. - Default analysis depth is often too shallow. Without the
-t(transaction count) flag, Mythril defaults to 2 transactions. Many real exploits (reentrancy across multiple functions, multi-step oracle manipulation) require-t 3or higher. But-t 3is exponentially slower than-t 2— 10x to 100x slower. - Docker is easier than pip install for most users. Mythril depends on Z3 solver, py-solc-x, and specific Python versions. Docker (
mythviamythril/myth) eliminates dependency hell. Pip install frequently fails due to Z3 build issues on macOS and certain Linux distros. - Mythril analyzes bytecode, not source. It compiles your Solidity to bytecode first, then symbolically executes the bytecode. This means it does not understand variable names, function names, or Solidity-level constructs. The output references bytecode offsets, not source lines — unless you provide source maps.
myth analyzeis the correct command. The oldmyth -xsyntax is deprecated. Usemyth analyzefor file analysis andmyth analyze --addressfor on-chain contracts.myth -xmay still work but produces deprecation warnings.- Mythril does NOT replace static analysis. It finds different bugs. Slither catches style issues, missing access control patterns, and centralization risks in seconds. Mythril catches reachable state-dependent exploits in minutes to hours. Use both.
- False positives happen, especially with
assertviolations. Mythril reports any reachableassert(false)as a vulnerability. Customassertstatements used for invariant checking will trigger SWC-110 findings. Triage the output — not every finding is a real bug. - Solc version must match the contract pragma. Mythril calls solc internally. If the installed solc version does not satisfy the pragma, compilation fails silently or with cryptic errors. Use
--solvto specify the version.