Skip to main content
CLI Options
Updated over a month ago
aderyn [OPTIONS]

aderyn <ROOT>

The root directory of your Solidity project.

Input:

aderyn .


--help

Outputs the options and arguments available when using Aderyn.

Rust based Solidity AST analyzer Usage: aderyn [OPTIONS] <ROOT> Arguments: <ROOT> Foundry or Hardhat (or other) project root directory Options: -o, --output <OUTPUT> Desired file path for the final report (will overwrite existing one) [default: report.md] -s, --scope <SCOPE> List of path strings to include, delimited by comma (no spaces). Any solidity file path not containing these strings will be ignored -e, --exclude <EXCLUDE> List of path strings to exclude, delimited by comma (no spaces). Any solidity file path containing these strings will be ignored -n, --no-snippets Do not include code snippets in the report (reduces report size in large repos) -h, --help Print help -V, --version Print version

-o, --output <OUTPUT>

- The default output is report.md. This can be renamed to anything you'd like. Currently supported formats include Markdown and JSON. JSON is particularly useful in CI/CD pipelines to compile properties from the generated report.

Examples:

aderyn -o my-report.json
aderyn -o my-report.md

-s, --src <SOURCE_PATH>

The path to the source contracts folder. If not provided, the ROOT directory will be used.

If your project has a foundry.toml file in the ROOT, then aderyn will obtain this value from it.

Examples based on the below directory structure:

└── my_project/ ├── hardhat.config.js ├── contracts/ │ ├── Apples.sol │ └── Bananas.sol ├── script/ │ └── Deploy.dol ├── test/ │ ├── Apples.test.js │ └── Bananas.test.js ├── util/ └── node_modules/

Command:

aderyn --src contracts/


-i, --path-includes <PATH_INCLUDES>

A string, or list of strings separated by commas that pertain to the filenames/directories in scope. These are the files/directories that Aderyn will be run on.

Note: strings passed to the scope command are case-sensitive.

Examples will be based on the below repo:

├── src │ ├── interfaces │ │ ├── IFlashLoanReceiver.sol │ │ ├── IPoolFactory.sol │ │ ├── ITSwapPool.sol │ │ └── IThunderLoan.sol │ ├── protocol │ │ ├── AssetToken.sol │ │ ├── OracleUpgradeable.sol │ │ └── ThunderLoan.sol │ └── upgradedProtocol │ └── ThunderLoanUpgraded.sol

Input:

aderyn -i src/interfaces

Output:

Filepath

nSLOC

src/interfaces/IFlashLoanReceiver.sol

13

src/interfaces/IPoolFactory.sol

4

src/interfaces/ITSwapPool.sol

4

src/interfaces/IThunderLoan.sol

4

Total

25

Input:

aderyn --path-includes Thund

Output:

Filepath

nSLOC

src/interfaces/IThunderLoan.sol

4

src/protocol/ThunderLoan.sol

176

src/upgradedProtocol/ThunderLoanUpgraded.sol

172

Total

352


-x, --path-excludes <PATH_EXCLUDE>

the opposite of --path-includes, this will exclude any files or directories that contain the passed string.

Input:

aderyn -x Thunder

Output:

Filepath

nSLOC

src/interfaces/IFlashLoanReceiver.sol

13

src/interfaces/IPoolFactory.sol

4

src/interfaces/ITSwapPool.sol

4

src/protocol/AssetToken.sol

65

src/protocol/OracleUpgradeable.sol

23

Total

109


-n, --no-snippets

The default behavior is to include the line number, as well as snippets of code where the vulnerability is detected within the generated report. This can potentially take up a lot of space in the report. This option will disable the snippets, leaving the line number readouts only.

Input (default):

aderyn -i Thunder`

  • Found in src/protocol/ThunderLoan.sol Line: 239

    function setAllowedToken(IERC20 token, bool allowed) external onlyOwner returns (AssetToken) {

Input (no-snippets):

aderyn -i Thunder -n aderyn -i Thunder --no-snippets

Output:

  • Found in src/protocol/ThunderLoan.sol Line: 239


aderyn --version

Outputs the current version of Aderyn installed

Input:

aderyn -v aderyn --version

Output:

aderyn 0.0.13


aderyn registry

Output the list of detectors.

Input:

aderyn registry

Output:

Detector Registry Name Title Low centralization-risk - Centralization Risk for trusted owners solmate-safe-transfer-lib - Solmate's SafeTransferLib does not check for token contract's existence avoid-abi-encode-packed - `abi.encodePacked()` should not be used with dynamic types when passing the result to a hash function such as `keccak256()` ecrecover - `ecrecover` is susceptible to signature malleability ... High ...
Did this answer your question?