Supported detectors

High-severity detectors

Name
Description

hash-collision-due-to-abi-encode-packed

abi.encodePacked() should not be used with dynamic types when passing the result to a hash function such as keccak256()

arbitrary-transfer-from

Arbitrary from passed to transferFrom (or safeTransferFrom)

unprotected-initializer

Unprotected initializer

unsafe-casting-detector

Unsafe Casting

enumerable-loop-removal

EnumerableSet.remove in loop corrupts the set order.

experimental-encoder

Experimental ABI Encoder

incorrect-shift-order

Incorrect Assembly Shift Parameter Order

storage-array-edit-with-memory

Storage Array Edited with Memory

multiple-constructors

Contract Has Multiple Constructors

reused-contract-name

Contract Name Reused in Different Files

nested-struct-in-mapping

Nested Structs in Mappings pre-0.5.0

selfdestruct-identifier

Depracated EVM Instruction for selfdestruct should not be used.

dynamic-array-length-assignment

Array length value has a direct assignment

incorrect-caret-operator

Incorrect use of caret operator on a non hexadcimal constant

yul-return

Shadowed State Variables in Inheritance Hierarchy

state-variable-shadowing

Shadowed State Variables in Inheritance Hierarchy

unchecked-send

Unchecked bool success value for send call.

misused-boolean

Misused boolean with logical operators

sends-ether-away-without-checking-address

Functions send eth away from contract but performs no checks on any address.

delegate-call-on-unchecked-address

Delegatecall made by the function without checks on any address.

tautological-compare

Tautological comparison.

rtlo

RTLO character detected in file.

dangerous-unary-operator

Dangerous unary operator found in assignment.

tautology-or-contradiction

Tautology or Contradiction in comparison.

strict-equailty-check-on-contract-balance

Dangerous strict equality checks on contract balances.

signed-storage-array

Signed array in storage detected for compiler version <0.5.10

weak-randomness

Weak Randomness

pre-declared-local-variable-usage

Usage of variable before declaration.

delete-nested-mapping

Deletion from a nested mappping.

tx-origin-used-for-auth

Potential use of tx.origin for authentication.

msg-value-in-loop

Loop contains msg.value.

contract-locks-ether

Contract locks Ether without a withdraw function.

incorrect-erc721-interface

Incorrect ERC721 interface.

incorrect-erc20-interface

Incorrect ERC20 interface.

out-of-order-retryable

Out of order retryable transactions.

constant-function-changing-state

Constant functions changing state

function-selector-collision

Function selector collides with other functions unchecked-low-level-call

unchecked-low-level-call

Unchecked Low level calls

Low-severity detectors

Name
Description

delegate-call-in-loop

Using delegatecall in loop may consume excessive gas

centralization-risk

Centralization Risk for trusted owners

solmate-safe-transfer-lib

Solmate's SafeTransferLib does not check for token contract's existence

raw-ecrecover

ecrecover is susceptible to signature malleability

deprecated-oz-functions

Deprecated OpenZeppelin functions should not be used

unsafe-erc20-functions

Unsafe ERC20 Operations should not be used

unspecific-solidity-pragma

Solidity pragma should be specific, not wide

no-zero-address-check

Missing checks for address(0) when assigning values to address state variables

useless-public-function

public functions not used internally could be marked external

literal-instead-of-constant

Define and use constant variables instead of using literals

require-without-string

Empty require() / revert() statements

non-reentrant-is-not-before-others

The nonReentrant modifier should occur before all other modifiers

block-timestamp-is-weak-deadline

Using block.timestamp for swap deadline offers no protection

unsafe-oz-erc721-mint

Using ERC721::_mint() can be dangerous

push-zero-opcode

PUSH0 is not supported by all chains

useless-modifier

Modifiers invoked only once can be shoe-horned into the function

empty-block

Empty Block

large-numeric-literal

Large literal values multiples of 10000 can be replaced with scientific notation

useless-internal-function

Internal functions called only once can be inlined

contract-with-todos

Contract still has TODOs

inconsistent-type-names

Inconsistency in declaring uint256/uint (or) int256/int variables within a contract. Use explicit size declarations (uint256 or int256).

useless-error

Unused Custom Error

reverts-and-requires-in-loops

Loop contains require/revert statements

division-before-multiplication

Incorrect Order of Division and Multiplication

redundant-statements

Redundant statements have no effect.

public-variable-read-in-external-context

Public variables of a contract read in an external context (using this).

unused-state-variable

Potentially unused private / internal state variables found.

constant-functions-assembly

Functions declared pure / view but contains assembly

redundant-boolean-equality

Boolean equality is not required.

local-variable-shadowing

Local variable shadows state variables in the contract hirearchy

uninitialized-local-variable

Uninitialized local variables.

return-bomb

Return Bomb

function-initializing-state

Function initializing state.

dead-code

Dead Code

array-length-not-cached

Loop condition contains state_variable.length that could be cached outside.

state-change-in-assert

Incorrect use of assert()

costly-operations-inside-loops

Costly operations inside loops.

builtin-symbol-shadow

Builtin Symbol Shadowing

void-constructor

Void constructor

missing-inheritance

Potentially missing inheritance for contract.

unused-import

Unused Imports

function-pointer-in-constructor

Function pointers used in constructors.

state-variable-could-be-constant

State variable could be declared constant

state-variable-changes-without-events

State variable changes but no event is emitted.

state-variable-could-be-immutable

State variable could be declared immutable

multiple-placeholders

Modifier has multiple placeholders.

unchecked-return

Return value of the function call is not checked.

Last updated

Was this helpful?