slither
slither copied to clipboard
[Bug]: TypeError: unhashable type: 'list' on certain address input
Describe the issue:
When using slither on certain contracts (online), an error would occur. Please refer to the Relevant log output for detail.
Code example to reproduce the issue:
Command: slither bsc:0x00000047bb99ea4d791bb749d970de71ee0b1a34
The code is on bscscan.com: https://bscscan.com/address/0x00000047bb99ea4d791bb749d970de71ee0b1a34#code
Version:
0.9.2
Relevant log output:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 834, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 98, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 76, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 133, in __init__
self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 153, in _init_parsing_and_analyses
raise e
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 149, in _init_parsing_and_analyses
parser.analyze_contracts()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 529, in analyze_contracts
self._convert_to_slithir()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 740, in _convert_to_slithir
func.generate_slithir_and_analyze()
File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/function.py", line 1750, in generate_slithir_and_analyze
node.slithir_generation()
File "/usr/local/lib/python3.9/site-packages/slither/core/cfg/node.py", line 719, in slithir_generation
self._irs = convert_expression(expression, self)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 119, in convert_expression
result = apply_ir_heuristics(result, node)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 1858, in apply_ir_heuristics
irs = propagate_type_and_convert_call(irs, node)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 442, in propagate_type_and_convert_call
new_ins = propagate_types(ins, node)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 541, in propagate_types
if t in using_for or "*" in using_for:
TypeError: unhashable type: 'list'
Error in bsc:0x00000047bb99ea4d791bb749d970de71ee0b1a34
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 834, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 98, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 76, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 133, in __init__
self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 153, in _init_parsing_and_analyses
raise e
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 149, in _init_parsing_and_analyses
parser.analyze_contracts()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 529, in analyze_contracts
self._convert_to_slithir()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 740, in _convert_to_slithir
func.generate_slithir_and_analyze()
File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/function.py", line 1750, in generate_slithir_and_analyze
node.slithir_generation()
File "/usr/local/lib/python3.9/site-packages/slither/core/cfg/node.py", line 719, in slithir_generation
self._irs = convert_expression(expression, self)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 119, in convert_expression
result = apply_ir_heuristics(result, node)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 1858, in apply_ir_heuristics
irs = propagate_type_and_convert_call(irs, node)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 442, in propagate_type_and_convert_call
new_ins = propagate_types(ins, node)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 541, in propagate_types
if t in using_for or "*" in using_for:
TypeError: unhashable type: 'list'
On 0.9.6, I get a different error:
modifier_parser.analyze_content()
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/declarations/modifier.py", line 91, in analyze_content
yul_parser.analyze_expressions()
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 342, in analyze_expressions
node.analyze_expressions()
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 65, in analyze_expressions
expression = parse_yul(self._scope, self, self._unparsed_expression)
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 885, in parse_yul
op: Expression = parsers.get(ast["nodeType"], parse_yul_unsupported)(root, node, ast)
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 711, in parse_yul_function_call
args = [parse_yul(root, node, arg) for arg in ast["arguments"]]
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 711, in <listcomp>
args = [parse_yul(root, node, arg) for arg in ast["arguments"]]
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 885, in parse_yul
op: Expression = parsers.get(ast["nodeType"], parse_yul_unsupported)(root, node, ast)
File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 847, in parse_yul_identifier
raise SlitherException(f"unresolved reference to identifier {name}")
slither.exceptions.SlitherException: unresolved reference to identifier _status.slot
ERROR:root:Error:
ERROR:root:unresolved reference to identifier _status.slot
EDIT: I think this was fixed by https://github.com/crytic/slither/pull/2172 but the OP's issue persists
Any update on this issue? I stumbled upon the same TypeError: unhashable type: 'list' error as well.
@dibakarsutradhar Can you share the full stack trace, slither version you're using, and source code (if possible)?
@0xalpharush I got it fixed, thanks for your quick reply. Here's what worked for me -
forge clean
forge build --build-info --skip test --skip script
slither . --config-file slither.config.json
The slither.config looks like this -
{
"compile_force_framework": "foundry",
"foundry_out_directory": "out",
"ignore_compile": true,
"skip_clean": true,
"filter_paths": "lib|test|script|testnet|interfaces",
"solc_disable_warnings": true,
"json": "slither.json",
"exclude_optimization": true,
"exclude_informational": true,
"detectors_to_exclude": "solc-version,redundant-statements,similar-names,constable-states,immutable-states"
}