This is page 93 of 94. Use http://codebase.md/cyfrin/aderyn?lines=false&page={x} to view the full context.
# Directory Structure
```
├── .cargo
│ └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
│ ├── images
│ │ ├── aderyn_logo.png
│ │ ├── poweredbycyfrinblack.png
│ │ └── poweredbycyfrinblue.png
│ ├── ISSUE_TEMPLATE
│ │ ├── bug_report.md
│ │ ├── false_positive_issue.md
│ │ └── feature_request.md
│ └── workflows
│ ├── cargo.yml
│ ├── dependencies.yml
│ ├── release.yml
│ ├── reports.yml
│ └── toml.yml
├── .gitignore
├── .gitmodules
├── .vscode
│ └── settings.json
├── aderyn
│ ├── Cargo.toml
│ ├── oranda.json
│ ├── README.md
│ ├── src
│ │ ├── birdsong.rs
│ │ ├── completions.rs
│ │ ├── lib.rs
│ │ ├── lsp.rs
│ │ ├── main.rs
│ │ ├── mcp.rs
│ │ └── panic.rs
│ └── templates
│ └── aderyn.toml
├── aderyn_core
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── src
│ │ ├── ast
│ │ │ ├── ast_nodes.rs
│ │ │ ├── ast.rs
│ │ │ ├── impls
│ │ │ │ ├── ctx
│ │ │ │ │ ├── utils.rs
│ │ │ │ │ └── workspace.rs
│ │ │ │ ├── ctx.rs
│ │ │ │ ├── disp
│ │ │ │ │ ├── blocks.rs
│ │ │ │ │ ├── contracts.rs
│ │ │ │ │ ├── enumerations.rs
│ │ │ │ │ ├── errors.rs
│ │ │ │ │ ├── events.rs
│ │ │ │ │ ├── expressions.rs
│ │ │ │ │ ├── functions.rs
│ │ │ │ │ ├── identifiers.rs
│ │ │ │ │ ├── literals.rs
│ │ │ │ │ ├── modifiers.rs
│ │ │ │ │ ├── statements.rs
│ │ │ │ │ ├── structures.rs
│ │ │ │ │ ├── types.rs
│ │ │ │ │ ├── user_defined_value_types.rs
│ │ │ │ │ ├── using_for_directives.rs
│ │ │ │ │ └── variables.rs
│ │ │ │ ├── disp.rs
│ │ │ │ ├── node
│ │ │ │ │ ├── blocks.rs
│ │ │ │ │ ├── contracts.rs
│ │ │ │ │ ├── documentation.rs
│ │ │ │ │ ├── enumerations.rs
│ │ │ │ │ ├── errors.rs
│ │ │ │ │ ├── events.rs
│ │ │ │ │ ├── expressions.rs
│ │ │ │ │ ├── functions.rs
│ │ │ │ │ ├── identifiers.rs
│ │ │ │ │ ├── import_directives.rs
│ │ │ │ │ ├── literals.rs
│ │ │ │ │ ├── modifiers.rs
│ │ │ │ │ ├── pragma_directives.rs
│ │ │ │ │ ├── source_units.rs
│ │ │ │ │ ├── statements.rs
│ │ │ │ │ ├── structures.rs
│ │ │ │ │ ├── types.rs
│ │ │ │ │ ├── user_defined_value_types.rs
│ │ │ │ │ ├── using_for_directives.rs
│ │ │ │ │ └── variables.rs
│ │ │ │ ├── node.rs
│ │ │ │ ├── own
│ │ │ │ │ ├── hashing.rs
│ │ │ │ │ ├── node_id.rs
│ │ │ │ │ ├── source_units.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ └── own.rs
│ │ │ ├── impls.rs
│ │ │ ├── macros.rs
│ │ │ ├── magic.rs
│ │ │ ├── node_type.rs
│ │ │ └── yul.rs
│ │ ├── ast.rs
│ │ ├── audit
│ │ │ ├── attack_surface.rs
│ │ │ ├── auditor.rs
│ │ │ ├── entrypoint.rs
│ │ │ └── public_functions_no_sender.rs
│ │ ├── audit.rs
│ │ ├── context
│ │ │ ├── browser
│ │ │ │ ├── ancestral_line.rs
│ │ │ │ ├── closest_ancestor.rs
│ │ │ │ ├── external_calls.rs
│ │ │ │ ├── extractor.rs
│ │ │ │ ├── immediate_children.rs
│ │ │ │ ├── location.rs
│ │ │ │ ├── macros.rs
│ │ │ │ ├── parent.rs
│ │ │ │ ├── peek_over.rs
│ │ │ │ ├── peek_under.rs
│ │ │ │ ├── peek.rs
│ │ │ │ ├── siblings.rs
│ │ │ │ ├── sort_nodes.rs
│ │ │ │ └── storage_vars.rs
│ │ │ ├── browser.rs
│ │ │ ├── capturable.rs
│ │ │ ├── flow
│ │ │ │ ├── display.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── kind.rs
│ │ │ │ ├── primitives.rs
│ │ │ │ ├── reducibles.rs
│ │ │ │ ├── tests.rs
│ │ │ │ ├── utils.rs
│ │ │ │ ├── visualizer.rs
│ │ │ │ └── voids.rs
│ │ │ ├── flow.rs
│ │ │ ├── graph
│ │ │ │ ├── callgraph
│ │ │ │ │ ├── legacy.rs
│ │ │ │ │ ├── new.rs
│ │ │ │ │ ├── tests.rs
│ │ │ │ │ ├── utils.rs
│ │ │ │ │ └── visit.rs
│ │ │ │ ├── callgraph.rs
│ │ │ │ ├── preprocess
│ │ │ │ │ ├── legacy.rs
│ │ │ │ │ └── new.rs
│ │ │ │ ├── preprocess.rs
│ │ │ │ ├── traits.rs
│ │ │ │ └── utils.rs
│ │ │ ├── graph.rs
│ │ │ ├── macros.rs
│ │ │ ├── mcp
│ │ │ │ ├── callgraph
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── callgraph.rs
│ │ │ │ ├── contract_surface
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── util.rs
│ │ │ │ ├── contract_surface.rs
│ │ │ │ ├── list_contracts
│ │ │ │ │ ├── render.rs
│ │ │ │ │ └── tool.rs
│ │ │ │ ├── list_contracts.rs
│ │ │ │ ├── node_finder
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── node_finder.rs
│ │ │ │ ├── node_summarizer
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── node_summarizer.rs
│ │ │ │ ├── project_overview
│ │ │ │ │ ├── render.rs
│ │ │ │ │ └── tool.rs
│ │ │ │ ├── project_overview.rs
│ │ │ │ ├── tool_guide
│ │ │ │ │ └── tool.rs
│ │ │ │ └── tool_guide.rs
│ │ │ ├── mcp.rs
│ │ │ ├── router
│ │ │ │ ├── external_calls.rs
│ │ │ │ ├── internal_calls.rs
│ │ │ │ ├── modifier_calls.rs
│ │ │ │ └── tests.rs
│ │ │ ├── router.rs
│ │ │ └── workspace.rs
│ │ ├── context.rs
│ │ ├── detect
│ │ │ ├── detector.rs
│ │ │ ├── entrypoint.rs
│ │ │ ├── helpers.rs
│ │ │ ├── high
│ │ │ │ ├── _template.rs
│ │ │ │ ├── abi_encode_packed_hash_collision.rs
│ │ │ │ ├── arbitrary_transfer_from.rs
│ │ │ │ ├── const_func_changes_state.rs
│ │ │ │ ├── contract_locks_ether.rs
│ │ │ │ ├── dangerous_unary_operator.rs
│ │ │ │ ├── delegate_call_unchecked_address.rs
│ │ │ │ ├── delete_nested_mapping.rs
│ │ │ │ ├── dynamic_array_length_assignment.rs
│ │ │ │ ├── enumerable_loop_removal.rs
│ │ │ │ ├── eth_send_unchecked_address.rs
│ │ │ │ ├── experimental_encoder.rs
│ │ │ │ ├── function_selector_collision.rs
│ │ │ │ ├── incorrect_caret_operator.rs
│ │ │ │ ├── incorrect_erc20_interface.rs
│ │ │ │ ├── incorrect_erc721_interface.rs
│ │ │ │ ├── incorrect_shift_order.rs
│ │ │ │ ├── misused_boolean.rs
│ │ │ │ ├── msg_value_in_loops.rs
│ │ │ │ ├── multiple_constructors.rs
│ │ │ │ ├── nested_struct_in_mapping.rs
│ │ │ │ ├── out_of_order_retryable.rs
│ │ │ │ ├── pre_declared_variable_usage.rs
│ │ │ │ ├── reentrancy_state_change.rs
│ │ │ │ ├── reused_contract_name.rs
│ │ │ │ ├── rtlo.rs
│ │ │ │ ├── selfdestruct.rs
│ │ │ │ ├── signed_integer_storage_array.rs
│ │ │ │ ├── state_variable_shadowing.rs
│ │ │ │ ├── storage_array_memory_edit.rs
│ │ │ │ ├── strict_equality_contract_balance.rs
│ │ │ │ ├── tautological_compare.rs
│ │ │ │ ├── tautology_or_contradiction.rs
│ │ │ │ ├── tx_origin_used_for_auth.rs
│ │ │ │ ├── unchecked_low_level_call.rs
│ │ │ │ ├── unchecked_send.rs
│ │ │ │ ├── unprotected_initializer.rs
│ │ │ │ ├── unsafe_casting.rs
│ │ │ │ ├── weak_randomness.rs
│ │ │ │ └── yul_return.rs
│ │ │ ├── high.rs
│ │ │ ├── low
│ │ │ │ ├── _template.rs
│ │ │ │ ├── assert_state_change.rs
│ │ │ │ ├── block_timestamp_deadline.rs
│ │ │ │ ├── boolean_equality.rs
│ │ │ │ ├── builtin_symbol_shadowing.rs
│ │ │ │ ├── centralization_risk.rs
│ │ │ │ ├── constant_function_contains_assembly.rs
│ │ │ │ ├── costly_loop.rs
│ │ │ │ ├── dead_code.rs
│ │ │ │ ├── delegatecall_in_loop.rs
│ │ │ │ ├── deprecated_oz_function.rs
│ │ │ │ ├── division_before_multiplication.rs
│ │ │ │ ├── ecrecover.rs
│ │ │ │ ├── empty_block.rs
│ │ │ │ ├── empty_require_revert.rs
│ │ │ │ ├── function_initializing_state.rs
│ │ │ │ ├── function_pointer_in_constructor.rs
│ │ │ │ ├── inconsistent_type_names.rs
│ │ │ │ ├── incorrect_modifier.rs
│ │ │ │ ├── internal_function_used_once.rs
│ │ │ │ ├── large_numeric_literal.rs
│ │ │ │ ├── literal_instead_of_constant.rs
│ │ │ │ ├── local_variable_shadowing.rs
│ │ │ │ ├── missing_inheritance.rs
│ │ │ │ ├── modifier_used_only_once.rs
│ │ │ │ ├── multiple_placeholders.rs
│ │ │ │ ├── non_reentrant_not_first.rs
│ │ │ │ ├── push_0_opcode.rs
│ │ │ │ ├── redundant_statement.rs
│ │ │ │ ├── require_revert_in_loop.rs
│ │ │ │ ├── return_bomb.rs
│ │ │ │ ├── solmate_safe_transfer_lib.rs
│ │ │ │ ├── state_change_without_event.rs
│ │ │ │ ├── state_no_address_check.rs
│ │ │ │ ├── state_variable_could_be_constant.rs
│ │ │ │ ├── state_variable_could_be_immutable.rs
│ │ │ │ ├── state_variable_read_external.rs
│ │ │ │ ├── storage_array_length_not_cached.rs
│ │ │ │ ├── todo.rs
│ │ │ │ ├── unchecked_return.rs
│ │ │ │ ├── uninitialized_local_variable.rs
│ │ │ │ ├── unsafe_erc20_operation.rs
│ │ │ │ ├── unsafe_oz_erc721_mint.rs
│ │ │ │ ├── unspecific_solidity_pragma.rs
│ │ │ │ ├── unused_error.rs
│ │ │ │ ├── unused_import.rs
│ │ │ │ ├── unused_public_function.rs
│ │ │ │ ├── unused_state_variable.rs
│ │ │ │ └── void_constructor.rs
│ │ │ ├── low.rs
│ │ │ └── test_utils.rs
│ │ ├── detect.rs
│ │ ├── lib.rs
│ │ ├── stats
│ │ │ ├── cloc.rs
│ │ │ ├── dbg_tips.txt
│ │ │ ├── ignore.rs
│ │ │ ├── token.rs
│ │ │ └── util.rs
│ │ ├── stats.rs
│ │ ├── test_utils
│ │ │ └── load_source_unit.rs
│ │ ├── test_utils.rs
│ │ ├── visitor
│ │ │ ├── ast_visitor.rs
│ │ │ ├── macros.rs
│ │ │ └── workspace_visitor.rs
│ │ └── visitor.rs
│ ├── templates
│ │ └── mcp-tool-response
│ │ ├── callgraph.md
│ │ ├── contract_surface.md
│ │ ├── list_contracts.md
│ │ ├── node_finder_get_all.md
│ │ ├── node_finder_grep.md
│ │ ├── node_finder_search.md
│ │ ├── node_summarizer.md
│ │ ├── project_overview.md
│ │ └── tool_guide.md
│ └── tests
│ ├── common
│ │ ├── ancestral_line.rs
│ │ ├── closest_ancestor.rs
│ │ ├── immediate_children.rs
│ │ ├── immediate_parent.rs
│ │ ├── mod.rs
│ │ ├── new_ast_nodes.rs
│ │ ├── peek_over.rs
│ │ └── sibling.rs
│ └── traversal.rs
├── aderyn_driver
│ ├── .gitignore
│ ├── benches
│ │ └── detectors.rs
│ ├── Cargo.toml
│ ├── README.md
│ ├── src
│ │ ├── compile.rs
│ │ ├── config.rs
│ │ ├── display.rs
│ │ ├── driver.rs
│ │ ├── interface
│ │ │ ├── json.rs
│ │ │ ├── lsp.rs
│ │ │ ├── markdown.rs
│ │ │ ├── mod.rs
│ │ │ ├── sarif.rs
│ │ │ ├── tables.rs
│ │ │ └── util.rs
│ │ ├── lib.rs
│ │ ├── mcp.rs
│ │ ├── process.rs
│ │ └── runner.rs
│ └── tests
│ └── astgen.rs
├── bacon.toml
├── benchmarks
│ ├── aderyn
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── iteration_times.svg
│ │ │ └── pdf.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── iteration_times_small.svg
│ │ ├── iteration_times.svg
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── relative_iteration_times_small.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── SD.svg
│ │ └── typical.svg
│ ├── arbitrary-transfer-from
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── avoid-abi-encode-packed
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── block-timestamp-deadline
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── centralization-risk
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── constants-instead-of-literals
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── delegate-call-in-loop
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── deprecated-oz-functions
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── ecrecover
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── empty-block
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── hello_world
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── inconsistent-type-names
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── large-numeric-literal
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── non-reentrant-before-others
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── push-zero-opcode
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── report
│ │ └── index.html
│ ├── require-with-string
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── solmate-safe-transfer-lib
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unindexed-events
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unprotected-initializer
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unsafe-erc20-functions
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unsafe-oz-erc721-mint
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unspecific-solidity-pragma
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-internal-function
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-modifier
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-public-function
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ └── zero-address-check
│ ├── base
│ │ ├── benchmark.json
│ │ ├── estimates.json
│ │ ├── sample.json
│ │ └── tukey.json
│ ├── change
│ │ └── estimates.json
│ ├── new
│ │ ├── benchmark.json
│ │ ├── estimates.json
│ │ ├── sample.json
│ │ └── tukey.json
│ └── report
│ ├── both
│ │ ├── pdf.svg
│ │ └── regression.svg
│ ├── change
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ └── t-test.svg
│ ├── index.html
│ ├── MAD.svg
│ ├── mean.svg
│ ├── median.svg
│ ├── pdf_small.svg
│ ├── pdf.svg
│ ├── regression_small.svg
│ ├── regression.svg
│ ├── relative_pdf_small.svg
│ ├── relative_regression_small.svg
│ ├── SD.svg
│ ├── slope.svg
│ └── typical.svg
├── Cargo.lock
├── Cargo.toml
├── cli
│ ├── benchmarks.sh
│ └── reportgen.sh
├── CODEOWNERS
├── CONTRIBUTING.md
├── cyfrinup
│ ├── dynamic_script
│ └── why.md
├── deny.toml
├── dist-workspace.toml
├── funding.json
├── LICENSE
├── Makefile
├── package-lock.json
├── package.json
├── README.md
├── RELEASE_CHECKLIST.md
├── reports
│ ├── adhoc-sol-files-highs-only-report.json
│ ├── adhoc-sol-files-report.md
│ ├── ccip-functions-report.md
│ ├── empty_report.md
│ ├── hardhat-playground-report.md
│ ├── nft-report-icm.md
│ ├── nft-report.md
│ ├── prb-math-report.md
│ ├── report.json
│ ├── report.md
│ ├── report.sarif
│ ├── sablier-aderyn-toml-nested-root.md
│ ├── templegold-report.md
│ └── uniswap_profile.md
├── rust-toolchain.toml
├── rustfmt.toml
├── tests
│ ├── adhoc-sol-files
│ │ ├── aderyn.toml
│ │ ├── Counter.sol
│ │ ├── DemoASTNodes.sol
│ │ ├── Helper.sol
│ │ ├── InconsistentUints.sol
│ │ ├── inheritance
│ │ │ ├── ExtendedInheritance.sol
│ │ │ ├── IContractInheritance.sol
│ │ │ └── InheritanceBase.sol
│ │ ├── InternalFunctions.sol
│ │ ├── lib
│ │ │ └── ThisShouldBeExcluded.sol
│ │ ├── multiple-versions
│ │ │ ├── 0.4
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.5
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.6
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.7
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ └── 0.8
│ │ │ ├── A.sol
│ │ │ └── B.sol
│ │ ├── OnceModifierExample.sol
│ │ └── StateVariables.sol
│ ├── ast
│ │ ├── abstract_contract.json
│ │ ├── address_payable.json
│ │ ├── array_type_name.json
│ │ ├── ast-erc4626.json
│ │ ├── base_constructor_call.json
│ │ ├── bit_not.json
│ │ ├── call.json
│ │ ├── constructor.json
│ │ ├── contract_dep_order.json
│ │ ├── do_while.json
│ │ ├── documentation_1.json
│ │ ├── documentation_2.json
│ │ ├── documentation_3.json
│ │ ├── documentation_local_variable.json
│ │ ├── documentation_on_statements.json
│ │ ├── documentation_triple.json
│ │ ├── empty_block.json
│ │ ├── enum_value_declaration.json
│ │ ├── enum_value.json
│ │ ├── event_definition.json
│ │ ├── experimental_encoder_pragma.json
│ │ ├── fallback_and_reveice_ether.json
│ │ ├── fallback_payable.json
│ │ ├── fallback.json
│ │ ├── function_type.json
│ │ ├── function.json
│ │ ├── global_enum.json
│ │ ├── global_struct.json
│ │ ├── inheritance_specifier.json
│ │ ├── leave.json
│ │ ├── license.json
│ │ ├── long_type_name_binary_operation.json
│ │ ├── long_type_name_identifier.json
│ │ ├── loop.json
│ │ ├── mappings.json
│ │ ├── modifier_definition.json
│ │ ├── modifier_invocation.json
│ │ ├── mutability.json
│ │ ├── nested_functions.json
│ │ ├── non_utf8.json
│ │ ├── override.json
│ │ ├── placeholder_statement.json
│ │ ├── receive_ether.json
│ │ ├── short_type_name_ref.json
│ │ ├── short_type_name.json
│ │ ├── slot_offset.json
│ │ ├── smoke.json
│ │ ├── source_location.json
│ │ ├── string.json
│ │ ├── stringlit.json
│ │ ├── switch_default.json
│ │ ├── switch.json
│ │ ├── try_catch.json
│ │ ├── two_base_functions.json
│ │ ├── unicode.json
│ │ ├── used_errors.json
│ │ ├── userDefinedValueType.json
│ │ ├── using_for_directive.json
│ │ ├── var_access.json
│ │ └── yul_hex_literal.json
│ ├── contract-playground
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── dot
│ │ │ └── .gitkeep
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── script
│ │ │ └── Counter.s.sol
│ │ ├── src
│ │ │ ├── AbstractContract.sol
│ │ │ ├── AderynIgnoreCustomDetectors.sol
│ │ │ ├── AdminContract.sol
│ │ │ ├── ArbitraryTransferFrom.sol
│ │ │ ├── AssemblyExample.sol
│ │ │ ├── AssertStateChange.sol
│ │ │ ├── auditor_mode
│ │ │ │ ├── ExternalCalls.sol
│ │ │ │ └── PublicFunctionsWithoutSenderCheck.sol
│ │ │ ├── BooleanEquality.sol
│ │ │ ├── BuiltinSymbolShadow.sol
│ │ │ ├── CacheArrayLength.sol
│ │ │ ├── CallGraphTests.sol
│ │ │ ├── Casting.sol
│ │ │ ├── cloc
│ │ │ │ ├── AnotherHeavilyCommentedContract.sol
│ │ │ │ ├── EmptyContractFile.sol
│ │ │ │ └── HeavilyCommentedContract.sol
│ │ │ ├── CompilerBugStorageSignedIntegerArray.sol
│ │ │ ├── ConstantFuncsAssembly.sol
│ │ │ ├── ConstantsLiterals.sol
│ │ │ ├── ConstFuncChangeState.sol
│ │ │ ├── ContractLocksEther.sol
│ │ │ ├── ContractWithTodo.sol
│ │ │ ├── control_flow
│ │ │ │ └── SimpleProgram.sol
│ │ │ ├── CostlyOperationsInsideLoops.sol
│ │ │ ├── Counter.sol
│ │ │ ├── CrazyPragma.sol
│ │ │ ├── DangerousStrictEquality1.sol
│ │ │ ├── DangerousStrictEquality2.sol
│ │ │ ├── DangerousUnaryOperator.sol
│ │ │ ├── DeadCode.sol
│ │ │ ├── DelegateCallWithoutAddressCheck.sol
│ │ │ ├── DeletionNestedMappingStructureContract.sol
│ │ │ ├── DeprecatedOZFunctions.sol
│ │ │ ├── DivisionBeforeMultiplication.sol
│ │ │ ├── DynamicArrayLengthAssignment.sol
│ │ │ ├── EmitAfterExternalCall.sol
│ │ │ ├── EmptyBlocks.sol
│ │ │ ├── EnumerableSetIteration.sol
│ │ │ ├── eth2
│ │ │ │ └── DepositContract.sol
│ │ │ ├── ExperimentalEncoder.sol
│ │ │ ├── ExternalCalls.sol
│ │ │ ├── FunctionInitializingState.sol
│ │ │ ├── FunctionPointers.sol
│ │ │ ├── FunctionSignatureCollision.sol
│ │ │ ├── HugeConstants.sol
│ │ │ ├── IgnoreEverything.sol
│ │ │ ├── InconsistentUints.sol
│ │ │ ├── IncorrectCaretOperator.sol
│ │ │ ├── IncorrectERC20.sol
│ │ │ ├── IncorrectERC721.sol
│ │ │ ├── IncorrectModifier.sol
│ │ │ ├── IncorrectShift.sol
│ │ │ ├── inheritance
│ │ │ │ ├── ExtendedInheritance.sol
│ │ │ │ ├── IContractInheritance.sol
│ │ │ │ └── InheritanceBase.sol
│ │ │ ├── InternalFunctions.sol
│ │ │ ├── KeccakContract.sol
│ │ │ ├── LocalVariableShadow.sol
│ │ │ ├── MissingInheritance.sol
│ │ │ ├── MisusedBoolean.sol
│ │ │ ├── MsgValueInLoop.sol
│ │ │ ├── MultipleConstructorSchemes.sol
│ │ │ ├── MultiplePlaceholders.sol
│ │ │ ├── nested
│ │ │ │ ├── 1
│ │ │ │ │ └── Nested.sol
│ │ │ │ └── 2
│ │ │ │ └── Nested.sol
│ │ │ ├── nested_mappings
│ │ │ │ ├── LaterVersion.sol
│ │ │ │ └── NestedMappings.sol
│ │ │ ├── OnceModifierExample.sol
│ │ │ ├── OnlyLibrary.sol
│ │ │ ├── OutOfOrderRetryable.sol
│ │ │ ├── parent_chain
│ │ │ │ └── ParentChainContract.sol
│ │ │ ├── PragmaRange.sol
│ │ │ ├── PreDeclaredVarUsage.sol
│ │ │ ├── PublicFunction.sol
│ │ │ ├── PublicVariableReadInExternalContext.sol
│ │ │ ├── RedundantStatements.sol
│ │ │ ├── ReturnBomb.sol
│ │ │ ├── reused_contract_name
│ │ │ │ ├── ContractA.sol
│ │ │ │ └── ContractB.sol
│ │ │ ├── RevertsAndRequriesInLoops.sol
│ │ │ ├── router
│ │ │ │ ├── ExternalCalls.sol
│ │ │ │ ├── FallbackAndReceiveOverrides.sol
│ │ │ │ ├── InternalCalls.sol
│ │ │ │ ├── ModifierCalls.sol
│ │ │ │ └── VarOverridesFunction.sol
│ │ │ ├── RTLO.sol
│ │ │ ├── SendEtherNoChecks.sol
│ │ │ ├── SendEtherNoChecksLibImport.sol
│ │ │ ├── StateChangeAfterExternalCall.sol
│ │ │ ├── StateShadowing.sol
│ │ │ ├── StateVariableCouldBeDeclaredConstant.sol
│ │ │ ├── StateVariableCouldBeDeclaredImmutable.sol
│ │ │ ├── StateVariables.sol
│ │ │ ├── StateVariablesChangesWithoutEvents.sol
│ │ │ ├── StateVariablesManipulation.sol
│ │ │ ├── StorageConditionals.sol
│ │ │ ├── StorageParameters.sol
│ │ │ ├── T11sTranferer.sol
│ │ │ ├── TautologicalCompare.sol
│ │ │ ├── TautologyOrContradiction.sol
│ │ │ ├── TestERC20.sol
│ │ │ ├── TransientKeyword.sol
│ │ │ ├── Trump.sol
│ │ │ ├── TxOriginUsedForAuth.sol
│ │ │ ├── U2.sol
│ │ │ ├── U3.sol
│ │ │ ├── U4.sol
│ │ │ ├── U5.sol
│ │ │ ├── UncheckedCalls.sol
│ │ │ ├── UncheckedReturn.sol
│ │ │ ├── UncheckedSend.sol
│ │ │ ├── UninitializedLocalVariables.sol
│ │ │ ├── UninitializedStateVariable.sol
│ │ │ ├── uniswap
│ │ │ │ ├── UniswapV2Swapper.sol
│ │ │ │ └── UniswapV3Swapper.sol
│ │ │ ├── UnprotectedInitialize.sol
│ │ │ ├── UnsafeERC721Mint.sol
│ │ │ ├── UnusedError.sol
│ │ │ ├── UnusedImport.sol
│ │ │ ├── UnusedStateVariables.sol
│ │ │ ├── UsingSelfdestruct.sol
│ │ │ ├── VoidConstructor.sol
│ │ │ ├── WeakRandomness.sol
│ │ │ ├── WrongOrderOfLayout.sol
│ │ │ ├── YulReturn.sol
│ │ │ └── ZeroAddressCheck.sol
│ │ └── test
│ │ └── Counter.t.sol
│ ├── foundry-nft-f23
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── foundry.lock
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── remappings.txt
│ │ └── src
│ │ ├── BasicNft.sol
│ │ ├── F1.sol
│ │ ├── F2.sol
│ │ ├── Initializer.sol
│ │ └── inner-core-modules
│ │ └── ICM.sol
│ ├── foundry-nft-f23-icm
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── aderyn.toml
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── remappings.txt
│ │ └── src
│ │ ├── BasicNft.sol
│ │ ├── F1.sol
│ │ ├── F2.sol
│ │ ├── Initializer.sol
│ │ └── inner-core-modules
│ │ └── ICM.sol
│ ├── hardhat-js-playground
│ │ ├── .gitignore
│ │ ├── artifacts
│ │ │ ├── build-info
│ │ │ │ └── cee6fe9a9a2f03f7ff10a27ab2746af6.json
│ │ │ └── contracts
│ │ │ ├── Counter.sol
│ │ │ │ ├── Counter.dbg.json
│ │ │ │ └── Counter.json
│ │ │ ├── ExtendedInheritance.sol
│ │ │ │ ├── ExtendedInheritance.dbg.json
│ │ │ │ └── ExtendedInheritance.json
│ │ │ ├── IContractInheritance.sol
│ │ │ │ ├── IContractInheritance.dbg.json
│ │ │ │ └── IContractInheritance.json
│ │ │ ├── InheritanceBase.sol
│ │ │ │ ├── InheritanceBase.dbg.json
│ │ │ │ └── InheritanceBase.json
│ │ │ ├── KeccakContract.sol
│ │ │ │ ├── KeccakContract.dbg.json
│ │ │ │ └── KeccakContract.json
│ │ │ ├── Lock.sol
│ │ │ │ ├── Lock.dbg.json
│ │ │ │ └── Lock.json
│ │ │ └── StateVariables.sol
│ │ │ ├── StateVariables.dbg.json
│ │ │ └── StateVariables.json
│ │ ├── contracts
│ │ │ ├── Counter.sol
│ │ │ ├── ExtendedInheritance.sol
│ │ │ ├── IContractInheritance.sol
│ │ │ ├── InheritanceBase.sol
│ │ │ ├── KeccakContract.sol
│ │ │ ├── Lock.sol
│ │ │ └── StateVariables.sol
│ │ ├── hardhat.config.js
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── scripts
│ │ │ └── deploy.js
│ │ ├── test
│ │ │ └── Lock.js
│ │ └── yarn.lock
│ ├── no-sol-files
│ │ ├── extra
│ │ │ └── HelloAgain.md
│ │ ├── Hello.txt
│ │ └── Hello.yul
│ └── toml
│ ├── nested_project1
│ │ ├── aderyn.toml
│ │ ├── folder1
│ │ │ └── hardhat.config.ts
│ │ ├── folder2
│ │ │ └── hardhat.config.ts
│ │ └── folder3
│ │ └── file.txt
│ └── nested_project2
│ ├── aderyn.toml
│ ├── folder1
│ │ └── foundry.toml
│ └── folder2
│ └── file1.txt
├── tools
│ └── xtask
│ ├── Cargo.toml
│ └── src
│ ├── blesspr.rs
│ ├── cut_release.rs
│ ├── flags.rs
│ ├── main.rs
│ ├── reportgen.rs
│ └── tomlgen.rs
└── typos.toml
```
# Files
--------------------------------------------------------------------------------
/reports/report.json:
--------------------------------------------------------------------------------
```json
{
"files_summary": {
"total_source_units": 126,
"total_sloc": 4727
},
"files_details": {
"files_details": [
{
"file_path": "src/AbstractContract.sol",
"n_sloc": 12
},
{
"file_path": "src/AderynIgnoreCustomDetectors.sol",
"n_sloc": 17
},
{
"file_path": "src/AdminContract.sol",
"n_sloc": 11
},
{
"file_path": "src/ArbitraryTransferFrom.sol",
"n_sloc": 37
},
{
"file_path": "src/AssemblyExample.sol",
"n_sloc": 9
},
{
"file_path": "src/AssertStateChange.sol",
"n_sloc": 11
},
{
"file_path": "src/BooleanEquality.sol",
"n_sloc": 27
},
{
"file_path": "src/BuiltinSymbolShadow.sol",
"n_sloc": 14
},
{
"file_path": "src/CacheArrayLength.sol",
"n_sloc": 38
},
{
"file_path": "src/CallGraphTests.sol",
"n_sloc": 49
},
{
"file_path": "src/Casting.sol",
"n_sloc": 146
},
{
"file_path": "src/CompilerBugStorageSignedIntegerArray.sol",
"n_sloc": 13
},
{
"file_path": "src/ConstFuncChangeState.sol",
"n_sloc": 15
},
{
"file_path": "src/ConstantFuncsAssembly.sol",
"n_sloc": 26
},
{
"file_path": "src/ConstantsLiterals.sol",
"n_sloc": 28
},
{
"file_path": "src/ContractLocksEther.sol",
"n_sloc": 142
},
{
"file_path": "src/ContractWithTodo.sol",
"n_sloc": 7
},
{
"file_path": "src/CostlyOperationsInsideLoops.sol",
"n_sloc": 17
},
{
"file_path": "src/Counter.sol",
"n_sloc": 20
},
{
"file_path": "src/CrazyPragma.sol",
"n_sloc": 4
},
{
"file_path": "src/DangerousStrictEquality1.sol",
"n_sloc": 6
},
{
"file_path": "src/DangerousStrictEquality2.sol",
"n_sloc": 9
},
{
"file_path": "src/DangerousUnaryOperator.sol",
"n_sloc": 13
},
{
"file_path": "src/DeadCode.sol",
"n_sloc": 23
},
{
"file_path": "src/DelegateCallWithoutAddressCheck.sol",
"n_sloc": 31
},
{
"file_path": "src/DeletionNestedMappingStructureContract.sol",
"n_sloc": 11
},
{
"file_path": "src/DeprecatedOZFunctions.sol",
"n_sloc": 32
},
{
"file_path": "src/DivisionBeforeMultiplication.sol",
"n_sloc": 22
},
{
"file_path": "src/DynamicArrayLengthAssignment.sol",
"n_sloc": 16
},
{
"file_path": "src/EmitAfterExternalCall.sol",
"n_sloc": 67
},
{
"file_path": "src/EmptyBlocks.sol",
"n_sloc": 48
},
{
"file_path": "src/EnumerableSetIteration.sol",
"n_sloc": 55
},
{
"file_path": "src/ExperimentalEncoder.sol",
"n_sloc": 4
},
{
"file_path": "src/ExternalCalls.sol",
"n_sloc": 60
},
{
"file_path": "src/FunctionInitializingState.sol",
"n_sloc": 49
},
{
"file_path": "src/FunctionPointers.sol",
"n_sloc": 10
},
{
"file_path": "src/FunctionSignatureCollision.sol",
"n_sloc": 9
},
{
"file_path": "src/HugeConstants.sol",
"n_sloc": 36
},
{
"file_path": "src/IgnoreEverything.sol",
"n_sloc": 5
},
{
"file_path": "src/InconsistentUints.sol",
"n_sloc": 17
},
{
"file_path": "src/IncorrectCaretOperator.sol",
"n_sloc": 16
},
{
"file_path": "src/IncorrectERC20.sol",
"n_sloc": 98
},
{
"file_path": "src/IncorrectERC721.sol",
"n_sloc": 238
},
{
"file_path": "src/IncorrectModifier.sol",
"n_sloc": 65
},
{
"file_path": "src/IncorrectShift.sol",
"n_sloc": 17
},
{
"file_path": "src/InternalFunctions.sol",
"n_sloc": 22
},
{
"file_path": "src/KeccakContract.sol",
"n_sloc": 21
},
{
"file_path": "src/LocalVariableShadow.sol",
"n_sloc": 23
},
{
"file_path": "src/MissingInheritance.sol",
"n_sloc": 39
},
{
"file_path": "src/MisusedBoolean.sol",
"n_sloc": 67
},
{
"file_path": "src/MsgValueInLoop.sol",
"n_sloc": 55
},
{
"file_path": "src/MultipleConstructorSchemes.sol",
"n_sloc": 10
},
{
"file_path": "src/MultiplePlaceholders.sol",
"n_sloc": 40
},
{
"file_path": "src/OnceModifierExample.sol",
"n_sloc": 8
},
{
"file_path": "src/OnlyLibrary.sol",
"n_sloc": 2
},
{
"file_path": "src/OutOfOrderRetryable.sol",
"n_sloc": 165
},
{
"file_path": "src/PragmaRange.sol",
"n_sloc": 6
},
{
"file_path": "src/PreDeclaredVarUsage.sol",
"n_sloc": 9
},
{
"file_path": "src/PublicFunction.sol",
"n_sloc": 15
},
{
"file_path": "src/PublicVariableReadInExternalContext.sol",
"n_sloc": 32
},
{
"file_path": "src/RTLO.sol",
"n_sloc": 7
},
{
"file_path": "src/RedundantStatements.sol",
"n_sloc": 14
},
{
"file_path": "src/ReturnBomb.sol",
"n_sloc": 44
},
{
"file_path": "src/RevertsAndRequriesInLoops.sol",
"n_sloc": 27
},
{
"file_path": "src/SendEtherNoChecks.sol",
"n_sloc": 58
},
{
"file_path": "src/SendEtherNoChecksLibImport.sol",
"n_sloc": 17
},
{
"file_path": "src/StateChangeAfterExternalCall.sol",
"n_sloc": 54
},
{
"file_path": "src/StateShadowing.sol",
"n_sloc": 17
},
{
"file_path": "src/StateVariableCouldBeDeclaredConstant.sol",
"n_sloc": 27
},
{
"file_path": "src/StateVariableCouldBeDeclaredImmutable.sol",
"n_sloc": 22
},
{
"file_path": "src/StateVariables.sol",
"n_sloc": 58
},
{
"file_path": "src/StateVariablesChangesWithoutEvents.sol",
"n_sloc": 80
},
{
"file_path": "src/StateVariablesManipulation.sol",
"n_sloc": 250
},
{
"file_path": "src/StorageConditionals.sol",
"n_sloc": 59
},
{
"file_path": "src/StorageParameters.sol",
"n_sloc": 16
},
{
"file_path": "src/T11sTranferer.sol",
"n_sloc": 8
},
{
"file_path": "src/TautologicalCompare.sol",
"n_sloc": 17
},
{
"file_path": "src/TautologyOrContradiction.sol",
"n_sloc": 11
},
{
"file_path": "src/TestERC20.sol",
"n_sloc": 62
},
{
"file_path": "src/TransientKeyword.sol",
"n_sloc": 10
},
{
"file_path": "src/Trump.sol",
"n_sloc": 281
},
{
"file_path": "src/TxOriginUsedForAuth.sol",
"n_sloc": 43
},
{
"file_path": "src/U2.sol",
"n_sloc": 3
},
{
"file_path": "src/U3.sol",
"n_sloc": 2
},
{
"file_path": "src/U4.sol",
"n_sloc": 3
},
{
"file_path": "src/U5.sol",
"n_sloc": 6
},
{
"file_path": "src/UncheckedCalls.sol",
"n_sloc": 24
},
{
"file_path": "src/UncheckedReturn.sol",
"n_sloc": 33
},
{
"file_path": "src/UncheckedSend.sol",
"n_sloc": 18
},
{
"file_path": "src/UninitializedLocalVariables.sol",
"n_sloc": 62
},
{
"file_path": "src/UninitializedStateVariable.sol",
"n_sloc": 29
},
{
"file_path": "src/UnprotectedInitialize.sol",
"n_sloc": 44
},
{
"file_path": "src/UnsafeERC721Mint.sol",
"n_sloc": 18
},
{
"file_path": "src/UnusedError.sol",
"n_sloc": 23
},
{
"file_path": "src/UnusedImport.sol",
"n_sloc": 10
},
{
"file_path": "src/UnusedStateVariables.sol",
"n_sloc": 12
},
{
"file_path": "src/UsingSelfdestruct.sol",
"n_sloc": 6
},
{
"file_path": "src/VoidConstructor.sol",
"n_sloc": 21
},
{
"file_path": "src/WeakRandomness.sol",
"n_sloc": 59
},
{
"file_path": "src/WrongOrderOfLayout.sol",
"n_sloc": 13
},
{
"file_path": "src/YulReturn.sol",
"n_sloc": 8
},
{
"file_path": "src/ZeroAddressCheck.sol",
"n_sloc": 41
},
{
"file_path": "src/auditor_mode/ExternalCalls.sol",
"n_sloc": 65
},
{
"file_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"n_sloc": 45
},
{
"file_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"n_sloc": 32
},
{
"file_path": "src/cloc/EmptyContractFile.sol",
"n_sloc": 0
},
{
"file_path": "src/cloc/HeavilyCommentedContract.sol",
"n_sloc": 21
},
{
"file_path": "src/control_flow/SimpleProgram.sol",
"n_sloc": 188
},
{
"file_path": "src/eth2/DepositContract.sol",
"n_sloc": 96
},
{
"file_path": "src/inheritance/ExtendedInheritance.sol",
"n_sloc": 18
},
{
"file_path": "src/inheritance/IContractInheritance.sol",
"n_sloc": 4
},
{
"file_path": "src/inheritance/InheritanceBase.sol",
"n_sloc": 12
},
{
"file_path": "src/nested/1/Nested.sol",
"n_sloc": 10
},
{
"file_path": "src/nested/2/Nested.sol",
"n_sloc": 7
},
{
"file_path": "src/nested_mappings/LaterVersion.sol",
"n_sloc": 10
},
{
"file_path": "src/nested_mappings/NestedMappings.sol",
"n_sloc": 10
},
{
"file_path": "src/parent_chain/ParentChainContract.sol",
"n_sloc": 29
},
{
"file_path": "src/reused_contract_name/ContractA.sol",
"n_sloc": 7
},
{
"file_path": "src/reused_contract_name/ContractB.sol",
"n_sloc": 7
},
{
"file_path": "src/router/ExternalCalls.sol",
"n_sloc": 30
},
{
"file_path": "src/router/FallbackAndReceiveOverrides.sol",
"n_sloc": 17
},
{
"file_path": "src/router/InternalCalls.sol",
"n_sloc": 135
},
{
"file_path": "src/router/ModifierCalls.sol",
"n_sloc": 33
},
{
"file_path": "src/router/VarOverridesFunction.sol",
"n_sloc": 20
},
{
"file_path": "src/uniswap/UniswapV2Swapper.sol",
"n_sloc": 50
},
{
"file_path": "src/uniswap/UniswapV3Swapper.sol",
"n_sloc": 150
}
]
},
"issue_count": {
"high": 39,
"low": 48
},
"high_issues": {
"issues": [
{
"title": "`abi.encodePacked()` Hash Collision",
"description": "abi.encodePacked() should not be used with dynamic types when passing the result to a hash function such as `keccak256()`. Use `abi.encode()` instead which will pad items to 32 bytes, preventing hash collisions: https://docs.soliditylang.org/en/v0.8.13/abi-spec.html#non-standard-packed-mode. (e.g. `abi.encodePacked(0x123,0x456)` => `0x123456` => `abi.encodePacked(0x1,0x23456)`, but `abi.encode(0x123,0x456)` => `0x0...1230...456`). Unless there is a compelling reason, `abi.encode` should be preferred. If there is only one argument to `abi.encodePacked()` it can often be cast to `bytes()` or `bytes32()` instead: https://ethereum.stackexchange.com/questions/30912/how-to-compare-strings-in-solidity#answer-82739. If all arguments are strings and or bytes, `bytes.concat()` should be used instead.",
"detector_name": "abi-encode-packed-hash-collision",
"instances": [
{
"contract_path": "src/KeccakContract.sol",
"line_no": 18,
"src": "587:16",
"src_char": "587:16"
},
{
"contract_path": "src/KeccakContract.sol",
"line_no": 22,
"src": "734:16",
"src_char": "734:16"
},
{
"contract_path": "src/KeccakContract.sol",
"line_no": 26,
"src": "887:16",
"src_char": "887:16"
}
]
},
{
"title": "Arbitrary `from` Passed to `transferFrom`",
"description": "Passing an arbitrary `from` address to `transferFrom` (or `safeTransferFrom`) can lead to loss of funds, because anyone can transfer tokens from the `from` address if an approval is made.",
"detector_name": "arbitrary-transfer-from",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 24,
"src": "738:42",
"src_char": "738:42"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 29,
"src": "879:53",
"src_char": "879:53"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 17,
"src": "579:39",
"src_char": "579:39"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 47,
"src": "1598:35",
"src_char": "1598:35"
}
]
},
{
"title": "Unprotected initializer",
"description": "Consider protecting the initializer functions with modifiers.",
"detector_name": "unprotected-initializer",
"instances": [
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 37,
"src": "916:33",
"src_char": "916:33"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 70,
"src": "1798:27",
"src_char": "1798:27"
}
]
},
{
"title": "Unsafe Casting of integers",
"description": "Downcasting int/uints in Solidity can be unsafe due to the potential for data loss and unintended behavior.When downcasting a larger integer type to a smaller one (e.g., uint256 to uint128), the value may exceed the range of the target type,leading to truncation and loss of significant digits. Use OpenZeppelin's SafeCast library to safely downcast integers.",
"detector_name": "unsafe-casting",
"instances": [
{
"contract_path": "src/Casting.sol",
"line_no": 42,
"src": "1127:10",
"src_char": "1127:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 43,
"src": "1159:10",
"src_char": "1159:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 44,
"src": "1191:10",
"src_char": "1191:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 45,
"src": "1223:10",
"src_char": "1223:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 46,
"src": "1255:10",
"src_char": "1255:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 47,
"src": "1287:10",
"src_char": "1287:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 48,
"src": "1319:10",
"src_char": "1319:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 49,
"src": "1351:10",
"src_char": "1351:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 50,
"src": "1383:10",
"src_char": "1383:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 51,
"src": "1415:10",
"src_char": "1415:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 52,
"src": "1447:10",
"src_char": "1447:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 53,
"src": "1479:10",
"src_char": "1479:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 54,
"src": "1511:10",
"src_char": "1511:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 55,
"src": "1543:10",
"src_char": "1543:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 56,
"src": "1575:10",
"src_char": "1575:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 57,
"src": "1607:10",
"src_char": "1607:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 58,
"src": "1639:10",
"src_char": "1639:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 59,
"src": "1671:10",
"src_char": "1671:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 60,
"src": "1703:10",
"src_char": "1703:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 61,
"src": "1734:9",
"src_char": "1734:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 62,
"src": "1764:9",
"src_char": "1764:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 63,
"src": "1794:9",
"src_char": "1794:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 64,
"src": "1824:9",
"src_char": "1824:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 65,
"src": "1854:9",
"src_char": "1854:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 66,
"src": "1884:9",
"src_char": "1884:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 67,
"src": "1915:9",
"src_char": "1915:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 68,
"src": "1946:10",
"src_char": "1946:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 69,
"src": "1978:10",
"src_char": "1978:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 70,
"src": "2010:10",
"src_char": "2010:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 71,
"src": "2042:10",
"src_char": "2042:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 72,
"src": "2075:9",
"src_char": "2075:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 80,
"src": "2304:9",
"src_char": "2304:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 81,
"src": "2334:9",
"src_char": "2334:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 82,
"src": "2364:9",
"src_char": "2364:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 83,
"src": "2394:9",
"src_char": "2394:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 84,
"src": "2424:9",
"src_char": "2424:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 85,
"src": "2454:9",
"src_char": "2454:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 86,
"src": "2484:9",
"src_char": "2484:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 87,
"src": "2514:9",
"src_char": "2514:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 88,
"src": "2544:9",
"src_char": "2544:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 89,
"src": "2574:9",
"src_char": "2574:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 90,
"src": "2604:9",
"src_char": "2604:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 91,
"src": "2634:9",
"src_char": "2634:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 92,
"src": "2664:9",
"src_char": "2664:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 93,
"src": "2694:9",
"src_char": "2694:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 94,
"src": "2724:9",
"src_char": "2724:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 95,
"src": "2754:9",
"src_char": "2754:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 96,
"src": "2784:9",
"src_char": "2784:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 97,
"src": "2814:9",
"src_char": "2814:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 98,
"src": "2844:9",
"src_char": "2844:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 99,
"src": "2873:8",
"src_char": "2873:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 100,
"src": "2901:8",
"src_char": "2901:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 101,
"src": "2929:8",
"src_char": "2929:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 102,
"src": "2957:8",
"src_char": "2957:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 103,
"src": "2985:8",
"src_char": "2985:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 104,
"src": "3013:8",
"src_char": "3013:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 105,
"src": "3042:8",
"src_char": "3042:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 106,
"src": "3071:9",
"src_char": "3071:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 107,
"src": "3101:9",
"src_char": "3101:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 108,
"src": "3131:9",
"src_char": "3131:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 109,
"src": "3161:9",
"src_char": "3161:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 110,
"src": "3192:8",
"src_char": "3192:8"
},
{
"contract_path": "src/Casting.sol",
"line_no": 118,
"src": "3488:10",
"src_char": "3488:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 119,
"src": "3520:10",
"src_char": "3520:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 120,
"src": "3552:10",
"src_char": "3552:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 121,
"src": "3584:10",
"src_char": "3584:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 122,
"src": "3616:10",
"src_char": "3616:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 123,
"src": "3648:10",
"src_char": "3648:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 124,
"src": "3680:10",
"src_char": "3680:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 125,
"src": "3712:10",
"src_char": "3712:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 126,
"src": "3744:10",
"src_char": "3744:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 127,
"src": "3776:10",
"src_char": "3776:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 128,
"src": "3808:10",
"src_char": "3808:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 129,
"src": "3840:10",
"src_char": "3840:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 130,
"src": "3872:10",
"src_char": "3872:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 131,
"src": "3904:10",
"src_char": "3904:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 132,
"src": "3936:10",
"src_char": "3936:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 133,
"src": "3968:10",
"src_char": "3968:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 134,
"src": "4000:10",
"src_char": "4000:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 135,
"src": "4032:10",
"src_char": "4032:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 136,
"src": "4064:10",
"src_char": "4064:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 137,
"src": "4096:10",
"src_char": "4096:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 138,
"src": "4128:10",
"src_char": "4128:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 139,
"src": "4160:10",
"src_char": "4160:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 140,
"src": "4191:9",
"src_char": "4191:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 141,
"src": "4221:9",
"src_char": "4221:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 142,
"src": "4251:9",
"src_char": "4251:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 143,
"src": "4282:9",
"src_char": "4282:9"
},
{
"contract_path": "src/Casting.sol",
"line_no": 144,
"src": "4313:10",
"src_char": "4313:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 145,
"src": "4345:10",
"src_char": "4345:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 146,
"src": "4377:10",
"src_char": "4377:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 147,
"src": "4409:10",
"src_char": "4409:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 148,
"src": "4443:10",
"src_char": "4443:10"
},
{
"contract_path": "src/Casting.sol",
"line_no": 155,
"src": "4642:14",
"src_char": "4642:14"
}
]
},
{
"title": "EnumerableSet.remove Corrupts Order",
"description": "If the order of an EnumerableSet is required, removing items in a loop using `at` and `remove` corrupts this order.\nConsider using a different data structure or removing items by collecting them during the loop, then removing after the loop.",
"detector_name": "enumerable-loop-removal",
"instances": [
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 31,
"src": "1105:17",
"src_char": "1105:17"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 40,
"src": "1350:17",
"src_char": "1350:17"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 50,
"src": "1586:17",
"src_char": "1586:17"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 59,
"src": "1865:17",
"src_char": "1865:17"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 67,
"src": "2083:14",
"src_char": "2083:14"
}
]
},
{
"title": "Experimental ABI Encoder",
"description": "Experimental encoders should not be used in production. There are multiple known compiler bugs that are caused by the experimental encoder. Upgrade your solidity version to remove the need for experimental features.",
"detector_name": "experimental-encoder",
"instances": [
{
"contract_path": "src/ExperimentalEncoder.sol",
"line_no": 2,
"src": "23:33",
"src_char": "23:33"
}
]
},
{
"title": "Incorrect Assembly Shift Parameter Order",
"description": "Example: `shl(shifted, 4)` will shift the right constant `4` by `a` bits. The correct order is `shl(4, shifted)`.",
"detector_name": "incorrect-shift-order",
"instances": [
{
"contract_path": "src/IncorrectShift.sol",
"line_no": 7,
"src": "192:15",
"src_char": "192:15"
},
{
"contract_path": "src/IncorrectShift.sol",
"line_no": 8,
"src": "238:15",
"src_char": "238:15"
}
]
},
{
"title": "Storage Array Edited with Memory",
"description": "Storage reference is passed to a function with a memory parameter. This will not update the storage variable as expected. Consider using storage parameters instead.",
"detector_name": "storage-array-memory-edit",
"instances": [
{
"contract_path": "src/StorageParameters.sol",
"line_no": 11,
"src": "241:10",
"src_char": "241:10"
}
]
},
{
"title": "Contract Has Multiple Constructors",
"description": "In some versions of Solidity, contracts compile with multiple constructors. The first constructor takes precedence. This can lead to unexpected behavior.",
"detector_name": "multiple-constructors",
"instances": [
{
"contract_path": "src/MultipleConstructorSchemes.sol",
"line_no": 3,
"src": "25:180",
"src_char": "25:180"
}
]
},
{
"title": "Contract Name Reused in Different Files",
"description": "When compiling contracts with certain development frameworks (for example: Truffle), having contracts with the same name across different files can lead to one being overwritten.",
"detector_name": "reused-contract-name",
"instances": [
{
"contract_path": "src/EmitAfterExternalCall.sol",
"line_no": 4,
"src": "66:14",
"src_char": "66:14"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 4,
"src": "66:14",
"src_char": "66:14"
},
{
"contract_path": "src/Trump.sol",
"line_no": 18,
"src": "270:7",
"src_char": "270:7"
},
{
"contract_path": "src/Trump.sol",
"line_no": 24,
"src": "394:6",
"src_char": "394:6"
},
{
"contract_path": "src/Trump.sol",
"line_no": 73,
"src": "2166:7",
"src_char": "2166:7"
},
{
"contract_path": "src/Trump.sol",
"line_no": 103,
"src": "2952:18",
"src_char": "2952:18"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 4,
"src": "67:6",
"src_char": "67:6"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 44,
"src": "3759:6",
"src_char": "2271:6"
},
{
"contract_path": "src/nested/1/Nested.sol",
"line_no": 7,
"src": "214:6",
"src_char": "214:6"
},
{
"contract_path": "src/nested/2/Nested.sol",
"line_no": 7,
"src": "214:6",
"src_char": "214:6"
},
{
"contract_path": "src/reused_contract_name/ContractA.sol",
"line_no": 4,
"src": "70:10",
"src_char": "70:10"
},
{
"contract_path": "src/reused_contract_name/ContractB.sol",
"line_no": 4,
"src": "70:10",
"src_char": "70:10"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 4,
"src": "80:1",
"src_char": "80:1"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 8,
"src": "143:1",
"src_char": "143:1"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 12,
"src": "188:1",
"src_char": "188:1"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 31,
"src": "630:1",
"src_char": "630:1"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 35,
"src": "701:1",
"src_char": "701:1"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 4,
"src": "88:1",
"src_char": "88:1"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 12,
"src": "179:1",
"src_char": "179:1"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 28,
"src": "347:1",
"src_char": "347:1"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 41,
"src": "538:1",
"src_char": "538:1"
},
{
"contract_path": "src/router/VarOverridesFunction.sol",
"line_no": 4,
"src": "70:1",
"src_char": "70:1"
},
{
"contract_path": "src/router/VarOverridesFunction.sol",
"line_no": 9,
"src": "150:1",
"src_char": "150:1"
},
{
"contract_path": "src/router/VarOverridesFunction.sol",
"line_no": 13,
"src": "219:1",
"src_char": "219:1"
},
{
"contract_path": "src/router/VarOverridesFunction.sol",
"line_no": 17,
"src": "285:1",
"src_char": "285:1"
},
{
"contract_path": "src/router/VarOverridesFunction.sol",
"line_no": 21,
"src": "341:1",
"src_char": "341:1"
}
]
},
{
"title": "Nested Structs in Mappings pre-0.5.0",
"description": "Prior to updates in Solidity 0.5.0, public mappings with nested structs compiled, but produced incorrect values. Refrain from using these, or update to a more recent version of Solidity.",
"detector_name": "nested-struct-in-mapping",
"instances": [
{
"contract_path": "src/nested_mappings/NestedMappings.sol",
"line_no": 17,
"src": "367:58",
"src_char": "367:58"
}
]
},
{
"title": "`selfdestruct` is Deprecated",
"description": "Remove the `selfdestruct` instruction from the code.",
"detector_name": "selfdestruct",
"instances": [
{
"contract_path": "src/UsingSelfdestruct.sol",
"line_no": 7,
"src": "146:12",
"src_char": "146:12"
}
]
},
{
"title": "Direct assignment of array length",
"description": "If the length of a dynamic array (storage variable) is directly assigned to, it may allow access to other storage slots by tweaking it's value. This practice has been deprecated in newer Solidity versions",
"detector_name": "dynamic-array-length-assignment",
"instances": [
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 13,
"src": "295:14",
"src_char": "295:14"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 14,
"src": "325:18",
"src_char": "325:18"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 15,
"src": "359:33",
"src_char": "359:33"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 16,
"src": "408:15",
"src_char": "408:15"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 17,
"src": "439:14",
"src_char": "439:14"
}
]
},
{
"title": "Incorrect use of caret operator",
"description": "The caret operator is usually mistakenly thought of as an exponentiation operator but actually, it's a bitwise xor operator.",
"detector_name": "incorrect-caret-operator",
"instances": [
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 16,
"src": "519:8",
"src_char": "519:8"
},
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 17,
"src": "549:16",
"src_char": "549:16"
},
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 18,
"src": "587:21",
"src_char": "587:21"
},
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 19,
"src": "631:13",
"src_char": "631:13"
},
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 20,
"src": "708:12",
"src_char": "708:12"
}
]
},
{
"title": "Yul block contains `return`",
"description": "This causes the transaction execution to halt, and nothing after that call will execute including code following the assembly block.",
"detector_name": "yul-return",
"instances": [
{
"contract_path": "src/YulReturn.sol",
"line_no": 8,
"src": "171:12",
"src_char": "171:12"
}
]
},
{
"title": "Shadowed State Variable",
"description": "This vulnerability arises when a derived contract unintentionally shadows a state variable from a parent contract by declaring a variable with the same name. This can be misleading. To prevent this, ensure variable names are unique across the inheritance hierarchy or use proper visibility and scope controls.",
"detector_name": "state-variable-shadowing",
"instances": [
{
"contract_path": "src/StateShadowing.sol",
"line_no": 15,
"src": "239:13",
"src_char": "239:13"
}
]
},
{
"title": "Unchecked `bool success` value for ETH send",
"description": "The call `address(payable?).send(address)` may fail because of reasons like out-of-gas, invalid recipient address or revert from the recipient, but not revert the transaction. Therefore, the boolean returned by this function call must be checked to be `true` in order to verify that the transaction was successful.",
"detector_name": "unchecked-send",
"instances": [
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 24,
"src": "815:22",
"src_char": "815:22"
}
]
},
{
"title": "Misused boolean with logical operators",
"description": "The patterns `if (… || true)` and `if (.. && false)` will always evaluate to true and false respectively.",
"detector_name": "misused-boolean",
"instances": [
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 12,
"src": "257:19",
"src_char": "257:19"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 19,
"src": "419:20",
"src_char": "419:20"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 26,
"src": "582:20",
"src_char": "582:20"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 33,
"src": "745:19",
"src_char": "745:19"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 40,
"src": "908:51",
"src_char": "908:51"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 47,
"src": "1060:52",
"src_char": "1060:52"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 54,
"src": "1213:53",
"src_char": "1213:53"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 61,
"src": "1366:21",
"src_char": "1366:21"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 68,
"src": "1530:17",
"src_char": "1530:17"
},
{
"contract_path": "src/MisusedBoolean.sol",
"line_no": 75,
"src": "1691:18",
"src_char": "1691:18"
}
]
},
{
"title": "ETH transferred without address checks",
"description": "Consider introducing checks for `msg.sender` to ensure the recipient of the money is as intended.",
"detector_name": "eth-send-unchecked-address",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 23,
"src": "672:4",
"src_char": "672:4"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 28,
"src": "813:4",
"src_char": "813:4"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 37,
"src": "1112:5",
"src_char": "1112:5"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 41,
"src": "1235:5",
"src_char": "1235:5"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 45,
"src": "1369:5",
"src_char": "1369:5"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 49,
"src": "1506:5",
"src_char": "1506:5"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 38,
"src": "686:16",
"src_char": "686:16"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 94,
"src": "2981:11",
"src_char": "2981:11"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 131,
"src": "4205:11",
"src_char": "4205:11"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 167,
"src": "5373:11",
"src_char": "5373:11"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 194,
"src": "6342:11",
"src_char": "6342:11"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 16,
"src": "488:16",
"src_char": "488:16"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 26,
"src": "821:11",
"src_char": "821:11"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 67,
"src": "1218:4",
"src_char": "1218:4"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 167,
"src": "4685:13",
"src_char": "4685:13"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 175,
"src": "5072:7",
"src_char": "5072:7"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 53,
"src": "1060:5",
"src_char": "1060:5"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 77,
"src": "1405:5",
"src_char": "1405:5"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 99,
"src": "1795:5",
"src_char": "1795:5"
},
{
"contract_path": "src/Trump.sol",
"line_no": 321,
"src": "10940:10",
"src_char": "10940:10"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 6,
"src": "99:110",
"src_char": "99:110"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 22,
"src": "572:359",
"src_char": "572:359"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 6,
"src": "85:246",
"src_char": "85:246"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 12,
"src": "337:190",
"src_char": "337:190"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 17,
"src": "533:184",
"src_char": "533:184"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 22,
"src": "723:186",
"src_char": "723:186"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 17,
"src": "563:8",
"src_char": "563:8"
}
]
},
{
"title": "`delegatecall` to an Arbitrary Address",
"description": "Making a `delegatecall` to an arbitrary address without any checks is dangerous. Consider adding requirements on the target address.",
"detector_name": "delegate-call-unchecked-address",
"instances": [
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 15,
"src": "392:9",
"src_char": "392:9"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 14,
"src": "323:118",
"src_char": "323:118"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 22,
"src": "572:359",
"src_char": "572:359"
},
{
"contract_path": "src/auditor_mode/ExternalCalls.sol",
"line_no": 38,
"src": "1253:28",
"src_char": "1253:28"
},
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 14,
"src": "391:15",
"src_char": "391:15"
}
]
},
{
"title": "Tautological comparison",
"description": "The left hand side and the right hand side of the binary operation has the same value. This makes the condition always true or always false.",
"detector_name": "tautological-compare",
"instances": [
{
"contract_path": "src/TautologicalCompare.sol",
"line_no": 18,
"src": "528:6",
"src_char": "528:6"
},
{
"contract_path": "src/TautologicalCompare.sol",
"line_no": 23,
"src": "634:5",
"src_char": "634:5"
},
{
"contract_path": "src/TautologicalCompare.sol",
"line_no": 28,
"src": "739:5",
"src_char": "739:5"
}
]
},
{
"title": "RTLO character detected in file: \\u{202e}",
"description": "The right to left override character may be misleading and cause potential attacks by visually misordering method arguments.",
"detector_name": "rtlo",
"instances": [
{
"contract_path": "src/RTLO.sol",
"line_no": 3,
"src": "33:157",
"src_char": "33:155"
}
]
},
{
"title": "Dangerous unary operator",
"description": "Potentially mistaken `=+` for `+=` or `=-` for `-=`. This acts as an assignment instead of an increment or decrement.Use the correct operator to increment or decrement a variable.",
"detector_name": "dangerous-unary-operator",
"instances": [
{
"contract_path": "src/DangerousUnaryOperator.sol",
"line_no": 12,
"src": "220:10",
"src_char": "220:10"
},
{
"contract_path": "src/DangerousUnaryOperator.sol",
"line_no": 13,
"src": "247:10",
"src_char": "247:10"
}
]
},
{
"title": "Tautology or Contradiction in comparison",
"description": "The condition has been determined to be either always true or always false due to the integer range in which we're operating.",
"detector_name": "tautology-or-contradiction",
"instances": [
{
"contract_path": "src/EmitAfterExternalCall.sol",
"line_no": 48,
"src": "1168:5",
"src_char": "1168:5"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 13,
"src": "296:7",
"src_char": "296:7"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 16,
"src": "369:11",
"src_char": "369:11"
}
]
},
{
"title": "Dangerous strict equality checks on contract balances",
"description": "A contract's balance can be forcibly manipulated by another selfdestructing contract. Therefore, it's recommended to use >, <, >= or <= instead of strict equality.",
"detector_name": "strict-equality-contract-balance",
"instances": [
{
"contract_path": "src/DangerousStrictEquality1.sol",
"line_no": 6,
"src": "177:25",
"src_char": "177:25"
},
{
"contract_path": "src/DangerousStrictEquality2.sol",
"line_no": 6,
"src": "177:34",
"src_char": "177:34"
},
{
"contract_path": "src/DangerousStrictEquality2.sol",
"line_no": 10,
"src": "305:43",
"src_char": "305:43"
}
]
},
{
"title": "Signed integer array in storage (solc `<0.5.10`)",
"description": "solc versions 0.4.7-0.5.9 contain a compiler bug leading to incorrect values in signed integer arrays.Use solidity version 0.5.10 or above.",
"detector_name": "signed-integer-storage-array",
"instances": [
{
"contract_path": "src/CompilerBugStorageSignedIntegerArray.sol",
"line_no": 9,
"src": "230:10",
"src_char": "230:10"
}
]
},
{
"title": "Weak Randomness",
"description": "The use of keccak256 hash functions on predictable values like block.timestamp, block.number, or similar data, including modulo operations on these values, should be avoided for generating randomness, as they are easily predictable and manipulable. The `PREVRANDAO` opcode also should not be used as a source of randomness. Instead, utilize Chainlink VRF for cryptographically secure and provably random values to ensure protocol integrity.",
"detector_name": "weak-randomness",
"instances": [
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 6,
"src": "188:70",
"src_char": "188:70"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 11,
"src": "386:41",
"src_char": "386:41"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 16,
"src": "597:20",
"src_char": "597:20"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 21,
"src": "793:20",
"src_char": "793:20"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 25,
"src": "915:20",
"src_char": "915:20"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 31,
"src": "1095:5",
"src_char": "1095:5"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 35,
"src": "1217:37",
"src_char": "1217:37"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 41,
"src": "1434:9",
"src_char": "1434:9"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 45,
"src": "1563:16",
"src_char": "1563:16"
}
]
},
{
"title": "Usage of variable before declaration",
"description": "Declare the variable before using it to avoid unintended consequences.",
"detector_name": "pre-declared-local-variable-usage",
"instances": [
{
"contract_path": "src/PreDeclaredVarUsage.sol",
"line_no": 8,
"src": "196:1",
"src_char": "196:1"
}
]
},
{
"title": "Deletion from a nested mapping",
"description": "A deletion in a structure containing a mapping will not delete the mapping. The remaining data may be used to compromise the contract.",
"detector_name": "delete-nested-mapping",
"instances": [
{
"contract_path": "src/DeletionNestedMappingStructureContract.sol",
"line_no": 17,
"src": "426:25",
"src_char": "426:25"
}
]
},
{
"title": "Use of `tx.origin` for authentication",
"description": "Using `tx.origin` may lead to problems when users are interacting via smart contract with your protocol. It is recommended to use `msg.sender` for authentication.",
"detector_name": "tx-origin-used-for-auth",
"instances": [
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 40,
"src": "1117:183",
"src_char": "1117:183"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 51,
"src": "1431:90",
"src_char": "1431:90"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 59,
"src": "1610:68",
"src_char": "1610:68"
}
]
},
{
"title": "Loop contains `msg.value`",
"description": "Provide an explicit array of amounts alongside the receivers array, and check that the sum of all amounts matches `msg.value`.",
"detector_name": "msg-value-in-loop",
"instances": [
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 12,
"src": "289:107",
"src_char": "289:107"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 38,
"src": "988:94",
"src_char": "988:94"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 54,
"src": "1415:93",
"src_char": "1415:93"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 71,
"src": "1844:97",
"src_char": "1844:97"
}
]
},
{
"title": "Contract locks Ether without a withdraw function",
"description": "It appears that the contract includes a payable function to accept Ether but lacks a corresponding function to withdraw it, which leads to the Ether being locked in the contract. To resolve this issue, please implement a public or external function that allows for the withdrawal of Ether from the contract.",
"detector_name": "contract-locks-ether",
"instances": [
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 5,
"src": "73:10",
"src_char": "73:10"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 31,
"src": "822:11",
"src_char": "822:11"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 20,
"src": "344:39",
"src_char": "344:39"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 44,
"src": "630:11",
"src_char": "630:11"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 8,
"src": "139:8",
"src_char": "139:8"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 7,
"src": "103:15",
"src_char": "103:15"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 19,
"src": "423:19",
"src_char": "423:19"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 33,
"src": "831:15",
"src_char": "831:15"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 48,
"src": "1233:15",
"src_char": "1233:15"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 65,
"src": "1659:15",
"src_char": "1659:15"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 38,
"src": "1028:2",
"src_char": "1028:2"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 58,
"src": "4547:15",
"src_char": "3059:15"
},
{
"contract_path": "src/router/FallbackAndReceiveOverrides.sol",
"line_no": 4,
"src": "70:1",
"src_char": "70:1"
},
{
"contract_path": "src/router/FallbackAndReceiveOverrides.sol",
"line_no": 10,
"src": "172:1",
"src_char": "172:1"
},
{
"contract_path": "src/router/FallbackAndReceiveOverrides.sol",
"line_no": 14,
"src": "237:1",
"src_char": "237:1"
}
]
},
{
"title": "Incorrect ERC721 interface",
"description": "Incorrect return values for ERC721 functions. A contract compiled with Solidity > 0.4.22 interacting with these functions will fail to execute them, as the return value is missing. Set the appropriate return values and types for the defined ERC721 functions.",
"detector_name": "incorrect-erc721-interface",
"instances": [
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 14,
"src": "433:9",
"src_char": "433:9"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 18,
"src": "551:7",
"src_char": "551:7"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 22,
"src": "696:7",
"src_char": "696:7"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 37,
"src": "1092:11",
"src_char": "1092:11"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 41,
"src": "1231:17",
"src_char": "1231:17"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 49,
"src": "1484:16",
"src_char": "1484:16"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 56,
"src": "1684:12",
"src_char": "1684:12"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 71,
"src": "2086:16",
"src_char": "2086:16"
}
]
},
{
"title": "Incorrect ERC20 interface",
"description": "Incorrect return values for ERC20 functions. A contract compiled with Solidity > 0.4.22 interacting with these functions will fail to execute them, as the return value is missing. Set the appropriate return values and types for the defined ERC20 functions.",
"detector_name": "incorrect-erc20-interface",
"instances": [
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 17,
"src": "483:8",
"src_char": "483:8"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 23,
"src": "690:7",
"src_char": "690:7"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 27,
"src": "808:12",
"src_char": "808:12"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 35,
"src": "1146:9",
"src_char": "1146:9"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 39,
"src": "1249:9",
"src_char": "1249:9"
}
]
},
{
"title": "Out of Order Retryable Transaction",
"description": "Do not rely on the order or successful execution of retryable tickets. Functions like createRetryableTicket, outboundTransferCustomRefund, unsafeCreateRetryableTicket are free to be re-tried in any\n order if they fail in the first go. Since this operation happens off chain, the sequencer is in control of the\n order of these transactions. Therefore, restrict the use to at most 1 ticket call per function.",
"detector_name": "out-of-order-retryable",
"instances": [
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 63,
"src": "1649:11",
"src_char": "1649:11"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 90,
"src": "2557:22",
"src_char": "2557:22"
}
]
},
{
"title": "Constant functions changes state",
"description": "Function is declared constant/view but it changes state. Ensure that the attributes of contract compiled prior to 0.5 are correct.",
"detector_name": "constant-function-changes-state",
"instances": [
{
"contract_path": "src/ConstFuncChangeState.sol",
"line_no": 8,
"src": "173:112",
"src_char": "173:112"
}
]
},
{
"title": "Function Selector Collision",
"description": "Function selector collides with other functions. This may cause the solidity function dispatcher to invoke the wrong function if the functions happen to be included in the same contract through an inheritance hierarchy later down the line. It is recommended to rename this function or change its parameters.",
"detector_name": "function-selector-collision",
"instances": [
{
"contract_path": "src/FunctionSignatureCollision.sol",
"line_no": 7,
"src": "166:8",
"src_char": "166:8",
"hint": "collides with the following function name(s) in scope: OwnerTransferV7b711143"
},
{
"contract_path": "src/FunctionSignatureCollision.sol",
"line_no": 13,
"src": "231:22",
"src_char": "231:22",
"hint": "collides with the following function name(s) in scope: withdraw"
}
]
},
{
"title": "Unchecked Low level calls",
"description": "The return value of the low-level call is not checked, so if the call fails, the Ether will be locked in the contract. If the low level is used to prevent blocking operations, consider logging failed calls. Ensure that the return value of a low-level call is checked or logged.",
"detector_name": "unchecked-low-level-call",
"instances": [
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 16,
"src": "452:21",
"src_char": "452:21"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 20,
"src": "583:26",
"src_char": "583:26"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 36,
"src": "1071:21",
"src_char": "1071:21"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 42,
"src": "1287:21",
"src_char": "1287:21"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 7,
"src": "172:30",
"src_char": "172:30"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 11,
"src": "293:17",
"src_char": "293:17"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 15,
"src": "409:25",
"src_char": "409:25"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 19,
"src": "536:23",
"src_char": "536:23"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 23,
"src": "651:27",
"src_char": "651:27"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 25,
"src": "689:66",
"src_char": "689:66"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 27,
"src": "766:86",
"src_char": "766:86"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 29,
"src": "863:61",
"src_char": "863:61"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 34,
"src": "1028:19",
"src_char": "1028:19"
},
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 16,
"src": "488:71",
"src_char": "488:71"
}
]
},
{
"title": "Reentrancy: State change after external call",
"description": "Changing state after an external call can lead to re-entrancy attacks.Use the checks-effects-interactions pattern to avoid this issue.",
"detector_name": "reentrancy-state-change",
"instances": [
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 24,
"src": "588:15",
"src_char": "588:15",
"hint": "State is changed at: `s_useMe += 1`"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 33,
"src": "735:15",
"src_char": "735:15",
"hint": "State is changed at: `s_useMe -= 1`"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 52,
"src": "1272:15",
"src_char": "1272:15",
"hint": "State is changed at: `s_useMe += 4`"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 82,
"src": "1814:15",
"src_char": "1814:15",
"hint": "State is changed at: `s_useMe += 1`"
},
{
"contract_path": "src/Trump.sol",
"line_no": 342,
"src": "11731:110",
"src_char": "11731:110",
"hint": "State is changed at: `swapEnabled = true`, `tradingOpen = true`, `firstBlock = block.number`"
},
{
"contract_path": "src/Trump.sol",
"line_no": 343,
"src": "11851:129",
"src_char": "11851:129",
"hint": "State is changed at: `swapEnabled = true`, `tradingOpen = true`, `firstBlock = block.number`"
},
{
"contract_path": "src/Trump.sol",
"line_no": 344,
"src": "11990:71",
"src_char": "11990:71",
"hint": "State is changed at: `swapEnabled = true`, `tradingOpen = true`, `firstBlock = block.number`"
}
]
}
]
},
"low_issues": {
"issues": [
{
"title": "`delegatecall` in loop",
"description": "Using `delegatecall` in loop may consume excessive gas, or worse, lead to more severe issues.",
"detector_name": "delegatecall-in-loop",
"instances": [
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 15,
"src": "474:96",
"src_char": "474:96"
}
]
},
{
"title": "Centralization Risk",
"description": "Contracts have owners with privileged rights to perform admin tasks and need to be trusted to not perform malicious updates or drain funds.",
"detector_name": "centralization-risk",
"instances": [
{
"contract_path": "src/AdminContract.sol",
"line_no": 7,
"src": "270:7",
"src_char": "270:7"
},
{
"contract_path": "src/AdminContract.sol",
"line_no": 10,
"src": "376:9",
"src_char": "376:9"
},
{
"contract_path": "src/AdminContract.sol",
"line_no": 14,
"src": "505:9",
"src_char": "505:9"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 7,
"src": "295:13",
"src_char": "295:13"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 6,
"src": "188:7",
"src_char": "188:7"
},
{
"contract_path": "src/InternalFunctions.sol",
"line_no": 12,
"src": "250:9",
"src_char": "250:9"
},
{
"contract_path": "src/SendEtherNoChecksLibImport.sol",
"line_no": 7,
"src": "276:7",
"src_char": "276:7"
},
{
"contract_path": "src/SendEtherNoChecksLibImport.sol",
"line_no": 7,
"src": "285:13",
"src_char": "285:13"
},
{
"contract_path": "src/SendEtherNoChecksLibImport.sol",
"line_no": 16,
"src": "516:9",
"src_char": "516:9"
},
{
"contract_path": "src/SendEtherNoChecksLibImport.sol",
"line_no": 20,
"src": "614:28",
"src_char": "614:28"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 81,
"src": "1794:9",
"src_char": "1794:9"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 87,
"src": "1911:9",
"src_char": "1911:9"
},
{
"contract_path": "src/Trump.sol",
"line_no": 92,
"src": "2714:9",
"src_char": "2714:9"
},
{
"contract_path": "src/Trump.sol",
"line_no": 123,
"src": "3592:7",
"src_char": "3592:7"
},
{
"contract_path": "src/Trump.sol",
"line_no": 299,
"src": "10185:9",
"src_char": "10185:9"
},
{
"contract_path": "src/Trump.sol",
"line_no": 338,
"src": "11494:11",
"src_char": "11494:11"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 9,
"src": "322:7",
"src_char": "322:7"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 11,
"src": "396:9",
"src_char": "396:9"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 35,
"src": "975:13",
"src_char": "975:13"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 38,
"src": "1108:14",
"src_char": "1108:14"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 7,
"src": "282:7",
"src_char": "282:7"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 28,
"src": "725:9",
"src_char": "725:9"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 32,
"src": "854:9",
"src_char": "854:9"
}
]
},
{
"title": "Solmate's SafeTransferLib",
"description": "There is a subtle difference between the implementation of solmate's SafeTransferLib and OZ's SafeERC20: OZ's SafeERC20 checks if the token is a contract or not, solmate's SafeTransferLib does not.\nhttps://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol#L9 \n`@dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller`\n",
"detector_name": "solmate-safe-transfer-lib",
"instances": [
{
"contract_path": "src/T11sTranferer.sol",
"line_no": 4,
"src": "57:84",
"src_char": "57:84"
}
]
},
{
"title": "`ecrecover` Signature Malleability",
"description": "The `ecrecover` function is susceptible to signature malleability. This means that the same message can be signed in multiple ways, allowing an attacker to change the message signature without invalidating it. This can lead to unexpected behavior in smart contracts, such as the loss of funds or the ability to bypass access control. Consider using OpenZeppelin's ECDSA library instead of the built-in function.",
"detector_name": "ecrecover",
"instances": [
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 22,
"src": "737:9",
"src_char": "737:9"
}
]
},
{
"title": "Deprecated OpenZeppelin Function",
"description": "Openzeppelin has deprecated several functions and replaced with newer versions. Please consult https://docs.openzeppelin.com/",
"detector_name": "deprecated-oz-function",
"instances": [
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 22,
"src": "737:10",
"src_char": "737:10"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 27,
"src": "898:17",
"src_char": "898:17"
}
]
},
{
"title": "Unsafe ERC20 Operation",
"description": "ERC20 functions may not behave as expected. For example: return values are not always meaningful. It is recommended to use OpenZeppelin's SafeERC20 library.",
"detector_name": "unsafe-erc20-operation",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 19,
"src": "601:20",
"src_char": "601:20"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 34,
"src": "1046:20",
"src_char": "1046:20"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 54,
"src": "1699:20",
"src_char": "1699:20"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 162,
"src": "5185:18",
"src_char": "5185:18"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 32,
"src": "1062:13",
"src_char": "1062:13"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 37,
"src": "1272:13",
"src_char": "1272:13"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 38,
"src": "1322:13",
"src_char": "1322:13"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 42,
"src": "1424:13",
"src_char": "1424:13"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 47,
"src": "1598:18",
"src_char": "1598:18"
},
{
"contract_path": "src/IncorrectModifier.sol",
"line_no": 83,
"src": "2103:23",
"src_char": "2103:23"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 171,
"src": "4927:28",
"src_char": "4927:28"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 180,
"src": "5328:28",
"src_char": "5328:28"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 67,
"src": "1255:19",
"src_char": "1255:19"
},
{
"contract_path": "src/StateShadowing.sol",
"line_no": 22,
"src": "368:19",
"src_char": "368:19"
},
{
"contract_path": "src/Trump.sol",
"line_no": 309,
"src": "10512:19",
"src_char": "10512:19"
},
{
"contract_path": "src/Trump.sol",
"line_no": 310,
"src": "10557:20",
"src_char": "10557:20"
},
{
"contract_path": "src/Trump.sol",
"line_no": 318,
"src": "10869:29",
"src_char": "10869:29"
},
{
"contract_path": "src/Trump.sol",
"line_no": 324,
"src": "11111:28",
"src_char": "11111:28"
},
{
"contract_path": "src/Trump.sol",
"line_no": 344,
"src": "11990:29",
"src_char": "11990:29"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 18,
"src": "599:29",
"src_char": "599:29"
}
]
},
{
"title": "Unspecific Solidity Pragma",
"description": "Consider using a specific version of Solidity in your contracts instead of a wide version. For example, instead of `pragma solidity ^0.8.0;`, use `pragma solidity 0.8.0;`",
"detector_name": "unspecific-solidity-pragma",
"instances": [
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/CompilerBugStorageSignedIntegerArray.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ConstFuncChangeState.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ContractWithTodo.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/CostlyOperationsInsideLoops.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/Counter.sol",
"line_no": 2,
"src": "39:24",
"src_char": "39:24"
},
{
"contract_path": "src/CrazyPragma.sol",
"line_no": 2,
"src": "32:32",
"src_char": "32:32"
},
{
"contract_path": "src/DangerousStrictEquality1.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/DangerousUnaryOperator.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 2,
"src": "32:21",
"src_char": "32:21"
},
{
"contract_path": "src/DeletionNestedMappingStructureContract.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/FunctionSignatureCollision.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 1,
"src": "0:24",
"src_char": "0:24"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/PragmaRange.sol",
"line_no": 2,
"src": "32:31",
"src_char": "32:31"
},
{
"contract_path": "src/PreDeclaredVarUsage.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 2,
"src": "32:24",
"src_char": "32:24"
},
{
"contract_path": "src/UncheckedCalls.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 2,
"src": "32:24",
"src_char": "32:24"
},
{
"contract_path": "src/UsingSelfdestruct.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/VoidConstructor.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 6,
"src": "46:24",
"src_char": "46:24"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 6,
"src": "46:32",
"src_char": "46:32"
},
{
"contract_path": "src/inheritance/IContractInheritance.sol",
"line_no": 2,
"src": "32:24",
"src_char": "32:24"
},
{
"contract_path": "src/inheritance/InheritanceBase.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/nested_mappings/LaterVersion.sol",
"line_no": 2,
"src": "36:23",
"src_char": "36:23"
},
{
"contract_path": "src/nested_mappings/NestedMappings.sol",
"line_no": 2,
"src": "36:24",
"src_char": "36:24"
}
]
},
{
"title": "Address State Variable Set Without Checks",
"description": "Check for `address(0)` when assigning values to address state variables.",
"detector_name": "state-no-address-check",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 12,
"src": "267:15",
"src_char": "267:15"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 20,
"src": "347:16",
"src_char": "347:16"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 28,
"src": "459:6",
"src_char": "459:6"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 54,
"src": "1416:14",
"src_char": "1416:14"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 55,
"src": "1440:24",
"src_char": "1440:24"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 58,
"src": "2121:14",
"src_char": "2121:14"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 56,
"src": "1657:17",
"src_char": "1657:17"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 43,
"src": "1171:14",
"src_char": "1171:14"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 47,
"src": "1248:16",
"src_char": "1248:16"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 51,
"src": "1327:23",
"src_char": "1327:23"
},
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 18,
"src": "579:22",
"src_char": "579:22"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 11,
"src": "365:17",
"src_char": "365:17"
}
]
},
{
"title": "Public Function Not Used Internally",
"description": "If a function is marked public but is not used internally, consider marking it as `external`.",
"detector_name": "unused-public-function",
"instances": [
{
"contract_path": "src/AderynIgnoreCustomDetectors.sol",
"line_no": 7,
"src": "174:2",
"src_char": "174:2"
},
{
"contract_path": "src/AderynIgnoreCustomDetectors.sol",
"line_no": 26,
"src": "583:2",
"src_char": "583:2"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 32,
"src": "954:5",
"src_char": "954:5"
},
{
"contract_path": "src/AssemblyExample.sol",
"line_no": 6,
"src": "113:1",
"src_char": "113:1"
},
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 8,
"src": "131:3",
"src_char": "131:3"
},
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 12,
"src": "199:4",
"src_char": "199:4"
},
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 8,
"src": "125:41",
"src_char": "125:41"
},
{
"contract_path": "src/ConstFuncChangeState.sol",
"line_no": 8,
"src": "173:112",
"src_char": "173:112"
},
{
"contract_path": "src/ConstFuncChangeState.sol",
"line_no": 14,
"src": "339:108",
"src_char": "339:108"
},
{
"contract_path": "src/ConstFuncChangeState.sol",
"line_no": 20,
"src": "517:89",
"src_char": "517:89"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 20,
"src": "539:10",
"src_char": "539:10"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 49,
"src": "1379:10",
"src_char": "1379:10"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 81,
"src": "2414:10",
"src_char": "2414:10"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 118,
"src": "3653:10",
"src_char": "3653:10"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 155,
"src": "4877:10",
"src_char": "4877:10"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 181,
"src": "5775:10",
"src_char": "5775:10"
},
{
"contract_path": "src/ContractWithTodo.sol",
"line_no": 13,
"src": "337:15",
"src_char": "337:15"
},
{
"contract_path": "src/Counter.sol",
"line_no": 7,
"src": "129:9",
"src_char": "129:9"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 11,
"src": "194:7",
"src_char": "194:7"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 19,
"src": "309:9",
"src_char": "309:9"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 17,
"src": "483:8",
"src_char": "483:8"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 23,
"src": "690:7",
"src_char": "690:7"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 27,
"src": "808:12",
"src_char": "808:12"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 35,
"src": "1146:9",
"src_char": "1146:9"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 39,
"src": "1249:9",
"src_char": "1249:9"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 10,
"src": "181:17",
"src_char": "181:17"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 16,
"src": "332:26",
"src_char": "332:26"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 31,
"src": "700:18",
"src_char": "700:18"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 167,
"src": "4685:13",
"src_char": "4685:13"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 175,
"src": "5072:7",
"src_char": "5072:7"
},
{
"contract_path": "src/ReturnBomb.sol",
"line_no": 16,
"src": "358:4",
"src_char": "358:4"
},
{
"contract_path": "src/ReturnBomb.sol",
"line_no": 32,
"src": "839:4",
"src_char": "839:4"
},
{
"contract_path": "src/ReturnBomb.sol",
"line_no": 47,
"src": "1273:4",
"src_char": "1273:4"
},
{
"contract_path": "src/ReturnBomb.sol",
"line_no": 63,
"src": "1646:4",
"src_char": "1646:4"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 47,
"src": "1764:18",
"src_char": "1764:18"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 52,
"src": "1915:20",
"src_char": "1915:20"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 57,
"src": "2072:14",
"src_char": "2072:14"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 61,
"src": "2157:22",
"src_char": "2157:22"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 71,
"src": "2539:25",
"src_char": "2539:25"
},
{
"contract_path": "src/Trump.sol",
"line_no": 180,
"src": "5624:4",
"src_char": "5624:4"
},
{
"contract_path": "src/Trump.sol",
"line_no": 184,
"src": "5711:6",
"src_char": "5711:6"
},
{
"contract_path": "src/Trump.sol",
"line_no": 188,
"src": "5802:8",
"src_char": "5802:8"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 7,
"src": "121:19",
"src_char": "121:19"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 23,
"src": "727:20",
"src_char": "727:20"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 41,
"src": "1527:17",
"src_char": "1527:17"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 17,
"src": "563:8",
"src_char": "563:8"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 16,
"src": "475:27",
"src_char": "475:27"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 22,
"src": "653:28",
"src_char": "653:28"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 45,
"src": "1324:26",
"src_char": "1324:26"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 53,
"src": "1637:27",
"src_char": "1637:27"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 71,
"src": "2014:20",
"src_char": "2014:20"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 77,
"src": "2183:28",
"src_char": "2183:28"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 31,
"src": "500:3",
"src_char": "500:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 38,
"src": "637:5",
"src_char": "637:5"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 42,
"src": "738:4",
"src_char": "735:4"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 31,
"src": "509:3",
"src_char": "509:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 38,
"src": "646:4",
"src_char": "646:4"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 11,
"src": "355:9",
"src_char": "355:9"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 15,
"src": "422:9",
"src_char": "422:9"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 23,
"src": "384:4",
"src_char": "384:4"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 40,
"src": "776:4",
"src_char": "776:4"
},
{
"contract_path": "src/router/FallbackAndReceiveOverrides.sol",
"line_no": 22,
"src": "405:4",
"src_char": "405:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 31,
"src": "510:4",
"src_char": "510:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 46,
"src": "817:5",
"src_char": "817:5"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 96,
"src": "1780:4",
"src_char": "1780:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 120,
"src": "2306:4",
"src_char": "2306:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 161,
"src": "3047:4",
"src_char": "3047:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 169,
"src": "3165:4",
"src_char": "3165:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 177,
"src": "3290:4",
"src_char": "3290:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 183,
"src": "3379:4",
"src_char": "3379:4"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 22,
"src": "304:4",
"src_char": "304:4"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 35,
"src": "447:4",
"src_char": "447:4"
}
]
},
{
"title": "Literal Instead of Constant",
"description": "Define and use `constant` variables instead of using literals. If the same constant literal value is used multiple times, create a constant state variable and reference it throughout the contract.",
"detector_name": "literal-instead-of-constant",
"instances": [
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 9,
"src": "174:2",
"src_char": "174:2"
},
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 14,
"src": "254:2",
"src_char": "254:2"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 6,
"src": "170:3",
"src_char": "170:3"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 13,
"src": "330:3",
"src_char": "330:3"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 15,
"src": "360:3",
"src_char": "360:3"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 20,
"src": "492:3",
"src_char": "492:3"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 27,
"src": "653:3",
"src_char": "653:3"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 29,
"src": "683:3",
"src_char": "683:3"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 26,
"src": "611:3",
"src_char": "611:3"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 27,
"src": "639:3",
"src_char": "639:3"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 36,
"src": "1015:3",
"src_char": "1015:3"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 37,
"src": "1043:3",
"src_char": "1043:3"
},
{
"contract_path": "src/Casting.sol",
"line_no": 20,
"src": "511:18",
"src_char": "511:18"
},
{
"contract_path": "src/Casting.sol",
"line_no": 26,
"src": "674:18",
"src_char": "674:18"
},
{
"contract_path": "src/Casting.sol",
"line_no": 38,
"src": "983:18",
"src_char": "983:18"
},
{
"contract_path": "src/Casting.sol",
"line_no": 76,
"src": "2165:18",
"src_char": "2165:18"
},
{
"contract_path": "src/CompilerBugStorageSignedIntegerArray.sol",
"line_no": 9,
"src": "235:1",
"src_char": "235:1"
},
{
"contract_path": "src/CompilerBugStorageSignedIntegerArray.sol",
"line_no": 14,
"src": "352:1",
"src_char": "352:1"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 25,
"src": "958:3",
"src_char": "958:3"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 26,
"src": "992:3",
"src_char": "992:3"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 27,
"src": "1032:4",
"src_char": "1032:4"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 28,
"src": "1068:4",
"src_char": "1068:4"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 29,
"src": "1117:42",
"src_char": "1117:42"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 30,
"src": "1192:42",
"src_char": "1192:42"
},
{
"contract_path": "src/ConstantsLiterals.sol",
"line_no": 31,
"src": "1275:66",
"src_char": "1275:66"
},
{
"contract_path": "src/DangerousStrictEquality2.sol",
"line_no": 6,
"src": "202:9",
"src_char": "202:9"
},
{
"contract_path": "src/DangerousStrictEquality2.sol",
"line_no": 10,
"src": "339:9",
"src_char": "339:9"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 24,
"src": "718:1",
"src_char": "718:1"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 24,
"src": "771:1",
"src_char": "771:1"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 26,
"src": "838:1",
"src_char": "838:1"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 13,
"src": "312:3",
"src_char": "312:3"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 14,
"src": "346:3",
"src_char": "346:3"
},
{
"contract_path": "src/DynamicArrayLengthAssignment.sol",
"line_no": 17,
"src": "457:3",
"src_char": "457:3"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 23,
"src": "792:2",
"src_char": "792:2"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 26,
"src": "822:2",
"src_char": "822:2"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 34,
"src": "1111:2",
"src_char": "1111:2"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 37,
"src": "1141:2",
"src_char": "1141:2"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 42,
"src": "1270:4",
"src_char": "1270:4"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 42,
"src": "1277:4",
"src_char": "1277:4"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 48,
"src": "1461:4",
"src_char": "1461:4"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 48,
"src": "1468:4",
"src_char": "1468:4"
},
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 17,
"src": "563:2",
"src_char": "563:2"
},
{
"contract_path": "src/IncorrectCaretOperator.sol",
"line_no": 18,
"src": "606:2",
"src_char": "606:2"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 22,
"src": "423:3",
"src_char": "423:3"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 33,
"src": "619:3",
"src_char": "619:3"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 45,
"src": "825:3",
"src_char": "825:3"
},
{
"contract_path": "src/PreDeclaredVarUsage.sol",
"line_no": 8,
"src": "200:3",
"src_char": "200:3"
},
{
"contract_path": "src/PreDeclaredVarUsage.sol",
"line_no": 9,
"src": "222:3",
"src_char": "222:3"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 10,
"src": "253:2",
"src_char": "253:2"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 17,
"src": "442:2",
"src_char": "442:2"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 26,
"src": "706:2",
"src_char": "706:2"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 27,
"src": "745:2",
"src_char": "745:2"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 121,
"src": "3471:2",
"src_char": "3471:2"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 123,
"src": "3542:2",
"src_char": "3542:2"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 192,
"src": "5408:3",
"src_char": "5408:3"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 202,
"src": "5621:3",
"src_char": "5621:3"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 233,
"src": "6372:1",
"src_char": "6372:1"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 237,
"src": "6468:2",
"src_char": "6468:2"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 239,
"src": "6543:2",
"src_char": "6543:2"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 244,
"src": "6704:2",
"src_char": "6704:2"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 258,
"src": "7236:1",
"src_char": "7236:1"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 264,
"src": "7497:1",
"src_char": "7497:1"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 333,
"src": "9506:3",
"src_char": "9506:3"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 339,
"src": "9671:3",
"src_char": "9671:3"
},
{
"contract_path": "src/Trump.sol",
"line_no": 233,
"src": "7704:3",
"src_char": "7704:3"
},
{
"contract_path": "src/Trump.sol",
"line_no": 250,
"src": "8497:3",
"src_char": "8497:3"
},
{
"contract_path": "src/Trump.sol",
"line_no": 306,
"src": "10426:3",
"src_char": "10426:3"
},
{
"contract_path": "src/Trump.sol",
"line_no": 307,
"src": "10498:3",
"src_char": "10498:3"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 27,
"src": "607:7",
"src_char": "607:7"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 32,
"src": "805:7",
"src_char": "805:7"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 37,
"src": "995:7",
"src_char": "995:7"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 42,
"src": "1190:7",
"src_char": "1190:7"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 34,
"src": "1264:42",
"src_char": "1264:42"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 63,
"src": "2278:42",
"src_char": "2278:42"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 67,
"src": "2459:2",
"src_char": "2459:2"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 70,
"src": "2607:2",
"src_char": "2607:2"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 25,
"src": "933:2",
"src_char": "933:2"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 35,
"src": "1252:2",
"src_char": "1252:2"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 41,
"src": "1441:2",
"src_char": "1441:2"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 113,
"src": "7252:2",
"src_char": "5764:2"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 113,
"src": "7293:2",
"src_char": "5805:2"
}
]
},
{
"title": "Empty `require()` / `revert()` Statement",
"description": "Use descriptive reason strings or custom errors for revert paths.",
"detector_name": "empty-require-revert",
"instances": [
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 7,
"src": "128:7",
"src_char": "128:7"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 28,
"src": "531:6",
"src_char": "531:6"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 50,
"src": "936:6",
"src_char": "936:6"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 65,
"src": "1246:7",
"src_char": "1246:7"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 31,
"src": "948:7",
"src_char": "948:7"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 37,
"src": "1264:7",
"src_char": "1264:7"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 40,
"src": "1389:6",
"src_char": "1389:6"
},
{
"contract_path": "src/EmitAfterExternalCall.sol",
"line_no": 18,
"src": "424:7",
"src_char": "424:7"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 72,
"src": "1381:6",
"src_char": "1381:6"
},
{
"contract_path": "src/IncorrectModifier.sol",
"line_no": 49,
"src": "1334:6",
"src_char": "1334:6"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 12,
"src": "251:7",
"src_char": "251:7"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 19,
"src": "434:7",
"src_char": "434:7"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 33,
"src": "770:7",
"src_char": "770:7"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 23,
"src": "442:6",
"src_char": "442:6"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 34,
"src": "638:6",
"src_char": "638:6"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 46,
"src": "844:6",
"src_char": "844:6"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 19,
"src": "503:6",
"src_char": "503:6"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 12,
"src": "268:6",
"src_char": "268:6"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 27,
"src": "513:7",
"src_char": "513:7"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 43,
"src": "920:6",
"src_char": "920:6"
},
{
"contract_path": "src/SendEtherNoChecksLibImport.sol",
"line_no": 12,
"src": "451:6",
"src_char": "451:6"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 17,
"src": "428:7",
"src_char": "428:7"
},
{
"contract_path": "src/StateShadowing.sol",
"line_no": 8,
"src": "135:7",
"src_char": "135:7"
},
{
"contract_path": "src/Trump.sol",
"line_no": 240,
"src": "8065:7",
"src_char": "8065:7"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 13,
"src": "329:6",
"src_char": "329:6"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 23,
"src": "608:6",
"src_char": "608:6"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 38,
"src": "1074:6",
"src_char": "1074:6"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 35,
"src": "589:7",
"src_char": "589:7"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 56,
"src": "1403:7",
"src_char": "1400:7"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 35,
"src": "598:7",
"src_char": "598:7"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 53,
"src": "1408:7",
"src_char": "1408:7"
}
]
},
{
"title": "`nonReentrant` is Not the First Modifier",
"description": "To protect against reentrancy in other modifiers, the `nonReentrant` modifier should be the first modifier in the list of modifiers.",
"detector_name": "non-reentrant-not-first",
"instances": [
{
"contract_path": "src/AdminContract.sol",
"line_no": 10,
"src": "386:12",
"src_char": "386:12"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 28,
"src": "735:12",
"src_char": "735:12"
}
]
},
{
"title": "Using `block.timestamp` for swap deadline offers no protection",
"description": "In the PoS model, proposers know well in advance if they will propose one or consecutive blocks ahead of time. In such a scenario, a malicious validator can hold back the transaction and execute it at a more favourable block number.Consider allowing function caller to specify swap deadline input parameter.",
"detector_name": "block-timestamp-deadline",
"instances": [
{
"contract_path": "src/Trump.sol",
"line_no": 290,
"src": "9949:190",
"src_char": "9949:190"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 23,
"src": "670:83",
"src_char": "670:83"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 24,
"src": "763:83",
"src_char": "763:83"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 25,
"src": "856:70",
"src_char": "856:70"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 26,
"src": "936:80",
"src_char": "936:80"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 27,
"src": "1026:80",
"src_char": "1026:80"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 31,
"src": "1278:112",
"src_char": "1278:112"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 32,
"src": "1400:99",
"src_char": "1400:99"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 33,
"src": "1509:109",
"src_char": "1509:109"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 52,
"src": "1115:143",
"src_char": "1115:143"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 55,
"src": "1293:321",
"src_char": "1293:321"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 66,
"src": "1668:131",
"src_char": "1668:131"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 69,
"src": "1828:236",
"src_char": "1828:236"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 77,
"src": "2132:144",
"src_char": "2132:144"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 80,
"src": "2312:322",
"src_char": "2312:322"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 91,
"src": "2690:132",
"src_char": "2690:132"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 94,
"src": "2852:237",
"src_char": "2852:237"
}
]
},
{
"title": "Unsafe `ERC721::_mint()`",
"description": "Using `ERC721::_mint()` can mint ERC721 tokens to addresses which don't support ERC721 tokens. Use `_safeMint()` instead of `_mint()` for ERC721 tokens.",
"detector_name": "unsafe-oz-erc721-mint",
"instances": [
{
"contract_path": "src/UnsafeERC721Mint.sol",
"line_no": 12,
"src": "410:5",
"src_char": "410:5"
}
]
},
{
"title": "PUSH0 Opcode",
"description": "Solc compiler version 0.8.20 switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0 opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not support PUSH0, otherwise deployment of your contracts will fail.",
"detector_name": "push-zero-opcode",
"instances": [
{
"contract_path": "src/AdminContract.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ContractWithTodo.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/CostlyOperationsInsideLoops.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/Counter.sol",
"line_no": 2,
"src": "39:24",
"src_char": "39:24"
},
{
"contract_path": "src/CrazyPragma.sol",
"line_no": 2,
"src": "32:32",
"src_char": "32:32"
},
{
"contract_path": "src/DangerousStrictEquality2.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 2,
"src": "32:21",
"src_char": "32:21"
},
{
"contract_path": "src/DeletionNestedMappingStructureContract.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/FunctionSignatureCollision.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 1,
"src": "0:24",
"src_char": "0:24"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/KeccakContract.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/OnlyLibrary.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/ReturnBomb.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/StorageConditionals.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/T11sTranferer.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/TautologicalCompare.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/Trump.sol",
"line_no": 16,
"src": "227:23",
"src_char": "227:23"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 2,
"src": "32:24",
"src_char": "32:24"
},
{
"contract_path": "src/UnsafeERC721Mint.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 2,
"src": "32:24",
"src_char": "32:24"
},
{
"contract_path": "src/VoidConstructor.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/WeakRandomness.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 6,
"src": "46:24",
"src_char": "46:24"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 6,
"src": "46:32",
"src_char": "46:32"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 12,
"src": "2302:23",
"src_char": "814:23"
},
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/inheritance/IContractInheritance.sol",
"line_no": 2,
"src": "32:24",
"src_char": "32:24"
},
{
"contract_path": "src/inheritance/InheritanceBase.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/nested/1/Nested.sol",
"line_no": 5,
"src": "180:23",
"src_char": "180:23"
},
{
"contract_path": "src/nested/2/Nested.sol",
"line_no": 5,
"src": "180:23",
"src_char": "180:23"
},
{
"contract_path": "src/nested_mappings/LaterVersion.sol",
"line_no": 2,
"src": "36:23",
"src_char": "36:23"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
},
{
"contract_path": "src/uniswap/UniswapV3Swapper.sol",
"line_no": 2,
"src": "32:23",
"src_char": "32:23"
}
]
},
{
"title": "Modifier Invoked Only Once",
"description": "Consider removing the modifier or inlining the logic into the calling function.",
"detector_name": "modifier-used-only-once",
"instances": [
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 17,
"src": "358:39",
"src_char": "358:39"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 10,
"src": "186:22",
"src_char": "186:22"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 32,
"src": "571:22",
"src_char": "571:22"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 54,
"src": "976:22",
"src_char": "976:22"
},
{
"contract_path": "src/DelegateCallWithoutAddressCheck.sol",
"line_no": 23,
"src": "678:9",
"src_char": "678:9"
},
{
"contract_path": "src/InternalFunctions.sol",
"line_no": 18,
"src": "413:9",
"src_char": "413:9"
},
{
"contract_path": "src/OnceModifierExample.sol",
"line_no": 6,
"src": "103:8",
"src_char": "103:8"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 16,
"src": "308:4",
"src_char": "308:4"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 47,
"src": "960:4",
"src_char": "960:4"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 70,
"src": "1301:4",
"src_char": "1301:4"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 93,
"src": "1704:4",
"src_char": "1704:4"
},
{
"contract_path": "src/StateShadowing.sol",
"line_no": 7,
"src": "107:74",
"src_char": "107:74"
},
{
"contract_path": "src/Trump.sol",
"line_no": 162,
"src": "5133:11",
"src_char": "5133:11"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 15,
"src": "320:21",
"src_char": "320:21"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 5,
"src": "105:6",
"src_char": "105:6"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 31,
"src": "395:6",
"src_char": "395:6"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 42,
"src": "555:6",
"src_char": "555:6"
}
]
},
{
"title": "Empty Block",
"description": "Consider removing empty blocks.",
"detector_name": "empty-block",
"instances": [
{
"contract_path": "src/AderynIgnoreCustomDetectors.sol",
"line_no": 7,
"src": "174:2",
"src_char": "174:2"
},
{
"contract_path": "src/AdminContract.sol",
"line_no": 14,
"src": "457:23",
"src_char": "457:23"
},
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 8,
"src": "125:41",
"src_char": "125:41"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 17,
"src": "337:2",
"src_char": "337:2"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 42,
"src": "1104:2",
"src_char": "1104:2"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 16,
"src": "291:16",
"src_char": "291:16"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 38,
"src": "686:16",
"src_char": "686:16"
},
{
"contract_path": "src/ContractWithTodo.sol",
"line_no": 7,
"src": "129:10",
"src_char": "129:10"
},
{
"contract_path": "src/ContractWithTodo.sol",
"line_no": 13,
"src": "337:15",
"src_char": "337:15"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 30,
"src": "503:12",
"src_char": "503:12"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 38,
"src": "599:12",
"src_char": "599:12"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 49,
"src": "739:12",
"src_char": "739:12"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 63,
"src": "888:13",
"src_char": "888:13"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 67,
"src": "946:24",
"src_char": "946:24"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 73,
"src": "1068:30",
"src_char": "1068:30"
},
{
"contract_path": "src/EmptyBlocks.sol",
"line_no": 81,
"src": "1219:41",
"src_char": "1219:41"
},
{
"contract_path": "src/FunctionSignatureCollision.sol",
"line_no": 7,
"src": "166:8",
"src_char": "166:8"
},
{
"contract_path": "src/FunctionSignatureCollision.sol",
"line_no": 13,
"src": "231:22",
"src_char": "231:22"
},
{
"contract_path": "src/OnceModifierExample.sol",
"line_no": 10,
"src": "147:7",
"src_char": "147:7"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 193,
"src": "5775:13",
"src_char": "5775:13"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 53,
"src": "1060:5",
"src_char": "1060:5"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 77,
"src": "1405:5",
"src_char": "1405:5"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 99,
"src": "1795:5",
"src_char": "1795:5"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 9,
"src": "161:229",
"src_char": "161:229"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 27,
"src": "915:65",
"src_char": "915:65"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 43,
"src": "1071:38",
"src_char": "1071:38"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 11,
"src": "367:17",
"src_char": "367:17"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 30,
"src": "852:25",
"src_char": "852:25"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 38,
"src": "1080:16",
"src_char": "1080:16"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 61,
"src": "1840:17",
"src_char": "1840:17"
},
{
"contract_path": "src/auditor_mode/PublicFunctionsWithoutSenderCheck.sol",
"line_no": 85,
"src": "2380:25",
"src_char": "2380:25"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 11,
"src": "355:9",
"src_char": "355:9"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 32,
"src": "806:23",
"src_char": "806:23"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 40,
"src": "946:8",
"src_char": "946:8"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 44,
"src": "1011:23",
"src_char": "1011:23"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 13,
"src": "210:3",
"src_char": "210:3"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 17,
"src": "288:3",
"src_char": "288:3"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 8,
"src": "156:5",
"src_char": "156:5"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 23,
"src": "389:5",
"src_char": "389:5"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 38,
"src": "629:5",
"src_char": "629:5"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 40,
"src": "672:1",
"src_char": "672:1"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 44,
"src": "758:1",
"src_char": "758:1"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 54,
"src": "966:4",
"src_char": "966:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 84,
"src": "1544:4",
"src_char": "1544:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 96,
"src": "1780:4",
"src_char": "1780:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 98,
"src": "1820:4",
"src_char": "1820:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 111,
"src": "2140:4",
"src_char": "2140:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 113,
"src": "2182:4",
"src_char": "2182:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 136,
"src": "2623:4",
"src_char": "2623:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 142,
"src": "2696:1",
"src_char": "2696:1"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 167,
"src": "3123:4",
"src_char": "3123:4"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 175,
"src": "3244:4",
"src_char": "3244:4"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 7,
"src": "137:4",
"src_char": "137:4"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 22,
"src": "304:4",
"src_char": "304:4"
},
{
"contract_path": "src/router/ModifierCalls.sol",
"line_no": 46,
"src": "597:4",
"src_char": "597:4"
},
{
"contract_path": "src/router/VarOverridesFunction.sol",
"line_no": 5,
"src": "87:5",
"src_char": "87:5"
}
]
},
{
"title": "Large Numeric Literal",
"description": "Large literal values multiples of 10000 can be replaced with scientific notation.Use `e` notation, for example: `1e18`, instead of its full numeric value.",
"detector_name": "large-numeric-literal",
"instances": [
{
"contract_path": "src/HugeConstants.sol",
"line_no": 6,
"src": "182:24",
"src_char": "182:24"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 7,
"src": "252:23",
"src_char": "252:23"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 8,
"src": "321:22",
"src_char": "321:22"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 9,
"src": "389:21",
"src_char": "389:21"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 10,
"src": "456:20",
"src_char": "456:20"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 11,
"src": "522:19",
"src_char": "522:19"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 12,
"src": "587:18",
"src_char": "587:18"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 13,
"src": "651:17",
"src_char": "651:17"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 14,
"src": "714:16",
"src_char": "714:16"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 15,
"src": "777:15",
"src_char": "777:15"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 16,
"src": "839:14",
"src_char": "839:14"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 17,
"src": "900:13",
"src_char": "900:13"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 18,
"src": "960:12",
"src_char": "960:12"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 19,
"src": "1019:11",
"src_char": "1019:11"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 20,
"src": "1077:10",
"src_char": "1077:10"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 21,
"src": "1134:9",
"src_char": "1134:9"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 22,
"src": "1190:8",
"src_char": "1190:8"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 23,
"src": "1245:7",
"src_char": "1245:7"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 24,
"src": "1299:6",
"src_char": "1299:6"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 25,
"src": "1352:5",
"src_char": "1352:5"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 31,
"src": "1585:29",
"src_char": "1585:29"
},
{
"contract_path": "src/HugeConstants.sol",
"line_no": 32,
"src": "1673:6",
"src_char": "1673:6"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 8,
"src": "225:7",
"src_char": "225:7"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 51,
"src": "1550:7",
"src_char": "1550:7"
},
{
"contract_path": "src/Trump.sol",
"line_no": 145,
"src": "4412:8",
"src_char": "4412:8"
},
{
"contract_path": "src/Trump.sol",
"line_no": 148,
"src": "4579:6",
"src_char": "4579:6"
},
{
"contract_path": "src/Trump.sol",
"line_no": 151,
"src": "4756:6",
"src_char": "4756:6"
}
]
},
{
"title": "Internal Function Used Only Once",
"description": "Instead of separating the logic into a separate function, consider inlining the logic into the calling function. This can reduce the number of function calls and improve readability.",
"detector_name": "internal-function-used-once",
"instances": [
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 6,
"src": "89:17",
"src_char": "89:17"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 25,
"src": "398:17",
"src_char": "398:17"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 47,
"src": "803:17",
"src_char": "803:17"
},
{
"contract_path": "src/CallGraphTests.sol",
"line_no": 64,
"src": "1206:18",
"src_char": "1206:18"
},
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 26,
"src": "651:232",
"src_char": "651:232"
},
{
"contract_path": "src/InternalFunctions.sol",
"line_no": 28,
"src": "693:12",
"src_char": "693:12"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 43,
"src": "1103:8",
"src_char": "1103:8"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 60,
"src": "1529:8",
"src_char": "1529:8"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 77,
"src": "1962:8",
"src_char": "1962:8"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 9,
"src": "132:20",
"src_char": "132:20"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 26,
"src": "481:5",
"src_char": "481:5"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 40,
"src": "784:20",
"src_char": "784:20"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 66,
"src": "1209:15",
"src_char": "1209:15"
},
{
"contract_path": "src/SendEtherNoChecks.sol",
"line_no": 88,
"src": "1551:11",
"src_char": "1551:11"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredImmutable.sol",
"line_no": 26,
"src": "706:14",
"src_char": "706:14"
},
{
"contract_path": "src/StorageParameters.sol",
"line_no": 17,
"src": "388:11",
"src_char": "388:11"
},
{
"contract_path": "src/Trump.sol",
"line_no": 46,
"src": "1403:3",
"src_char": "1403:3"
},
{
"contract_path": "src/Trump.sol",
"line_no": 65,
"src": "1976:3",
"src_char": "1976:3"
},
{
"contract_path": "src/UncheckedSend.sol",
"line_no": 27,
"src": "915:65",
"src_char": "915:65"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 18,
"src": "300:5",
"src_char": "300:5"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 23,
"src": "389:5",
"src_char": "389:5"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 38,
"src": "629:5",
"src_char": "629:5"
}
]
},
{
"title": "Contract has TODO Comments",
"description": "Contract contains comments with TODOS. Consider implementing or removing them.",
"detector_name": "todo",
"instances": [
{
"contract_path": "src/ContractWithTodo.sol",
"line_no": 4,
"src": "66:8",
"src_char": "66:8"
},
{
"contract_path": "src/Counter.sol",
"line_no": 4,
"src": "74:7",
"src_char": "74:7"
},
{
"contract_path": "src/TautologicalCompare.sol",
"line_no": 4,
"src": "66:19",
"src_char": "66:19"
}
]
},
{
"title": "Inconsistent uint256/uint (or) int256/int types",
"description": "Inconsistency in declaring uint256/uint (or) int256/int variables within a contract. Use explicit size declarations (uint256 or int256). Consider keeping the naming convention consistent in a given contract. Explicit size declarations are preferred (uint256, int256) over implicit ones (uint, int) to avoid confusion.",
"detector_name": "inconsistent-type-names",
"instances": [
{
"contract_path": "src/Casting.sol",
"line_no": 38,
"src": "966:14",
"src_char": "966:14"
},
{
"contract_path": "src/Casting.sol",
"line_no": 76,
"src": "2148:13",
"src_char": "2148:13"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 5,
"src": "122:12",
"src_char": "122:12"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 7,
"src": "197:11",
"src_char": "197:11"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 11,
"src": "289:10",
"src_char": "289:10"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 12,
"src": "340:9",
"src_char": "340:9"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 15,
"src": "383:9",
"src_char": "383:9"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 16,
"src": "434:10",
"src_char": "434:10"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 19,
"src": "528:12",
"src_char": "528:12"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 115,
"src": "2967:4",
"src_char": "2967:4"
},
{
"contract_path": "src/TautologicalCompare.sol",
"line_no": 11,
"src": "351:1",
"src_char": "351:1"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 6,
"src": "133:6",
"src_char": "133:6"
},
{
"contract_path": "src/Trump.sol",
"line_no": 159,
"src": "5000:12",
"src_char": "5000:12"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 9,
"src": "211:17",
"src_char": "211:17"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 15,
"src": "434:22",
"src_char": "434:22"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 25,
"src": "817:15",
"src_char": "817:15"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 31,
"src": "1109:20",
"src_char": "1109:20"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 43,
"src": "1639:11",
"src_char": "1639:11"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 49,
"src": "1826:16",
"src_char": "1826:16"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 59,
"src": "4611:27",
"src_char": "3123:27"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 61,
"src": "4732:17",
"src_char": "3244:17"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 70,
"src": "5020:6",
"src_char": "3532:6"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 76,
"src": "5307:4",
"src_char": "3819:4"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 77,
"src": "5347:6",
"src_char": "3859:6"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 103,
"src": "6636:14",
"src_char": "5148:14"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 133,
"src": "8101:4",
"src_char": "6613:4"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 134,
"src": "8141:6",
"src_char": "6653:6"
},
{
"contract_path": "src/nested_mappings/LaterVersion.sol",
"line_no": 8,
"src": "184:5",
"src_char": "184:5"
},
{
"contract_path": "src/nested_mappings/NestedMappings.sol",
"line_no": 8,
"src": "168:10",
"src_char": "168:10"
}
]
},
{
"title": "Unused Error",
"description": "Consider using or removing the unused error.",
"detector_name": "unused-error",
"instances": [
{
"contract_path": "src/UnusedError.sol",
"line_no": 5,
"src": "84:27",
"src_char": "84:27"
},
{
"contract_path": "src/UnusedError.sol",
"line_no": 14,
"src": "286:36",
"src_char": "286:36"
},
{
"contract_path": "src/WrongOrderOfLayout.sol",
"line_no": 13,
"src": "274:21",
"src_char": "274:21"
}
]
},
{
"title": "Loop Contains `require`/`revert`",
"description": "Avoid `require` / `revert` statements in a loop because a single bad item can cause the whole transaction to fail. It's better to forgive on fail and return failed elements post processing of the loop",
"detector_name": "require-revert-in-loop",
"instances": [
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 10,
"src": "263:93",
"src_char": "263:93"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 17,
"src": "452:114",
"src_char": "452:114"
}
]
},
{
"title": "Incorrect Order of Division and Multiplication",
"description": "Division operations followed directly by multiplication operations can lead to precision loss due to the way integer arithmetic is handled in Solidity./\n Consider Multiplication before Division.",
"detector_name": "division-before-multiplication",
"instances": [
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 8,
"src": "218:5",
"src_char": "218:5"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 12,
"src": "330:5",
"src_char": "330:5"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 16,
"src": "432:5",
"src_char": "432:5"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 20,
"src": "541:5",
"src_char": "541:5"
}
]
},
{
"title": "Redundant Statement",
"description": "Remove the redundant statement.",
"detector_name": "redundant-statement",
"instances": [
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 6,
"src": "131:4",
"src_char": "131:4"
},
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 7,
"src": "169:4",
"src_char": "169:4"
},
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 8,
"src": "207:27",
"src_char": "207:27"
},
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 12,
"src": "309:4",
"src_char": "309:4"
},
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 13,
"src": "347:6",
"src_char": "347:6"
},
{
"contract_path": "src/RedundantStatements.sol",
"line_no": 14,
"src": "377:4",
"src_char": "377:4"
}
]
},
{
"title": "State Variable is Read as External",
"description": "The contract reads it's own state variable using `this` which adds an unnecessary STATICCALL. Consider removing `this` to access the variable from storage.",
"detector_name": "state-variable-read-external",
"instances": [
{
"contract_path": "src/PublicVariableReadInExternalContext.sol",
"line_no": 12,
"src": "355:14",
"src_char": "355:14"
},
{
"contract_path": "src/PublicVariableReadInExternalContext.sol",
"line_no": 16,
"src": "457:16",
"src_char": "457:16"
},
{
"contract_path": "src/PublicVariableReadInExternalContext.sol",
"line_no": 20,
"src": "553:12",
"src_char": "553:12"
},
{
"contract_path": "src/PublicVariableReadInExternalContext.sol",
"line_no": 42,
"src": "1175:14",
"src_char": "1175:14"
}
]
},
{
"title": "Unused State Variable",
"description": "State variable appears to be unused. No analysis has been performed to see if any inline assembly references it. Consider removing this unused variable.",
"detector_name": "unused-state-variable",
"instances": [
{
"contract_path": "src/AssemblyExample.sol",
"line_no": 5,
"src": "97:1",
"src_char": "97:1"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 16,
"src": "434:10",
"src_char": "434:10"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 7,
"src": "129:5",
"src_char": "129:5"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 8,
"src": "199:19",
"src_char": "199:19"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 9,
"src": "241:20",
"src_char": "241:20"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 13,
"src": "383:27",
"src_char": "383:27"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 14,
"src": "437:28",
"src_char": "437:28"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 28,
"src": "1056:16",
"src_char": "1056:16"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 29,
"src": "1108:17",
"src_char": "1108:17"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 6,
"src": "133:6",
"src_char": "133:6"
},
{
"contract_path": "src/TautologyOrContradiction.sol",
"line_no": 7,
"src": "145:9",
"src_char": "145:9"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 5,
"src": "93:12",
"src_char": "93:12"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 13,
"src": "503:3",
"src_char": "503:3"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 6,
"src": "147:13",
"src_char": "147:13"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 7,
"src": "183:13",
"src_char": "183:13"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 8,
"src": "215:10",
"src_char": "215:10"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 9,
"src": "246:12",
"src_char": "246:12"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 14,
"src": "151:3",
"src_char": "151:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 16,
"src": "190:3",
"src_char": "190:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 19,
"src": "261:3",
"src_char": "261:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 22,
"src": "367:3",
"src_char": "367:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 29,
"src": "477:3",
"src_char": "477:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 14,
"src": "160:3",
"src_char": "160:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 16,
"src": "199:3",
"src_char": "199:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 19,
"src": "270:3",
"src_char": "270:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 22,
"src": "376:3",
"src_char": "376:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 29,
"src": "486:3",
"src_char": "486:3"
}
]
},
{
"title": "Constant Function Contains Assembly",
"description": "constant/pure/view was not enforced prior to Solidity 0.5. Starting from Solidity 0.5, a call to a constant/pure/view function uses the STATICCALL opcode, which reverts in case of state modification. As a result, a call to an incorrectly labeled function may trap a contract compiled with Solidity 0.5. https://docs.soliditylang.org/en/develop/050-breaking-changes.html#interoperability-with-older-contracts",
"detector_name": "constant-function-contains-assembly",
"instances": [
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 9,
"src": "182:175",
"src_char": "182:175"
},
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 17,
"src": "408:237",
"src_char": "408:237"
},
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 36,
"src": "934:98",
"src_char": "934:98"
}
]
},
{
"title": "Boolean equality is not required",
"description": "If `x` is a boolean, use `if(x)` and `if(!x)` instead of `if(x == true)` or `if(x == false)`.",
"detector_name": "boolean-equality",
"instances": [
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 5,
"src": "133:14",
"src_char": "133:14"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 12,
"src": "292:15",
"src_char": "292:15"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 19,
"src": "454:15",
"src_char": "454:15"
},
{
"contract_path": "src/BooleanEquality.sol",
"line_no": 26,
"src": "614:16",
"src_char": "614:16"
}
]
},
{
"title": "Local Variable Shadows State Variable",
"description": "Rename the local variable that shadows another state variable.",
"detector_name": "local-variable-shadowing",
"instances": [
{
"contract_path": "src/AdminContract.sol",
"line_no": 10,
"src": "359:6",
"src_char": "359:6"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 41,
"src": "1253:1",
"src_char": "1253:1"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 46,
"src": "1392:1",
"src_char": "1392:1"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 10,
"src": "207:5",
"src_char": "207:5"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 17,
"src": "391:5",
"src_char": "391:5"
},
{
"contract_path": "src/LocalVariableShadow.sol",
"line_no": 31,
"src": "727:4",
"src_char": "727:4"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 144,
"src": "4121:17",
"src_char": "4121:17"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 147,
"src": "4236:8",
"src_char": "4236:8"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 148,
"src": "4262:12",
"src_char": "4262:12"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 28,
"src": "708:6",
"src_char": "708:6"
}
]
},
{
"title": "Uninitialized Local Variable",
"description": "Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.",
"detector_name": "uninitialized-local-variable",
"instances": [
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 18,
"src": "478:14",
"src_char": "478:14"
},
{
"contract_path": "src/ConstantFuncsAssembly.sol",
"line_no": 27,
"src": "716:14",
"src_char": "716:14"
},
{
"contract_path": "src/StorageParameters.sol",
"line_no": 8,
"src": "184:11",
"src_char": "184:11"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 9,
"src": "211:17",
"src_char": "211:17"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 10,
"src": "243:17",
"src_char": "243:17"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 11,
"src": "278:20",
"src_char": "278:20"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 12,
"src": "312:16",
"src_char": "312:16"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 13,
"src": "346:20",
"src_char": "346:20"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 14,
"src": "390:19",
"src_char": "390:19"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 15,
"src": "434:22",
"src_char": "434:22"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 16,
"src": "481:22",
"src_char": "481:22"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 17,
"src": "531:25",
"src_char": "531:25"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 18,
"src": "580:21",
"src_char": "580:21"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 19,
"src": "629:25",
"src_char": "629:25"
},
{
"contract_path": "src/UninitializedLocalVariables.sol",
"line_no": 20,
"src": "681:24",
"src_char": "681:24"
}
]
},
{
"title": "Return Bomb",
"description": "A low level callee may consume all callers gas unexpectedly. Avoid unlimited implicit decoding of returndata on calls to unchecked addresses. You can limit the gas by passing a gas limit as an option to the call. For example, `unknownAddress.call{gas: gasLimitHere}(\"calldata\")` That would act as a safety net from OOG errors.\n ",
"detector_name": "return-bomb",
"instances": [
{
"contract_path": "src/ReturnBomb.sol",
"line_no": 22,
"src": "591:115",
"src_char": "591:115"
}
]
},
{
"title": "Function Used to Initialize State Variable",
"description": "Instead of using a function to initialize a state variable in its declaration; declare the state variable and initialize it in the constructor.",
"detector_name": "function-initializing-state",
"instances": [
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 6,
"src": "122:1",
"src_char": "122:1"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 8,
"src": "213:1",
"src_char": "213:1"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 9,
"src": "281:1",
"src_char": "281:1"
}
]
},
{
"title": "Dead Code",
"description": "Functions that are not used. Consider removing them.",
"detector_name": "dead-code",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 18,
"src": "535:4",
"src_char": "535:4"
},
{
"contract_path": "src/ContractLocksEther.sol",
"line_no": 54,
"src": "1540:10",
"src_char": "1540:10"
},
{
"contract_path": "src/DeadCode.sol",
"line_no": 16,
"src": "362:22",
"src_char": "362:22"
},
{
"contract_path": "src/DeletionNestedMappingStructureContract.sol",
"line_no": 14,
"src": "258:6",
"src_char": "258:6"
},
{
"contract_path": "src/IncorrectShift.sol",
"line_no": 5,
"src": "100:8",
"src_char": "100:8"
},
{
"contract_path": "src/IncorrectShift.sol",
"line_no": 13,
"src": "292:9",
"src_char": "292:9"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 12,
"src": "186:19",
"src_char": "186:19"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 20,
"src": "362:21",
"src_char": "362:21"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 25,
"src": "492:19",
"src_char": "492:19"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 30,
"src": "644:21",
"src_char": "644:21"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 35,
"src": "842:26",
"src_char": "842:26"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 40,
"src": "1049:19",
"src_char": "1049:19"
}
]
},
{
"title": "Storage Array Length not Cached",
"description": "Calling `.length` on a storage array in a loop condition is expensive. Consider caching the length in a local variable in memory before the loop and reusing it.",
"detector_name": "storage-array-length-not-cached",
"instances": [
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 12,
"src": "234:82",
"src_char": "234:82"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 44,
"src": "1160:64",
"src_char": "1160:64"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 50,
"src": "1325:183",
"src_char": "1325:183"
}
]
},
{
"title": "State change in `assert()` statement",
"description": "An argument to `assert()` modifies the state. Use `require` for invariants modifying state.",
"detector_name": "assert-state-change",
"instances": [
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 9,
"src": "154:23",
"src_char": "154:23"
}
]
},
{
"title": "Costly operations inside loop",
"description": "Invoking `SSTORE` operations in loops may waste gas. Use a local variable to hold the loop computation result.",
"detector_name": "costly-loop",
"instances": [
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 25,
"src": "546:133",
"src_char": "546:133"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 35,
"src": "928:155",
"src_char": "928:155"
},
{
"contract_path": "src/CostlyOperationsInsideLoops.sol",
"line_no": 10,
"src": "214:79",
"src_char": "214:79"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 29,
"src": "989:157",
"src_char": "989:157"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 38,
"src": "1253:155",
"src_char": "1253:155"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 48,
"src": "1517:159",
"src_char": "1517:159"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 57,
"src": "1749:157",
"src_char": "1749:157"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 65,
"src": "1976:142",
"src_char": "1976:142"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 12,
"src": "289:107",
"src_char": "289:107"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 25,
"src": "658:122",
"src_char": "658:122"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 38,
"src": "988:94",
"src_char": "988:94"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 54,
"src": "1415:93",
"src_char": "1415:93"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 71,
"src": "1844:97",
"src_char": "1844:97"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 10,
"src": "227:129",
"src_char": "227:129"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 17,
"src": "416:150",
"src_char": "416:150"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 27,
"src": "719:159",
"src_char": "719:159"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 47,
"src": "1144:154",
"src_char": "1144:154"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 134,
"src": "8131:283",
"src_char": "6643:283"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 17,
"src": "512:110",
"src_char": "512:110"
}
]
},
{
"title": "Builtin Symbol Shadowing",
"description": "Name clashes with a built-in-symbol. Consider renaming it.",
"detector_name": "builtin-symbol-shadowing",
"instances": [
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 5,
"src": "92:8",
"src_char": "92:8"
},
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 8,
"src": "125:41",
"src_char": "125:41"
},
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 17,
"src": "358:39",
"src_char": "358:39"
},
{
"contract_path": "src/BuiltinSymbolShadow.sol",
"line_no": 22,
"src": "414:15",
"src_char": "414:15"
}
]
},
{
"title": "Void constructor",
"description": "Call to a constructor that is not implemented.",
"detector_name": "void-constructor",
"instances": [
{
"contract_path": "src/VoidConstructor.sol",
"line_no": 16,
"src": "372:17",
"src_char": "372:17"
}
]
},
{
"title": "Missing Inheritance",
"description": "There is an interface / abstract contract that is potentially missing (not included in) the inheritance of this contract.",
"detector_name": "missing-inheritance",
"instances": [
{
"contract_path": "src/MissingInheritance.sol",
"line_no": 7,
"src": "83:25",
"src_char": "83:25",
"hint": "Is this contract supposed to implement an interface? Consider extending one of the following: IMissingInheritanceCounter"
},
{
"contract_path": "src/MissingInheritance.sol",
"line_no": 41,
"src": "754:16",
"src_char": "754:16",
"hint": "Is this contract supposed to implement an interface? Consider extending one of the following: IMissingChild, IMissingParent"
},
{
"contract_path": "src/TestERC20.sol",
"line_no": 4,
"src": "70:9",
"src_char": "70:9",
"hint": "Is this contract supposed to implement an interface? Consider extending one of the following: IERC20"
}
]
},
{
"title": "Unused Import",
"description": "Redundant import statement. Consider removing it.",
"detector_name": "unused-import",
"instances": [
{
"contract_path": "src/StateVariables.sol",
"line_no": 4,
"src": "57:38",
"src_char": "57:38"
},
{
"contract_path": "src/UnusedImport.sol",
"line_no": 6,
"src": "91:18",
"src_char": "91:18"
},
{
"contract_path": "src/UnusedImport.sol",
"line_no": 9,
"src": "144:28",
"src_char": "144:28"
}
]
},
{
"title": "Function Pointer in Constructor",
"description": "solc versions below 0.5.9 contain a compiler bug leading to unexpected behavior when calling uninitialized function pointers in constructors. It is recommended to not use function pointers in constructors.",
"detector_name": "function-pointer-in-constructor",
"instances": [
{
"contract_path": "src/FunctionPointers.sol",
"line_no": 13,
"src": "330:50",
"src_char": "330:50"
}
]
},
{
"title": "State Variable Could Be Constant",
"description": "State variables that are not updated following deployment should be declared constant to save gas. Add the `constant` attribute to state variables that never change.",
"detector_name": "state-variable-could-be-constant",
"instances": [
{
"contract_path": "src/CostlyOperationsInsideLoops.sol",
"line_no": 6,
"src": "128:10",
"src_char": "128:10"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 7,
"src": "190:1",
"src_char": "190:1"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 58,
"src": "1617:1",
"src_char": "1617:1"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 5,
"src": "101:4",
"src_char": "101:4"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 6,
"src": "144:6",
"src_char": "144:6"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 7,
"src": "177:8",
"src_char": "177:8"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 8,
"src": "211:11",
"src_char": "211:11"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 48,
"src": "1426:4",
"src_char": "1426:4"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 49,
"src": "1467:6",
"src_char": "1467:6"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 50,
"src": "1500:8",
"src_char": "1500:8"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 51,
"src": "1535:12",
"src_char": "1535:12"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 5,
"src": "102:4",
"src_char": "102:4"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 6,
"src": "143:6",
"src_char": "143:6"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 145,
"src": "4001:4",
"src_char": "4001:4"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 146,
"src": "4040:6",
"src_char": "4040:6"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredConstant.sol",
"line_no": 8,
"src": "211:13",
"src_char": "211:13"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredConstant.sol",
"line_no": 13,
"src": "385:1",
"src_char": "385:1"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 13,
"src": "383:27",
"src_char": "383:27"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 14,
"src": "437:28",
"src_char": "437:28"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 15,
"src": "490:26",
"src_char": "490:26"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 40,
"src": "1188:9",
"src_char": "1188:9"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 41,
"src": "1221:10",
"src_char": "1221:10"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 72,
"src": "2068:13",
"src_char": "2068:13"
},
{
"contract_path": "src/Trump.sol",
"line_no": 130,
"src": "3920:20",
"src_char": "3920:20"
},
{
"contract_path": "src/Trump.sol",
"line_no": 131,
"src": "3967:21",
"src_char": "3967:21"
},
{
"contract_path": "src/Trump.sol",
"line_no": 135,
"src": "4041:14",
"src_char": "4041:14"
},
{
"contract_path": "src/Trump.sol",
"line_no": 136,
"src": "4080:15",
"src_char": "4080:15"
},
{
"contract_path": "src/Trump.sol",
"line_no": 137,
"src": "4120:12",
"src_char": "4120:12"
},
{
"contract_path": "src/Trump.sol",
"line_no": 138,
"src": "4156:13",
"src_char": "4156:13"
},
{
"contract_path": "src/Trump.sol",
"line_no": 139,
"src": "4193:15",
"src_char": "4193:15"
},
{
"contract_path": "src/Trump.sol",
"line_no": 140,
"src": "4233:16",
"src_char": "4233:16"
},
{
"contract_path": "src/Trump.sol",
"line_no": 141,
"src": "4274:18",
"src_char": "4274:18"
},
{
"contract_path": "src/Trump.sol",
"line_no": 150,
"src": "4682:17",
"src_char": "4682:17"
},
{
"contract_path": "src/Trump.sol",
"line_no": 151,
"src": "4743:11",
"src_char": "4743:11"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 8,
"src": "198:11",
"src_char": "198:11"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 14,
"src": "151:3",
"src_char": "151:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 16,
"src": "190:3",
"src_char": "190:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 19,
"src": "261:3",
"src_char": "261:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 22,
"src": "367:3",
"src_char": "367:3"
},
{
"contract_path": "src/cloc/AnotherHeavilyCommentedContract.sol",
"line_no": 29,
"src": "477:3",
"src_char": "477:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 14,
"src": "160:3",
"src_char": "160:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 16,
"src": "199:3",
"src_char": "199:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 19,
"src": "270:3",
"src_char": "270:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 22,
"src": "376:3",
"src_char": "376:3"
},
{
"contract_path": "src/cloc/HeavilyCommentedContract.sol",
"line_no": 29,
"src": "486:3",
"src_char": "486:3"
}
]
},
{
"title": "State Change Without Event",
"description": "There are state variable changes in this function but no event is emitted. Consider emitting an event to enable offchain indexers to track the changes.",
"detector_name": "state-change-without-event",
"instances": [
{
"contract_path": "src/AdminContract.sol",
"line_no": 14,
"src": "457:23",
"src_char": "457:23"
},
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 8,
"src": "131:3",
"src_char": "131:3"
},
{
"contract_path": "src/AssertStateChange.sol",
"line_no": 12,
"src": "199:4",
"src_char": "199:4"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 23,
"src": "506:2",
"src_char": "506:2"
},
{
"contract_path": "src/CacheArrayLength.sol",
"line_no": 32,
"src": "700:2",
"src_char": "700:2"
},
{
"contract_path": "src/Casting.sol",
"line_no": 37,
"src": "922:17",
"src_char": "922:17"
},
{
"contract_path": "src/Casting.sol",
"line_no": 75,
"src": "2106:16",
"src_char": "2106:16"
},
{
"contract_path": "src/Casting.sol",
"line_no": 113,
"src": "3222:20",
"src_char": "3222:20"
},
{
"contract_path": "src/CostlyOperationsInsideLoops.sol",
"line_no": 9,
"src": "189:3",
"src_char": "189:3"
},
{
"contract_path": "src/CostlyOperationsInsideLoops.sol",
"line_no": 15,
"src": "314:4",
"src_char": "314:4"
},
{
"contract_path": "src/Counter.sol",
"line_no": 7,
"src": "129:9",
"src_char": "129:9"
},
{
"contract_path": "src/Counter.sol",
"line_no": 11,
"src": "215:9",
"src_char": "215:9"
},
{
"contract_path": "src/Counter.sol",
"line_no": 16,
"src": "286:13",
"src_char": "286:13"
},
{
"contract_path": "src/Counter.sol",
"line_no": 21,
"src": "367:19",
"src_char": "367:19"
},
{
"contract_path": "src/Counter.sol",
"line_no": 28,
"src": "495:22",
"src_char": "495:22"
},
{
"contract_path": "src/DeadCode.sol",
"line_no": 11,
"src": "189:8",
"src_char": "189:8"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 7,
"src": "135:14",
"src_char": "135:14"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 11,
"src": "254:18",
"src_char": "254:18"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 15,
"src": "367:11",
"src_char": "367:11"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 19,
"src": "465:19",
"src_char": "465:19"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 23,
"src": "577:16",
"src_char": "577:16"
},
{
"contract_path": "src/DivisionBeforeMultiplication.sol",
"line_no": 27,
"src": "690:20",
"src_char": "690:20"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 28,
"src": "939:28",
"src_char": "939:28"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 36,
"src": "1178:30",
"src_char": "1178:30"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 46,
"src": "1440:32",
"src_char": "1440:32"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 56,
"src": "1708:19",
"src_char": "1708:19"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 64,
"src": "1938:16",
"src_char": "1938:16"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 11,
"src": "194:7",
"src_char": "194:7"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 19,
"src": "309:9",
"src_char": "309:9"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 78,
"src": "1470:7",
"src_char": "1470:7"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 82,
"src": "1548:7",
"src_char": "1548:7"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 17,
"src": "483:8",
"src_char": "483:8"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 23,
"src": "690:7",
"src_char": "690:7"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 27,
"src": "808:12",
"src_char": "808:12"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 68,
"src": "2007:8",
"src_char": "2007:8"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 83,
"src": "2352:7",
"src_char": "2352:7"
},
{
"contract_path": "src/IncorrectERC20.sol",
"line_no": 88,
"src": "2507:12",
"src_char": "2507:12"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 22,
"src": "696:7",
"src_char": "696:7"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 41,
"src": "1231:17",
"src_char": "1231:17"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 56,
"src": "1684:12",
"src_char": "1684:12"
},
{
"contract_path": "src/IncorrectERC721.sol",
"line_no": 86,
"src": "2439:4",
"src_char": "2439:4"
},
{
"contract_path": "src/InternalFunctions.sol",
"line_no": 12,
"src": "213:8",
"src_char": "213:8"
},
{
"contract_path": "src/MissingInheritance.sol",
"line_no": 10,
"src": "151:9",
"src_char": "151:9"
},
{
"contract_path": "src/MissingInheritance.sol",
"line_no": 25,
"src": "451:9",
"src_char": "451:9"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 10,
"src": "177:3",
"src_char": "177:3"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 22,
"src": "501:4",
"src_char": "501:4"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 36,
"src": "905:3",
"src_char": "905:3"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 51,
"src": "1307:3",
"src_char": "1307:3"
},
{
"contract_path": "src/MsgValueInLoop.sol",
"line_no": 68,
"src": "1733:3",
"src_char": "1733:3"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 175,
"src": "5072:7",
"src_char": "5072:7"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 9,
"src": "188:17",
"src_char": "188:17"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 16,
"src": "377:17",
"src_char": "377:17"
},
{
"contract_path": "src/RevertsAndRequriesInLoops.sol",
"line_no": 25,
"src": "588:17",
"src_char": "588:17"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 22,
"src": "530:13",
"src_char": "530:13"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 31,
"src": "677:13",
"src_char": "677:13"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 42,
"src": "885:13",
"src_char": "885:13"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 57,
"src": "1331:14",
"src_char": "1331:14"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 66,
"src": "1480:14",
"src_char": "1480:14"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 81,
"src": "1769:13",
"src_char": "1769:13"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 87,
"src": "1885:14",
"src_char": "1885:14"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredConstant.sol",
"line_no": 39,
"src": "996:8",
"src_char": "996:8"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredImmutable.sol",
"line_no": 37,
"src": "1455:21",
"src_char": "1455:21"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 47,
"src": "1764:18",
"src_char": "1764:18"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 52,
"src": "1915:20",
"src_char": "1915:20"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 57,
"src": "2072:14",
"src_char": "2072:14"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 61,
"src": "2157:22",
"src_char": "2157:22"
},
{
"contract_path": "src/StateVariables.sol",
"line_no": 71,
"src": "2539:25",
"src_char": "2539:25"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 23,
"src": "574:26",
"src_char": "574:26"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 28,
"src": "679:36",
"src_char": "679:36"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 33,
"src": "794:35",
"src_char": "794:35"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 45,
"src": "1047:36",
"src_char": "1047:36"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 50,
"src": "1157:26",
"src_char": "1157:26"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 55,
"src": "1266:24",
"src_char": "1266:24"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 68,
"src": "1621:33",
"src_char": "1621:33"
},
{
"contract_path": "src/StateVariablesChangesWithoutEvents.sol",
"line_no": 81,
"src": "2003:34",
"src_char": "2003:34"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 48,
"src": "1463:26",
"src_char": "1463:26"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 80,
"src": "2360:18",
"src_char": "2360:18"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 85,
"src": "2519:24",
"src_char": "2519:24"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 120,
"src": "3396:24",
"src_char": "3396:24"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 126,
"src": "3566:25",
"src_char": "3566:25"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 139,
"src": "3960:25",
"src_char": "3960:25"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 160,
"src": "4556:25",
"src_char": "4556:25"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 176,
"src": "5020:25",
"src_char": "5020:25"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 182,
"src": "5159:25",
"src_char": "5159:25"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 281,
"src": "7993:18",
"src_char": "7993:18"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 286,
"src": "8121:24",
"src_char": "8121:24"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 314,
"src": "8845:18",
"src_char": "8845:18"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 321,
"src": "9054:24",
"src_char": "9054:24"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 332,
"src": "9447:25",
"src_char": "9447:25"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 337,
"src": "9572:26",
"src_char": "9572:26"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 353,
"src": "9896:3",
"src_char": "9896:3"
},
{
"contract_path": "src/StorageParameters.sol",
"line_no": 7,
"src": "137:10",
"src_char": "137:10"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 16,
"src": "348:13",
"src_char": "348:13"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 22,
"src": "531:10",
"src_char": "531:10"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 21,
"src": "452:22",
"src_char": "452:22"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 27,
"src": "618:20",
"src_char": "618:20"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 37,
"src": "916:33",
"src_char": "916:33"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 70,
"src": "1798:27",
"src_char": "1798:27"
},
{
"contract_path": "src/UnusedError.sol",
"line_no": 16,
"src": "337:7",
"src_char": "337:7"
},
{
"contract_path": "src/UnusedStateVariables.sol",
"line_no": 15,
"src": "454:8",
"src_char": "454:8"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 12,
"src": "253:12",
"src_char": "253:12"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 17,
"src": "383:12",
"src_char": "383:12"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 22,
"src": "534:10",
"src_char": "534:10"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 27,
"src": "671:10",
"src_char": "671:10"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 32,
"src": "829:10",
"src_char": "829:10"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 37,
"src": "990:10",
"src_char": "990:10"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 42,
"src": "1130:4",
"src_char": "1130:4"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 46,
"src": "1207:4",
"src_char": "1207:4"
},
{
"contract_path": "src/ZeroAddressCheck.sol",
"line_no": 50,
"src": "1286:4",
"src_char": "1286:4"
},
{
"contract_path": "src/inheritance/ExtendedInheritance.sol",
"line_no": 14,
"src": "391:15",
"src_char": "391:15"
},
{
"contract_path": "src/nested/1/Nested.sol",
"line_no": 10,
"src": "265:17",
"src_char": "265:17"
},
{
"contract_path": "src/nested/2/Nested.sol",
"line_no": 10,
"src": "272:17",
"src_char": "272:17"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 15,
"src": "422:9",
"src_char": "422:9"
},
{
"contract_path": "src/parent_chain/ParentChainContract.sol",
"line_no": 32,
"src": "806:23",
"src_char": "806:23"
},
{
"contract_path": "src/router/InternalCalls.sol",
"line_no": 120,
"src": "2306:4",
"src_char": "2306:4"
}
]
},
{
"title": "State Variable Could Be Immutable",
"description": "State variables that are only changed in the constructor should be declared immutable to save gas. Add the `immutable` attribute to state variables that are only changed in the constructor",
"detector_name": "state-variable-could-be-immutable",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 9,
"src": "217:7",
"src_char": "217:7"
},
{
"contract_path": "src/EmitAfterExternalCall.sol",
"line_no": 15,
"src": "373:7",
"src_char": "373:7"
},
{
"contract_path": "src/ExternalCalls.sol",
"line_no": 25,
"src": "416:2",
"src_char": "416:2"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 57,
"src": "1598:1",
"src_char": "1598:1"
},
{
"contract_path": "src/FunctionInitializingState.sol",
"line_no": 59,
"src": "1640:1",
"src_char": "1640:1"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 5,
"src": "122:12",
"src_char": "122:12"
},
{
"contract_path": "src/InconsistentUints.sol",
"line_no": 6,
"src": "160:15",
"src_char": "160:15"
},
{
"contract_path": "src/InternalFunctions.sol",
"line_no": 5,
"src": "111:5",
"src_char": "111:5"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 5,
"src": "110:5",
"src_char": "110:5"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 39,
"src": "1052:5",
"src_char": "1052:5"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 40,
"src": "1078:10",
"src_char": "1078:10"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 41,
"src": "1109:17",
"src_char": "1109:17"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 42,
"src": "1147:8",
"src_char": "1147:8"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 43,
"src": "1176:12",
"src_char": "1176:12"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 44,
"src": "1209:3",
"src_char": "1209:3"
},
{
"contract_path": "src/StateChangeAfterExternalCall.sol",
"line_no": 14,
"src": "377:7",
"src_char": "377:7"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredConstant.sol",
"line_no": 11,
"src": "281:13",
"src_char": "281:13"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredConstant.sol",
"line_no": 29,
"src": "811:13",
"src_char": "811:13"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredImmutable.sol",
"line_no": 6,
"src": "162:24",
"src_char": "162:24"
},
{
"contract_path": "src/StateVariableCouldBeDeclaredImmutable.sol",
"line_no": 9,
"src": "245:24",
"src_char": "245:24"
},
{
"contract_path": "src/StorageConditionals.sol",
"line_no": 5,
"src": "108:18",
"src_char": "108:18"
},
{
"contract_path": "src/StorageConditionals.sol",
"line_no": 6,
"src": "148:23",
"src_char": "148:23"
},
{
"contract_path": "src/TestERC20.sol",
"line_no": 7,
"src": "144:4",
"src_char": "144:4"
},
{
"contract_path": "src/TestERC20.sol",
"line_no": 8,
"src": "168:6",
"src_char": "168:6"
},
{
"contract_path": "src/Trump.sol",
"line_no": 128,
"src": "3847:10",
"src_char": "3847:10"
},
{
"contract_path": "src/Trump.sol",
"line_no": 129,
"src": "3887:11",
"src_char": "3887:11"
},
{
"contract_path": "src/TxOriginUsedForAuth.sol",
"line_no": 5,
"src": "107:5",
"src_char": "107:5"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 9,
"src": "291:8",
"src_char": "291:8"
},
{
"contract_path": "src/UninitializedStateVariable.sol",
"line_no": 37,
"src": "1079:5",
"src_char": "1079:5"
},
{
"contract_path": "src/UnprotectedInitialize.sol",
"line_no": 9,
"src": "244:5",
"src_char": "244:5"
},
{
"contract_path": "src/auditor_mode/ExternalCalls.sol",
"line_no": 9,
"src": "205:6",
"src_char": "205:6"
},
{
"contract_path": "src/auditor_mode/ExternalCalls.sol",
"line_no": 10,
"src": "251:14",
"src_char": "251:14"
},
{
"contract_path": "src/eth2/DepositContract.sol",
"line_no": 66,
"src": "4907:11",
"src_char": "3419:11"
},
{
"contract_path": "src/reused_contract_name/ContractA.sol",
"line_no": 5,
"src": "99:1",
"src_char": "99:1"
},
{
"contract_path": "src/reused_contract_name/ContractB.sol",
"line_no": 5,
"src": "102:1",
"src_char": "102:1"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 8,
"src": "312:8",
"src_char": "312:8"
}
]
},
{
"title": "Multiple Placeholders in Modifier",
"description": "Design the modifier to only contain 1 placeholder statement. If that is not possible, split the logic into multiple modifiers.",
"detector_name": "multiple-placeholders",
"instances": [
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 12,
"src": "197:10",
"src_char": "197:10"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 19,
"src": "329:5",
"src_char": "329:5"
},
{
"contract_path": "src/MultiplePlaceholders.sol",
"line_no": 40,
"src": "700:5",
"src_char": "700:5"
}
]
},
{
"title": "Incorrect Use Of Modifier",
"description": "If a modifier does not execute `_` or revert, the execution of the function will return the default value, which can be misleading for the caller. It is recommended that all the paths in a modifier must execute _ or revert.",
"detector_name": "incorrect-use-of-modifier",
"instances": [
{
"contract_path": "src/IncorrectModifier.sol",
"line_no": 22,
"src": "645:16",
"src_char": "645:16"
},
{
"contract_path": "src/IncorrectModifier.sol",
"line_no": 30,
"src": "763:18",
"src_char": "763:18"
}
]
},
{
"title": "Unchecked Return",
"description": "Function returns a value but it is ignored. Consider checking the return value.",
"detector_name": "unchecked-return",
"instances": [
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 19,
"src": "601:38",
"src_char": "601:38"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 34,
"src": "1046:44",
"src_char": "1046:44"
},
{
"contract_path": "src/ArbitraryTransferFrom.sol",
"line_no": 54,
"src": "1699:44",
"src_char": "1699:44"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 32,
"src": "1062:29",
"src_char": "1062:29"
},
{
"contract_path": "src/DeprecatedOZFunctions.sol",
"line_no": 47,
"src": "1598:35",
"src_char": "1598:35"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 17,
"src": "662:27",
"src_char": "662:27"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 20,
"src": "770:28",
"src_char": "770:28"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 23,
"src": "875:21",
"src_char": "875:21"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 31,
"src": "1105:30",
"src_char": "1105:30"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 40,
"src": "1350:30",
"src_char": "1350:30"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 50,
"src": "1586:30",
"src_char": "1586:30"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 59,
"src": "1865:30",
"src_char": "1865:30"
},
{
"contract_path": "src/EnumerableSetIteration.sol",
"line_no": 67,
"src": "2083:24",
"src_char": "2083:24"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 65,
"src": "1705:390",
"src_char": "1705:390"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 77,
"src": "2129:379",
"src_char": "2129:379"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 92,
"src": "2624:390",
"src_char": "2624:390"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 107,
"src": "3107:379",
"src_char": "3107:379"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 129,
"src": "3777:208",
"src_char": "3777:208"
},
{
"contract_path": "src/OutOfOrderRetryable.sol",
"line_no": 151,
"src": "4337:261",
"src_char": "4337:261"
},
{
"contract_path": "src/StateVariablesManipulation.sol",
"line_no": 142,
"src": "4146:20",
"src_char": "4146:20"
},
{
"contract_path": "src/Trump.sol",
"line_no": 344,
"src": "11990:71",
"src_char": "11990:71"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 14,
"src": "279:5",
"src_char": "279:5"
},
{
"contract_path": "src/UncheckedReturn.sol",
"line_no": 27,
"src": "575:47",
"src_char": "575:47"
},
{
"contract_path": "src/router/ExternalCalls.sol",
"line_no": 27,
"src": "594:7",
"src_char": "594:7"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 23,
"src": "670:83",
"src_char": "670:83"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 24,
"src": "763:83",
"src_char": "763:83"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 25,
"src": "856:70",
"src_char": "856:70"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 26,
"src": "936:80",
"src_char": "936:80"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 27,
"src": "1026:80",
"src_char": "1026:80"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 46,
"src": "1933:76",
"src_char": "1933:76"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 47,
"src": "2019:76",
"src_char": "2019:76"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 48,
"src": "2105:63",
"src_char": "2105:63"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 49,
"src": "2178:73",
"src_char": "2178:73"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 50,
"src": "2261:73",
"src_char": "2261:73"
},
{
"contract_path": "src/uniswap/UniswapV2Swapper.sol",
"line_no": 51,
"src": "2344:60",
"src_char": "2344:60"
}
]
}
]
},
"detectors_used": [
"delegatecall-in-loop",
"centralization-risk",
"solmate-safe-transfer-lib",
"abi-encode-packed-hash-collision",
"ecrecover",
"deprecated-oz-function",
"unsafe-erc20-operation",
"unspecific-solidity-pragma",
"state-no-address-check",
"unused-public-function",
"literal-instead-of-constant",
"empty-require-revert",
"non-reentrant-not-first",
"block-timestamp-deadline",
"unsafe-oz-erc721-mint",
"push-zero-opcode",
"arbitrary-transfer-from",
"modifier-used-only-once",
"empty-block",
"large-numeric-literal",
"internal-function-used-once",
"todo",
"inconsistent-type-names",
"unprotected-initializer",
"unused-error",
"require-revert-in-loop",
"division-before-multiplication",
"unsafe-casting",
"enumerable-loop-removal",
"experimental-encoder",
"incorrect-shift-order",
"storage-array-memory-edit",
"multiple-constructors",
"reused-contract-name",
"nested-struct-in-mapping",
"selfdestruct",
"dynamic-array-length-assignment",
"incorrect-caret-operator",
"yul-return",
"state-variable-shadowing",
"unchecked-send",
"misused-boolean",
"eth-send-unchecked-address",
"delegate-call-unchecked-address",
"tautological-compare",
"rtlo",
"dangerous-unary-operator",
"tautology-or-contradiction",
"strict-equality-contract-balance",
"signed-integer-storage-array",
"redundant-statement",
"state-variable-read-external",
"weak-randomness",
"pre-declared-local-variable-usage",
"delete-nested-mapping",
"unused-state-variable",
"constant-function-contains-assembly",
"boolean-equality",
"tx-origin-used-for-auth",
"msg-value-in-loop",
"contract-locks-ether",
"local-variable-shadowing",
"incorrect-erc721-interface",
"incorrect-erc20-interface",
"uninitialized-local-variable",
"return-bomb",
"out-of-order-retryable",
"function-initializing-state",
"dead-code",
"storage-array-length-not-cached",
"assert-state-change",
"costly-loop",
"constant-function-changes-state",
"builtin-symbol-shadowing",
"void-constructor",
"function-selector-collision",
"missing-inheritance",
"unused-import",
"unchecked-low-level-call",
"function-pointer-in-constructor",
"state-variable-could-be-constant",
"state-change-without-event",
"state-variable-could-be-immutable",
"multiple-placeholders",
"reentrancy-state-change",
"incorrect-use-of-modifier",
"unchecked-return"
]
}
```