> For the complete documentation index, see [llms.txt](https://cyfrin.gitbook.io/cyfrin-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cyfrin.gitbook.io/cyfrin-docs/project-configuration/list-of-supported-detectors.md).

# List of Supported Detectors

Aderyn CLI and Aderyn VS Code extension share the same list of supported detectors.

### High-severity detectors

<table><thead><tr><th>Name</th><th>Description</th><th data-hidden></th></tr></thead><tbody><tr><td>hash-collision-due-to-abi-encode-packed</td><td><code>abi.encodePacked()</code> should not be used with dynamic types when passing the result to a hash function such as <code>keccak256()</code></td><td></td></tr><tr><td>arbitrary-transfer-from</td><td>Arbitrary <code>from</code> passed to <code>transferFrom</code> (or <code>safeTransferFrom</code>)</td><td></td></tr><tr><td>unprotected-initializer</td><td>Unprotected initializer</td><td></td></tr><tr><td>unsafe-casting-detector</td><td>Unsafe Casting</td><td></td></tr><tr><td>enumerable-loop-removal</td><td>EnumerableSet.remove in loop corrupts the set order.</td><td></td></tr><tr><td>experimental-encoder</td><td>Experimental ABI Encoder</td><td></td></tr><tr><td>incorrect-shift-order</td><td>Incorrect Assembly Shift Parameter Order</td><td></td></tr><tr><td>storage-array-edit-with-memory</td><td>Storage Array Edited with Memory</td><td></td></tr><tr><td>multiple-constructors</td><td>Contract Has Multiple Constructors</td><td></td></tr><tr><td>reused-contract-name</td><td>Contract Name Reused in Different Files</td><td></td></tr><tr><td>nested-struct-in-mapping</td><td>Nested Structs in Mappings pre-0.5.0</td><td></td></tr><tr><td>selfdestruct-identifier</td><td>Depracated EVM Instruction for <code>selfdestruct</code> should not be used.</td><td></td></tr><tr><td>dynamic-array-length-assignment</td><td>Array length value has a direct assignment</td><td></td></tr><tr><td>incorrect-caret-operator</td><td>Incorrect use of caret operator on a non hexadcimal constant</td><td></td></tr><tr><td>yul-return</td><td>Shadowed State Variables in Inheritance Hierarchy</td><td></td></tr><tr><td>state-variable-shadowing</td><td>Shadowed State Variables in Inheritance Hierarchy</td><td></td></tr><tr><td>unchecked-send</td><td>Unchecked <code>bool success</code> value for send call.</td><td></td></tr><tr><td>misused-boolean</td><td>Misused boolean with logical operators</td><td></td></tr><tr><td>sends-ether-away-without-checking-address</td><td>Functions send eth away from contract but performs no checks on any address.</td><td></td></tr><tr><td>delegate-call-on-unchecked-address</td><td>Delegatecall made by the function without checks on any address.</td><td></td></tr><tr><td>tautological-compare</td><td>Tautological comparison.</td><td></td></tr><tr><td>rtlo</td><td>RTLO character detected in file.</td><td></td></tr><tr><td>dangerous-unary-operator</td><td>Dangerous unary operator found in assignment.</td><td></td></tr><tr><td>tautology-or-contradiction</td><td>Tautology or Contradiction in comparison.</td><td></td></tr><tr><td>strict-equailty-check-on-contract-balance</td><td>Dangerous strict equality checks on contract balances.</td><td></td></tr><tr><td>signed-storage-array</td><td>Signed array in storage detected for compiler version <code>&#x3C;0.5.10</code></td><td></td></tr><tr><td>weak-randomness</td><td>Weak Randomness</td><td></td></tr><tr><td>pre-declared-local-variable-usage</td><td>Usage of variable before declaration.</td><td></td></tr><tr><td>delete-nested-mapping</td><td>Deletion from a nested mappping.</td><td></td></tr><tr><td>tx-origin-used-for-auth</td><td>Potential use of <code>tx.origin</code> for authentication.</td><td></td></tr><tr><td>msg-value-in-loop</td><td>Loop contains <code>msg.value</code>.</td><td></td></tr><tr><td>contract-locks-ether</td><td>Contract locks Ether without a withdraw function.</td><td></td></tr><tr><td>incorrect-erc721-interface</td><td>Incorrect ERC721 interface.</td><td></td></tr><tr><td>incorrect-erc20-interface</td><td>Incorrect ERC20 interface.</td><td></td></tr><tr><td>out-of-order-retryable</td><td>Out of order retryable transactions.</td><td></td></tr><tr><td>constant-function-changing-state</td><td>Constant functions changing state</td><td></td></tr><tr><td>function-selector-collision</td><td>Function selector collides with other functions unchecked-low-level-call</td><td></td></tr><tr><td>unchecked-low-level-call</td><td> Unchecked Low level calls</td><td></td></tr></tbody></table>

### Low-severity detectors

<table><thead><tr><th>Name</th><th>Description</th><th data-hidden></th></tr></thead><tbody><tr><td>delegate-call-in-loop</td><td>Using <code>delegatecall</code> in loop may consume excessive gas</td><td></td></tr><tr><td>centralization-risk</td><td>Centralization Risk for trusted owners</td><td></td></tr><tr><td>solmate-safe-transfer-lib</td><td>Solmate's SafeTransferLib does not check for token contract's existence</td><td></td></tr><tr><td>raw-ecrecover</td><td><code>ecrecover</code> is susceptible to signature malleability</td><td></td></tr><tr><td>deprecated-oz-functions</td><td>Deprecated OpenZeppelin functions should not be used</td><td></td></tr><tr><td>unsafe-erc20-functions</td><td>Unsafe ERC20 Operations should not be used</td><td></td></tr><tr><td>unspecific-solidity-pragma</td><td>Solidity pragma should be specific, not wide</td><td></td></tr><tr><td>no-zero-address-check</td><td>Missing checks for <code>address(0)</code> when assigning values to address state variables</td><td></td></tr><tr><td>useless-public-function</td><td><code>public</code> functions not used internally could be marked <code>external</code></td><td></td></tr><tr><td>literal-instead-of-constant</td><td>Define and use <code>constant</code> variables instead of using literals</td><td></td></tr><tr><td>require-without-string</td><td>Empty <code>require()</code> / <code>revert()</code> statements</td><td></td></tr><tr><td>non-reentrant-is-not-before-others</td><td>The <code>nonReentrant</code> <code>modifier</code> should occur before all other modifiers</td><td></td></tr><tr><td>block-timestamp-is-weak-deadline</td><td>Using <code>block.timestamp</code> for swap deadline offers no protection</td><td></td></tr><tr><td>unsafe-oz-erc721-mint</td><td>Using <code>ERC721::_mint()</code> can be dangerous</td><td></td></tr><tr><td>push-zero-opcode</td><td>PUSH0 is not supported by all chains</td><td></td></tr><tr><td>useless-modifier</td><td>Modifiers invoked only once can be shoe-horned into the function</td><td></td></tr><tr><td>empty-block</td><td>Empty Block</td><td></td></tr><tr><td>large-numeric-literal</td><td>Large literal values multiples of 10000 can be replaced with scientific notation</td><td></td></tr><tr><td>useless-internal-function</td><td>Internal functions called only once can be inlined</td><td></td></tr><tr><td>contract-with-todos</td><td>Contract still has TODOs</td><td></td></tr><tr><td>inconsistent-type-names</td><td>Inconsistency in declaring uint256/uint (or) int256/int variables within a contract. Use explicit size declarations (uint256 or int256).</td><td></td></tr><tr><td>useless-error</td><td>Unused Custom Error</td><td></td></tr><tr><td>reverts-and-requires-in-loops</td><td>Loop contains <code>require</code>/<code>revert</code> statements</td><td></td></tr><tr><td>division-before-multiplication</td><td>Incorrect Order of Division and Multiplication</td><td></td></tr><tr><td>redundant-statements</td><td>Redundant statements have no effect.</td><td></td></tr><tr><td>public-variable-read-in-external-context</td><td>Public variables of a contract read in an external context (using <code>this</code>).</td><td></td></tr><tr><td>unused-state-variable</td><td>Potentially unused <code>private</code> / <code>internal</code> state variables found.</td><td></td></tr><tr><td>constant-functions-assembly</td><td>Functions declared <code>pure</code> / <code>view</code> but contains assembly</td><td></td></tr><tr><td>redundant-boolean-equality</td><td>Boolean equality is not required.</td><td></td></tr><tr><td>local-variable-shadowing</td><td>Local variable shadows state variables in the contract hirearchy</td><td></td></tr><tr><td>uninitialized-local-variable</td><td>Uninitialized local variables.</td><td></td></tr><tr><td>return-bomb</td><td>Return Bomb</td><td></td></tr><tr><td>function-initializing-state</td><td>Function initializing state.</td><td></td></tr><tr><td>dead-code</td><td>Dead Code</td><td></td></tr><tr><td>array-length-not-cached</td><td>Loop condition contains <code>state_variable.length</code> that could be cached outside.</td><td></td></tr><tr><td>state-change-in-assert</td><td>Incorrect use of <code>assert()</code></td><td></td></tr><tr><td>costly-operations-inside-loops</td><td>Costly operations inside loops.</td><td></td></tr><tr><td>builtin-symbol-shadow</td><td>Builtin Symbol Shadowing</td><td></td></tr><tr><td>void-constructor</td><td>Void constructor</td><td></td></tr><tr><td>missing-inheritance</td><td>Potentially missing inheritance for contract.</td><td></td></tr><tr><td>unused-import</td><td>Unused Imports</td><td></td></tr><tr><td>function-pointer-in-constructor</td><td>Function pointers used in constructors.</td><td></td></tr><tr><td>state-variable-could-be-constant</td><td>State variable could be declared constant</td><td></td></tr><tr><td>state-variable-changes-without-events</td><td>State variable changes but no event is emitted.</td><td></td></tr><tr><td>state-variable-could-be-immutable</td><td>State variable could be declared immutable</td><td></td></tr><tr><td>multiple-placeholders</td><td>Modifier has multiple placeholders.</td><td></td></tr><tr><td>unchecked-return</td><td>Return value of the function call is not checked.</td><td></td></tr></tbody></table>
