Supported detectors
High-severity detectors
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
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?