This is page 90 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/ccip-functions-report.md:
--------------------------------------------------------------------------------
```markdown
# Aderyn Analysis Report
This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a static analysis tool built by [Cyfrin](https://cyfrin.io), a blockchain security company. This report is not a substitute for manual audit or security review. It should not be relied upon for any purpose other than to assist in the identification of potential security vulnerabilities.
# Table of Contents
- [Summary](#summary)
- [Files Summary](#files-summary)
- [Files Details](#files-details)
- [Issue Summary](#issue-summary)
- [High Issues](#high-issues)
- [H-1: Contract Name Reused in Different Files](#h-1-contract-name-reused-in-different-files)
- [H-2: ETH transferred without address checks](#h-2-eth-transferred-without-address-checks)
- [H-3: Reentrancy: State change after external call](#h-3-reentrancy-state-change-after-external-call)
- [Low Issues](#low-issues)
- [L-1: Centralization Risk](#l-1-centralization-risk)
- [L-2: `ecrecover` Signature Malleability](#l-2-ecrecover-signature-malleability)
- [L-3: Unspecific Solidity Pragma](#l-3-unspecific-solidity-pragma)
- [L-4: Address State Variable Set Without Checks](#l-4-address-state-variable-set-without-checks)
- [L-5: Literal Instead of Constant](#l-5-literal-instead-of-constant)
- [L-6: PUSH0 Opcode](#l-6-push0-opcode)
- [L-7: Modifier Invoked Only Once](#l-7-modifier-invoked-only-once)
- [L-8: Large Numeric Literal](#l-8-large-numeric-literal)
- [L-9: Internal Function Used Only Once](#l-9-internal-function-used-only-once)
- [L-10: Contract has TODO Comments](#l-10-contract-has-todo-comments)
- [L-11: Unused Error](#l-11-unused-error)
- [L-12: Loop Contains `require`/`revert`](#l-12-loop-contains-requirerevert)
- [L-13: Dead Code](#l-13-dead-code)
- [L-14: Costly operations inside loop](#l-14-costly-operations-inside-loop)
- [L-15: Unused Import](#l-15-unused-import)
- [L-16: State Change Without Event](#l-16-state-change-without-event)
- [L-17: Unchecked Return](#l-17-unchecked-return)
# Summary
## Files Summary
| Key | Value |
| --- | --- |
| .sol Files | 52 |
| Total nSLOC | 5576 |
## Files Details
| Filepath | nSLOC |
| --- | --- |
| src/v0.8/functions/dev/v1_X/FunctionsBilling.sol | 280 |
| src/v0.8/functions/dev/v1_X/FunctionsClient.sol | 38 |
| src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol | 173 |
| src/v0.8/functions/dev/v1_X/FunctionsRouter.sol | 405 |
| src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol | 344 |
| src/v0.8/functions/dev/v1_X/Routable.sol | 30 |
| src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol | 126 |
| src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol | 23 |
| src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol | 47 |
| src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol | 31 |
| src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol | 4 |
| src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol | 11 |
| src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol | 37 |
| src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol | 39 |
| src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol | 4 |
| src/v0.8/functions/dev/v1_X/libraries/ChainSpecificUtil.sol | 44 |
| src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol | 99 |
| src/v0.8/functions/dev/v1_X/libraries/FunctionsResponse.sol | 38 |
| src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol | 42 |
| src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol | 238 |
| src/v0.8/functions/v1_0_0/FunctionsBilling.sol | 223 |
| src/v0.8/functions/v1_0_0/FunctionsClient.sol | 38 |
| src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol | 134 |
| src/v0.8/functions/v1_0_0/FunctionsRouter.sol | 405 |
| src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol | 344 |
| src/v0.8/functions/v1_0_0/Routable.sol | 30 |
| src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol | 79 |
| src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol | 9 |
| src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol | 47 |
| src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol | 15 |
| src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol | 4 |
| src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol | 11 |
| src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol | 37 |
| src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol | 39 |
| src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol | 4 |
| src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol | 99 |
| src/v0.8/functions/v1_0_0/libraries/FunctionsResponse.sol | 38 |
| src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol | 72 |
| src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol | 244 |
| src/v0.8/functions/v1_1_0/FunctionsBilling.sol | 240 |
| src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol | 140 |
| src/v0.8/functions/v1_1_0/libraries/ChainSpecificUtil.sol | 44 |
| src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol | 42 |
| src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol | 233 |
| src/v0.8/functions/v1_3_0/FunctionsBilling.sol | 277 |
| src/v0.8/functions/v1_3_0/FunctionsClient.sol | 38 |
| src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol | 173 |
| src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol | 130 |
| src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol | 23 |
| src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol | 31 |
| src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol | 42 |
| src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol | 238 |
| **Total** | **5576** |
## Issue Summary
| Category | No. of Issues |
| --- | --- |
| High | 3 |
| Low | 17 |
# High Issues
## H-1: Contract Name Reused in Different Files
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.
<details><summary>52 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 17](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L17)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsClient.sol [Line: 11](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsClient.sol#L11)
```solidity
abstract contract FunctionsClient is IFunctionsClient {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 13](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L13)
```solidity
contract FunctionsCoordinator is OCR2Base, IFunctionsCoordinator, FunctionsBilling {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 16](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L16)
```solidity
contract FunctionsRouter is IFunctionsRouter, FunctionsSubscriptions, Pausable, ITypeAndVersion, ConfirmedOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 15](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L15)
```solidity
abstract contract FunctionsSubscriptions is IFunctionsSubscriptions, IERC677Receiver {
```
- Found in src/v0.8/functions/dev/v1_X/Routable.sol [Line: 10](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/Routable.sol#L10)
```solidity
abstract contract Routable is ITypeAndVersion {
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 14](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L14)
```solidity
contract TermsOfServiceAllowList is ITermsOfServiceAllowList, IAccessController, ITypeAndVersion, ConfirmedOwner {
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol#L5)
```solidity
interface ITermsOfServiceAllowList {
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 9](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L9)
```solidity
contract FunctionsClientExample is FunctionsClient, ConfirmedOwner {
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol#L5)
```solidity
interface IFunctionsBilling {
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol#L5)
```solidity
interface IFunctionsClient {
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol#L7)
```solidity
interface IFunctionsCoordinator {
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol#L7)
```solidity
interface IFunctionsRouter {
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol#L7)
```solidity
interface IFunctionsSubscriptions {
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol [Line: 8](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol#L8)
```solidity
interface IOwnableFunctionsRouter is IOwnable, IFunctionsRouter {}
```
- Found in src/v0.8/functions/dev/v1_X/libraries/ChainSpecificUtil.sol [Line: 9](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/ChainSpecificUtil.sol#L9)
```solidity
library ChainSpecificUtil {
```
- Found in src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol#L7)
```solidity
library FunctionsRequest {
```
- Found in src/v0.8/functions/dev/v1_X/libraries/FunctionsResponse.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/FunctionsResponse.sol#L5)
```solidity
library FunctionsResponse {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol [Line: 6](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol#L6)
```solidity
abstract contract OCR2Abstract is ITypeAndVersion {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 15](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L15)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsClient.sol [Line: 11](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol#L11)
```solidity
abstract contract FunctionsClient is IFunctionsClient {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 13](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L13)
```solidity
contract FunctionsCoordinator is OCR2Base, IFunctionsCoordinator, FunctionsBilling {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 16](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L16)
```solidity
contract FunctionsRouter is IFunctionsRouter, FunctionsSubscriptions, Pausable, ITypeAndVersion, ConfirmedOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 15](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L15)
```solidity
abstract contract FunctionsSubscriptions is IFunctionsSubscriptions, IERC677Receiver {
```
- Found in src/v0.8/functions/v1_0_0/Routable.sol [Line: 10](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/Routable.sol#L10)
```solidity
abstract contract Routable is ITypeAndVersion {
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 14](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L14)
```solidity
contract TermsOfServiceAllowList is ITermsOfServiceAllowList, IAccessController, ITypeAndVersion, ConfirmedOwner {
```
- Found in src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol#L5)
```solidity
interface ITermsOfServiceAllowList {
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 9](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L9)
```solidity
contract FunctionsClientExample is FunctionsClient, ConfirmedOwner {
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol#L5)
```solidity
interface IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol#L5)
```solidity
interface IFunctionsClient {
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol#L7)
```solidity
interface IFunctionsCoordinator {
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol#L7)
```solidity
interface IFunctionsRouter {
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol#L7)
```solidity
interface IFunctionsSubscriptions {
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol [Line: 8](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol#L8)
```solidity
interface IOwnableFunctionsRouter is IOwnable, IFunctionsRouter {}
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol [Line: 7](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol#L7)
```solidity
library FunctionsRequest {
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsResponse.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsResponse.sol#L5)
```solidity
library FunctionsResponse {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol [Line: 6](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol#L6)
```solidity
abstract contract OCR2Abstract is ITypeAndVersion {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 17](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L17)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 13](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L13)
```solidity
contract FunctionsCoordinator is OCR2Base, IFunctionsCoordinator, FunctionsBilling {
```
- Found in src/v0.8/functions/v1_1_0/libraries/ChainSpecificUtil.sol [Line: 9](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/libraries/ChainSpecificUtil.sol#L9)
```solidity
library ChainSpecificUtil {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol [Line: 6](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol#L6)
```solidity
abstract contract OCR2Abstract is ITypeAndVersion {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 17](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L17)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsClient.sol [Line: 11](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsClient.sol#L11)
```solidity
abstract contract FunctionsClient is IFunctionsClient {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 13](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L13)
```solidity
contract FunctionsCoordinator is OCR2Base, IFunctionsCoordinator, FunctionsBilling {
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 14](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L14)
```solidity
contract TermsOfServiceAllowList is ITermsOfServiceAllowList, IAccessController, ITypeAndVersion, ConfirmedOwner {
```
- Found in src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol#L5)
```solidity
interface ITermsOfServiceAllowList {
```
- Found in src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol#L5)
```solidity
interface IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol [Line: 6](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol#L6)
```solidity
abstract contract OCR2Abstract is ITypeAndVersion {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
</details>
## H-2: ETH transferred without address checks
Consider introducing checks for `msg.sender` to ensure the recipient of the money is as intended.
<details><summary>2 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 173](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L173)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external override {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 173](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L173)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external override {
```
</details>
## H-3: Reentrancy: State change after external call
Changing state after an external call can lead to re-entrancy attacks.Use the checks-effects-interactions pattern to avoid this issue.
<details><summary>6 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 403](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L403)
State is changed at: `s_withdrawableTokens[transmitters[i]] = 0`
```solidity
IFunctionsSubscriptions(address(_getRouter())).oracleWithdraw(transmitters[i], balance);
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 519](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L519)
State is changed at: `s_subscriptions[subscriptionId].blockedBalance -= request.estimatedTotalCostJuels`, `s_consumers[request.client][subscriptionId].completedRequests += 1`, `delete s_requestCommitments[requestId]`
```solidity
IFunctionsBilling(request.coordinator).deleteCommitment(requestId);
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 342](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L342)
State is changed at: `s_withdrawableTokens[transmitters[i]] = 0`
```solidity
IFunctionsSubscriptions(address(_getRouter())).oracleWithdraw(transmitters[i], balance);
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 519](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L519)
State is changed at: `s_subscriptions[subscriptionId].blockedBalance -= request.estimatedTotalCostJuels`, `s_consumers[request.client][subscriptionId].completedRequests += 1`, `delete s_requestCommitments[requestId]`
```solidity
IFunctionsBilling(request.coordinator).deleteCommitment(requestId);
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 360](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L360)
State is changed at: `s_withdrawableTokens[transmitters[i]] = 0`
```solidity
IFunctionsSubscriptions(address(_getRouter())).oracleWithdraw(transmitters[i], balance);
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 401](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L401)
State is changed at: `s_withdrawableTokens[transmitters[i]] = 0`
```solidity
IFunctionsSubscriptions(address(_getRouter())).oracleWithdraw(transmitters[i], balance);
```
</details>
# Low Issues
## L-1: Centralization Risk
Contracts have owners with privileged rights to perform admin tasks and need to be trusted to not perform malicious updates or drain funds.
<details><summary>35 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 58](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L58)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 74](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L74)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 149](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L149)
```solidity
function updateConfig(Config memory config) public onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 177](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L177)
```solidity
function setAllowListId(bytes32 allowListId) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 510](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L510)
```solidity
) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 539](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L539)
```solidity
function updateContracts() external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 579](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L579)
```solidity
function pause() external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 584](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L584)
```solidity
function unpause() external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L73)
```solidity
function updateConfig(TermsOfServiceAllowListConfig memory config) public onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 163](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L163)
```solidity
function blockSender(address sender) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 170](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L170)
```solidity
function unblockSender(address sender) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 35](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L35)
```solidity
) external onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 123](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L123)
```solidity
) external override checkConfigValid(_signers.length, _transmitters.length, _f) onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L57)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L73)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 148](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L148)
```solidity
function updateConfig(Config memory config) public onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 176](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L176)
```solidity
function setAllowListId(bytes32 allowListId) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 508](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L508)
```solidity
) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 537](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L537)
```solidity
function updateContracts() external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 577](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L577)
```solidity
function pause() external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 582](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L582)
```solidity
function unpause() external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 64](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L64)
```solidity
function updateConfig(Config memory config) public onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 131](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L131)
```solidity
function blockSender(address sender) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 138](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L138)
```solidity
function unblockSender(address sender) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 35](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L35)
```solidity
) external onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 121](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L121)
```solidity
) external override checkConfigValid(_signers.length, _transmitters.length, _f) onlyOwner {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L57)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L73)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 115](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L115)
```solidity
) external override checkConfigValid(_signers.length, _transmitters.length, _f) onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 59](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L59)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 75](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L75)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 74](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L74)
```solidity
function updateConfig(TermsOfServiceAllowListConfig memory config) public onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 168](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L168)
```solidity
function blockSender(address sender) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 175](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L175)
```solidity
function unblockSender(address sender) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 123](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L123)
```solidity
) external override checkConfigValid(_signers.length, _transmitters.length, _f) onlyOwner {
```
</details>
## L-2: `ecrecover` Signature Malleability
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.
<details><summary>7 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 97](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L97)
```solidity
if (ecrecover(prefixedMessage, v, r, s) != s_config.signerPublicKey) {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 346](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L346)
```solidity
address signer = ecrecover(h, uint8(rawVs[i]) + 27, rs[i], ss[i]);
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 88](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L88)
```solidity
if (ecrecover(prefixedMessage, v, r, s) != s_config.signerPublicKey) {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 350](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L350)
```solidity
address signer = ecrecover(h, uint8(rawVs[i]) + 27, rs[i], ss[i]);
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 340](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L340)
```solidity
address signer = ecrecover(h, uint8(rawVs[i]) + 27, rs[i], ss[i]);
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 98](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L98)
```solidity
if (ecrecover(prefixedMessage, v, r, s) != s_config.signerPublicKey) {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 346](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L346)
```solidity
address signer = ecrecover(h, uint8(rawVs[i]) + 27, rs[i], ss[i]);
```
</details>
## L-3: Unspecific Solidity Pragma
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;`
<details><summary>46 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/Routable.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/Routable.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/Routable.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/Routable.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/FunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
</details>
## L-4: Address State Variable Set Without Checks
Check for `address(0)` when assigning values to address state variables.
<details><summary>6 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 78](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L78)
```solidity
s_linkToNativeFeed = AggregatorV3Interface(linkToNativeFeed);
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 79](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L79)
```solidity
s_linkToUsdFeed = AggregatorV3Interface(linkToUsdFeed);
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L73)
```solidity
s_linkToNativeFeed = AggregatorV3Interface(linkToNativeFeed);
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 85](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L85)
```solidity
s_linkToNativeFeed = AggregatorV3Interface(linkToNativeFeed);
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 78](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L78)
```solidity
s_linkToNativeFeed = AggregatorV3Interface(linkToNativeFeed);
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 79](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L79)
```solidity
s_linkToUsdFeed = AggregatorV3Interface(linkToUsdFeed);
```
</details>
## L-5: Literal Instead of Constant
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.
<details><summary>44 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 110](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L110)
```solidity
return SafeCast.toUint72(_getJuelsFromUsd(s_config.donFeeCentsUsd) / 100);
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 116](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L116)
```solidity
return SafeCast.toUint72(_getJuelsFromUsd(s_config.operationFeeCentsUsd) / 100);
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 60](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L60)
```solidity
uint256 maxLen = 32;
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 61](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L61)
```solidity
if (b.length < 32) {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 83](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L83)
```solidity
if (numSigners <= 3 * f) revert InvalidConfig("faulty-oracle f too high");
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 216](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L216)
```solidity
uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 217](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L217)
```solidity
uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 278](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L278)
```solidity
32 + // 32 bytes per entry in _rs
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 280](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L280)
```solidity
32 + // 32 bytes per entry in _ss
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 299](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L299)
```solidity
bytes32[3] calldata reportContext,
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 60](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L60)
```solidity
uint256 maxLen = 32;
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 61](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L61)
```solidity
if (b.length < 32) {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol [Line: 90](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol#L90)
```solidity
uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol [Line: 91](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol#L91)
```solidity
uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 81](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L81)
```solidity
if (numSigners <= 3 * f) revert InvalidConfig("faulty-oracle f too high");
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 212](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L212)
```solidity
uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 213](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L213)
```solidity
uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 283](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L283)
```solidity
32 + // 32 bytes per entry in _rs
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 285](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L285)
```solidity
32 + // 32 bytes per entry in _ss
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 300](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L300)
```solidity
bytes32[3] calldata reportContext,
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 75](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L75)
```solidity
if (numSigners <= 3 * f) revert InvalidConfig("faulty-oracle f too high");
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 208](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L208)
```solidity
uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 209](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L209)
```solidity
uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 279](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L279)
```solidity
32 + // 32 bytes per entry in _rs
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 281](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L281)
```solidity
32 + // 32 bytes per entry in _ss
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 296](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L296)
```solidity
bytes32[3] calldata reportContext,
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 110](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L110)
```solidity
return SafeCast.toUint72(_getJuelsFromUsd(s_config.donFeeCentsUsd) / 100);
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 116](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L116)
```solidity
return SafeCast.toUint72(_getJuelsFromUsd(s_config.operationFeeCentsUsd) / 100);
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 83](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L83)
```solidity
if (numSigners <= 3 * f) revert InvalidConfig("faulty-oracle f too high");
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 216](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L216)
```solidity
uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 217](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L217)
```solidity
uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 278](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L278)
```solidity
32 + // 32 bytes per entry in _rs
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 280](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L280)
```solidity
32 + // 32 bytes per entry in _ss
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 299](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L299)
```solidity
bytes32[3] calldata reportContext,
```
</details>
## L-6: PUSH0 Opcode
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.
<details><summary>52 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/Routable.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/Routable.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IFunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/interfaces/IOwnableFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/libraries/ChainSpecificUtil.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/ChainSpecificUtil.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/libraries/FunctionsResponse.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/FunctionsResponse.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/Routable.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/Routable.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/interfaces/ITermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IFunctionsSubscriptions.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/interfaces/IOwnableFunctionsRouter.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsResponse.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsResponse.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/libraries/ChainSpecificUtil.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/libraries/ChainSpecificUtil.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/FunctionsClient.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsClient.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/interfaces/ITermsOfServiceAllowList.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/interfaces/IFunctionsBilling.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Abstract.sol#L2)
```solidity
pragma solidity ^0.8.19;
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 2](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L2)
```solidity
pragma solidity ^0.8.0;
```
</details>
## L-7: Modifier Invoked Only Once
Consider removing the modifier or inlining the logic into the calling function.
<details><summary>4 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 75](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L75)
```solidity
modifier checkConfigValid(
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L73)
```solidity
modifier checkConfigValid(
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 67](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L67)
```solidity
modifier checkConfigValid(
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 75](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L75)
```solidity
modifier checkConfigValid(
```
</details>
## L-8: Large Numeric Literal
Large literal values multiples of 10000 can be replaced with scientific notation.Use `e` notation, for example: `1e18`, instead of its full numeric value.
<details><summary>10 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 22](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L22)
```solidity
uint256 private constant REASONABLE_GAS_PRICE_CEILING = 1_000_000_000_000_000; // 1 million gwei
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 203](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L203)
```solidity
((gasPriceWei * s_config.fulfillmentGasPriceOverEstimationBP) / 10_000);
```
- Found in src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/example/FunctionsClientExample.sol#L12)
```solidity
uint32 public constant MAX_CALLBACK_GAS = 70_000;
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 20](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L20)
```solidity
uint256 private constant REASONABLE_GAS_PRICE_CEILING = 1_000_000_000_000_000; // 1 million gwei
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 164](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L164)
```solidity
((gasPriceWei * s_config.fulfillmentGasPriceOverEstimationBP) / 10_000);
```
- Found in src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/example/FunctionsClientExample.sol#L12)
```solidity
uint32 public constant MAX_CALLBACK_GAS = 70_000;
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 22](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L22)
```solidity
uint256 private constant REASONABLE_GAS_PRICE_CEILING = 1_000_000_000_000_000; // 1 million gwei
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 179](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L179)
```solidity
((gasPriceWei * s_config.fulfillmentGasPriceOverEstimationBP) / 10_000);
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 22](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L22)
```solidity
uint256 private constant REASONABLE_GAS_PRICE_CEILING = 1_000_000_000_000_000; // 1 million gwei
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 201](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L201)
```solidity
((gasPriceWei * s_config.fulfillmentGasPriceOverEstimationBP) / 10_000);
```
</details>
## L-9: Internal Function Used Only Once
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.
<details><summary>3 Found Instances</summary>
- Found in src/v0.8/functions/v1_0_0/FunctionsClient.sol [Line: 52](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsClient.sol#L52)
```solidity
function fulfillRequest(bytes32 requestId, bytes memory response, bytes memory err) internal virtual;
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol [Line: 91](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol#L91)
```solidity
function initializeRequest(
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 186](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L186)
```solidity
function configDigestFromConfigData(
```
</details>
## L-10: Contract has TODO Comments
Contract contains comments with TODOS. Consider implementing or removing them.
<details><summary>7 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 17](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L17)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 15](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L15)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 17](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L17)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 17](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L17)
```solidity
abstract contract FunctionsBilling is Routable, IFunctionsBilling {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 12](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L12)
```solidity
abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract {
```
</details>
## L-11: Unused Error
Consider using or removing the unused error.
<details><summary>26 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 48](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L48)
```solidity
error InvalidSubscription();
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 49](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L49)
```solidity
error UnauthorizedSender();
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 50](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L50)
```solidity
error MustBeSubOwner(address owner);
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 53](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L53)
```solidity
error PaymentTooLarge();
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 35](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L35)
```solidity
error InconsistentReportData();
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 37](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L37)
```solidity
error UnauthorizedPublicKeyChange();
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 123](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L123)
```solidity
error IdentifierIsReserved(bytes32 id);
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 50](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L50)
```solidity
error InvalidSubscription();
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 51](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L51)
```solidity
error UnauthorizedSender();
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 52](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L52)
```solidity
error MustBeSubOwner(address owner);
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 54](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L54)
```solidity
error PaymentTooLarge();
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 35](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L35)
```solidity
error InconsistentReportData();
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 37](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L37)
```solidity
error UnauthorizedPublicKeyChange();
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 122](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L122)
```solidity
error IdentifierIsReserved(bytes32 id);
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 62](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L62)
```solidity
error InvalidSubscription();
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 63](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L63)
```solidity
error UnauthorizedSender();
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 64](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L64)
```solidity
error MustBeSubOwner(address owner);
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 66](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L66)
```solidity
error PaymentTooLarge();
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 35](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L35)
```solidity
error InconsistentReportData();
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 37](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L37)
```solidity
error UnauthorizedPublicKeyChange();
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 48](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L48)
```solidity
error InvalidSubscription();
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 49](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L49)
```solidity
error UnauthorizedSender();
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 50](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L50)
```solidity
error MustBeSubOwner(address owner);
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 53](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L53)
```solidity
error PaymentTooLarge();
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 36](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L36)
```solidity
error InconsistentReportData();
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 38](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L38)
```solidity
error UnauthorizedPublicKeyChange();
```
</details>
## L-12: Loop Contains `require`/`revert`
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
<details><summary>20 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 194](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L194)
```solidity
for (uint256 i = 0; i < numberOfFulfillments; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 518](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L518)
```solidity
for (uint256 i = 0; i < idsArrayLength; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 503](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L503)
```solidity
for (uint256 i = 0; i < requestsToTimeoutByCommitment.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol#L57)
```solidity
for (uint256 i = 0; i < self.args.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol [Line: 76](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/libraries/FunctionsRequest.sol#L76)
```solidity
for (uint256 i = 0; i < self.bytesArgs.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 147](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L147)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 345](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L345)
```solidity
for (uint256 i = 0; i < rs.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 155](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L155)
```solidity
for (uint256 i = 0; i < requestIds.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 516](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L516)
```solidity
for (uint256 i = 0; i < idsArrayLength; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 503](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L503)
```solidity
for (uint256 i = 0; i < requestsToTimeoutByCommitment.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol#L57)
```solidity
for (uint256 i = 0; i < self.args.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol [Line: 76](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest.sol#L76)
```solidity
for (uint256 i = 0; i < self.bytesArgs.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 145](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L145)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 349](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L349)
```solidity
for (uint256 i = 0; i < rs.length; ++i) {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 155](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L155)
```solidity
for (uint256 i = 0; i < numberOfFulfillments; ++i) {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 139](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L139)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 339](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L339)
```solidity
for (uint256 i = 0; i < rs.length; ++i) {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 195](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L195)
```solidity
for (uint256 i = 0; i < numberOfFulfillments; ++i) {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 147](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L147)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 345](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L345)
```solidity
for (uint256 i = 0; i < rs.length; ++i) {
```
</details>
## L-13: Dead Code
Functions that are not used. Consider removing them.
<details><summary>4 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 82](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L82)
```solidity
function _isTransmitter(address node) internal view returns (bool) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 81](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L81)
```solidity
function _isTransmitter(address node) internal view returns (bool) {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 81](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L81)
```solidity
function _isTransmitter(address node) internal view returns (bool) {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 83](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L83)
```solidity
function _isTransmitter(address node) internal view returns (bool) {
```
</details>
## L-14: Costly operations inside loop
Invoking `SSTORE` operations in loops may waste gas. Use a local variable to hold the loop computation result.
<details><summary>28 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 399](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L399)
```solidity
for (uint256 i = 0; i < transmitters.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 430](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L430)
```solidity
for (uint256 i = 0; i < numberOfTransmitters; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 194](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L194)
```solidity
for (uint256 i = 0; i < numberOfFulfillments; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 541](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L541)
```solidity
for (uint256 i = 0; i < s_proposedContractSet.ids.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 383](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L383)
```solidity
for (uint256 i = 0; i < consumers.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 432](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L432)
```solidity
for (uint256 i = 0; i < subscription.consumers.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 503](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L503)
```solidity
for (uint256 i = 0; i < requestsToTimeoutByCommitment.length; ++i) {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 135](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L135)
```solidity
while (s_signers.length != 0) {
```
- Found in src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol [Line: 147](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/ocr/OCR2Base.sol#L147)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 338](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L338)
```solidity
for (uint256 i = 0; i < transmitters.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 364](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L364)
```solidity
for (uint256 i = 0; i < transmitters.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 155](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L155)
```solidity
for (uint256 i = 0; i < requestIds.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 539](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L539)
```solidity
for (uint256 i = 0; i < s_proposedContractSet.ids.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 383](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L383)
```solidity
for (uint256 i = 0; i < consumers.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 432](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L432)
```solidity
for (uint256 i = 0; i < subscription.consumers.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 503](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L503)
```solidity
for (uint256 i = 0; i < requestsToTimeoutByCommitment.length; ++i) {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 133](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L133)
```solidity
while (s_signers.length != 0) {
```
- Found in src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol [Line: 145](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/ocr/OCR2Base.sol#L145)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 356](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L356)
```solidity
for (uint256 i = 0; i < transmitters.length; ++i) {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 383](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L383)
```solidity
for (uint256 i = 0; i < numberOfTransmitters; ++i) {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 155](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L155)
```solidity
for (uint256 i = 0; i < numberOfFulfillments; ++i) {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 127](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L127)
```solidity
while (s_signers.length != 0) {
```
- Found in src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol [Line: 139](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/ocr/OCR2Base.sol#L139)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 397](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L397)
```solidity
for (uint256 i = 0; i < transmitters.length; ++i) {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 424](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L424)
```solidity
for (uint256 i = 0; i < numberOfTransmitters; ++i) {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 195](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L195)
```solidity
for (uint256 i = 0; i < numberOfFulfillments; ++i) {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 135](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L135)
```solidity
while (s_signers.length != 0) {
```
- Found in src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol [Line: 147](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/ocr/OCR2Base.sol#L147)
```solidity
for (uint256 i = 0; i < args.signers.length; i++) {
```
</details>
## L-15: Unused Import
Redundant import statement. Consider removing it.
<details><summary>4 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L5)
```solidity
import {ITypeAndVersion} from "../../../shared/interfaces/ITypeAndVersion.sol";
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L5)
```solidity
import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol";
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L5)
```solidity
import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol";
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 5](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L5)
```solidity
import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol";
```
</details>
## L-16: State Change Without Event
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.
<details><summary>24 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 378](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L378)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsBilling.sol [Line: 392](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsBilling.sol#L392)
```solidity
function oracleWithdrawAll() external {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 58](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L58)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol [Line: 74](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsCoordinator.sol#L74)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsRouter.sol [Line: 177](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsRouter.sol#L177)
```solidity
function setAllowListId(bytes32 allowListId) external override onlyOwner {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 173](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L173)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external override {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 192](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L192)
```solidity
function ownerWithdraw(address recipient, uint96 amount) external {
```
- Found in src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol [Line: 484](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/FunctionsSubscriptions.sol#L484)
```solidity
function setFlags(uint64 subscriptionId, bytes32 flags) external override {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 317](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L317)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsBilling.sol [Line: 331](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsBilling.sol#L331)
```solidity
function oracleWithdrawAll() external {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L57)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsCoordinator.sol#L73)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsRouter.sol [Line: 176](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsRouter.sol#L176)
```solidity
function setAllowListId(bytes32 allowListId) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 173](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L173)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external override {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 192](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L192)
```solidity
function ownerWithdraw(address recipient, uint96 amount) external {
```
- Found in src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol [Line: 484](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/FunctionsSubscriptions.sol#L484)
```solidity
function setFlags(uint64 subscriptionId, bytes32 flags) external override {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 335](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L335)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsBilling.sol [Line: 349](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsBilling.sol#L349)
```solidity
function oracleWithdrawAll() external {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L57)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol [Line: 73](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_1_0/FunctionsCoordinator.sol#L73)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 376](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L376)
```solidity
function oracleWithdraw(address recipient, uint96 amount) external {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsBilling.sol [Line: 390](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsBilling.sol#L390)
```solidity
function oracleWithdrawAll() external {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 59](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L59)
```solidity
function setThresholdPublicKey(bytes calldata thresholdPublicKey) external override onlyOwner {
```
- Found in src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol [Line: 75](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/FunctionsCoordinator.sol#L75)
```solidity
function setDONPublicKey(bytes calldata donPublicKey) external override onlyOwner {
```
</details>
## L-17: Unchecked Return
Function returns a value but it is ignored. Consider checking the return value.
<details><summary>12 Found Instances</summary>
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 49](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L49)
```solidity
s_allowedSenders.add(initialAllowedSenders[i]);
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 57](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L57)
```solidity
s_blockedSenders.add(initialBlockedSenders[j]);
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 164](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L164)
```solidity
s_allowedSenders.remove(sender);
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 165](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L165)
```solidity
s_blockedSenders.add(sender);
```
- Found in src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol [Line: 171](../tests/ccip-contracts/contracts/src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol#L171)
```solidity
s_blockedSenders.remove(sender);
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 101](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L101)
```solidity
s_allowedSenders.add(recipient);
```
- Found in src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol [Line: 132](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_0_0/accessControl/TermsOfServiceAllowList.sol#L132)
```solidity
s_allowedSenders.remove(sender);
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 50](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L50)
```solidity
s_allowedSenders.add(initialAllowedSenders[i]);
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 58](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L58)
```solidity
s_blockedSenders.add(initialBlockedSenders[j]);
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 169](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L169)
```solidity
s_allowedSenders.remove(sender);
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 170](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L170)
```solidity
s_blockedSenders.add(sender);
```
- Found in src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol [Line: 176](../tests/ccip-contracts/contracts/src/v0.8/functions/v1_3_0/accessControl/TermsOfServiceAllowList.sol#L176)
```solidity
s_blockedSenders.remove(sender);
```
</details>
```