Skip to content

Simon-Busch/echidna-coverage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Echidna Coverage Reporter

A TypeScript tool to parse and analyze Echidna code coverage reports for Solidity smart contracts.

Features

  • Parse Echidna coverage output files
  • Generate coverage reports by contract and function
  • Track covered, uncovered, and reverted functions
  • Multiple output formats (table/JSON)
  • Coverage threshold checks
  • Detailed verbose reporting option

Installation

brew install Simon-busch/echidna-coverage/echidna-coverage

Usage

Basic usage:

echidna-coverage -f ./coverage.txt

With all options:

echidna-coverage -vv --format table -t 90 --contract /TestContract.sol

Options

  • -v, --verbose: Show detailed output including uncovered functions
  • -vv, --very-verbose: verbose mode + add logs of untouched lines and reverted lines
  • -f, --file <path>: Path to a specfic coverage file.txt
  • -ef, --echidna-folder <path>: path to the root of your directory containing the echidna folder. Defaults to "."
  • --format <type>: Output format - 'table' or 'json' (default: table)
  • -t, --threshold <n>: Coverage threshold percentage (default: 70)
  • -h, --help: Show help message
  • -c, --contract: filter by contract name matching

Output Example

Using normal mode

══════════════════════════════════════════════════
📄 File: vaults/TestContract.sol.sol
══════════════════════════════════════════════════
┌────────────────────────────┬────────┐
│          (index)           │ Values │
├────────────────────────────┼────────┤
│       totalFunctions       │   37   │
│   fullyCoveredFunctions    │   32   │
│        coveredLines        │  209   │
│       revertedLines        │   0    │
│       untouchedLines       │   6    │
│ functionCoveragePercentage │ 86.49  │
│   lineCoveragePercentage   │ 97.21  │
└────────────────────────────┴────────┘
══════════════════════════════════════════════════

Using verbose mode (-v)

══════════════════════════════════════════════════
📄 File: vaults/TestContract.sol.sol
══════════════════════════════════════════════════
┌────────────────────────────┬────────┐
│          (index)           │ Values │
├────────────────────────────┼────────┤
│       totalFunctions       │   37   │
│   fullyCoveredFunctions    │   32   │
│        coveredLines        │  209   │
│       revertedLines        │   0    │
│       untouchedLines       │   6    │
│ functionCoveragePercentage │ 86.49  │
│   lineCoveragePercentage   │ 97.21  │
└────────────────────────────┴────────┘

⚠️ Not fully covered functions:
┌─────────┬────────────────────────────────────────────┬─────────┬──────────┬────────────────┐
│ (index) │                functionName                │ touched │ reverted │ untouchedLines │
├─────────┼────────────────────────────────────────────┼─────────┼──────────┼────────────────┤
│    0    │                 '_getData_'truefalse   │       1        │
│    1    │                 '_init_'truefalse   │       1        │
│    2    │             '_harvestRewards'truefalse   │       1        │
│    3    │               'totalAssets'truefalse   │       2        │
│    4    │            '_autoCompoundHook'falsefalse   │       1        │
└─────────┴────────────────────────────────────────────┴─────────┴──────────┴────────────────┘
══════════════════════════════════════════════════

Using very-verbose mode (-vv)

══════════════════════════════════════════════════
📄 File: vaults/TestContract.sol.sol
══════════════════════════════════════════════════
┌────────────────────────────┬────────┐
│          (index)           │ Values │
├────────────────────────────┼────────┤
│       totalFunctions       │   37   │
│   fullyCoveredFunctions    │   32   │
│        coveredLines        │  209   │
│       revertedLines        │   0    │
│       untouchedLines       │   6    │
│ functionCoveragePercentage │ 86.49  │
│   lineCoveragePercentage   │ 97.21  │
└────────────────────────────┴────────┘

⚠️ Not fully covered functions:
┌─────────┬────────────────────────────────────────────┬─────────┬──────────┬────────────────┐
│ (index) │                functionName                │ touched │ reverted │ untouchedLines │
├─────────┼────────────────────────────────────────────┼─────────┼──────────┼────────────────┤
│    0    │                 '_getData_'truefalse   │       1        │
│    1    │                 '_init_'truefalse   │       1        │
│    2    │             '_harvestRewards'truefalse   │       1        │
│    3    │               'totalAssets'truefalse   │       2        │
│    4    │            '_autoCompoundHook'falsefalse   │       1        │
└─────────┴────────────────────────────────────────────┴─────────┴──────────┴────────────────┘

Function: _getData_
❌ Untouched lines:
assembly {

Function: _init_
❌ Untouched lines:
revert("CollVault: 0 address");

Function: _harvestRewards
❌ Untouched lines:
iVault.stake(netRewards);

Function: totalAssets
❌ Untouched lines:
address[] memory currentRewardTokens,
uint currentRewardTokensLength

Function: _autoCompoundHook
❌ Untouched lines:
return (_rewards, _token);
══════════════════════════════════════════════════

Note

  • Test and scripts files are filtered out
  • View function are trimmed out, as they are not relevant

Contributing

  1. Fork the repository
  2. Create your feature branch
  3. Submit a pull request

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published