A TypeScript utility for parsing Medusa, Echidna, and Halmos fuzzing / symbolic execution logs.
Used in:
- Recon VSCode Extension
- https://getrecon.xyz/tools/medusa
- https://getrecon.xyz/tools/echidna
- https://getrecon.xyz/tools/halmos
https://www.npmjs.com/package/@recon-fuzz/log-parser
yarn add @recon-fuzz/log-parserimport{processLogs,Fuzzer}from'@recon-fuzz/log-parser';// Process Medusa logsconstmedusaResults=processLogs(medusaLogContent,Fuzzer.MEDUSA);// Process Echidna logsconstechidnaResults=processLogs(echidnaLogContent,Fuzzer.ECHIDNA);// Process Halmos logsconsthalmosResults=processLogs(halmosLogContent,Fuzzer.HALMOS);Processes fuzzing logs and returns structured results.
logs: string- The raw log content as a stringtool: Fuzzer- The tool used (Fuzzer.MEDUSA | Fuzzer.ECHIDNA | Fuzzer.HALMOS)
interfaceFuzzingResults{duration: string;coverage: number;failed: number;passed: number;results: any[];traces: any[];brokenProperties: any[];numberOfTests: number;}Medusa, Echidna and Halmos logs can be converted into Foundry test cases using the provided utility functions.
// Echidna -> Foundry test functionsimport{echidnaLogsToFunctions}from'@recon-fuzz/log-parser';constechidnaFoundryTests=echidnaLogsToFunctions(echidnaLogs,"test_identifier","brokenProperty",// the property name that failed{roll: true,time: true,prank: true}// vm helpers configuration);// Medusa -> Foundry test functionsimport{medusaLogsToFunctions}from'@recon-fuzz/log-parser';constmedusaFoundryTests=medusaLogsToFunctions(medusaLogs,"test_identifier",{roll: true,time: true,prank: true});Halmos produces counterexamples consisting of parameter assignments and a symbolic execution call sequence. These can be transformed into Foundry tests.
import{halmosLogsToFunctions}from'@recon-fuzz/log-parser';// Convert all broken properties (if any) to test functionsconsthalmosFoundryTests=halmosLogsToFunctions(halmosLogs,"test_identifier");The conversion handles:
- VM state manipulation (block numbers, timestamps)
- Actor simulation (pranks for different senders)
- Function call sequences / symbolic traces
- Parameter reconstruction for Halmos counterexamples
- Special data types (addresses, bytes)
Generated tests include the exact sequence of calls that triggered the property violation, making it easy to reproduce and debug issues found during fuzzing or symbolic exploration.
- Node.js (>= 14.x)
- yarn or npm
- Clone the repository
- Install dependencies:
yarn installyarn build- Build the packageyarn test- Run testsyarn lint- Run linting