I'm trying to use Slither to analyze a SimpleStorage.sol contract with OZ library (see code below), but unable to do so.
I'm new to this web3 space and I've looking for a steps instruction on how to use slither to work with the most simple contract that has OZ library in a truffle environment.
Here are the steps to reproduce the problem:
mkdir SimpleStorage
cd SimpleStorage
truffle init
truffle create contract SimpleStorage
npm install @openzeppelin/contracts
slither . (then getting the error message listed below)
slither . --solc-remaps @openzeppelin/=node_modules/@openzeppelin/ (also getting the same error message listed below)
Here is the error message:
C:\Users\kdluu\CODE\token-exchange>slither . --solc-remaps @openzeppelin/=node_modules/@openzeppelin/
'truffle.cmd compile --all' running (use --truffle-version truffle@x.x.x to use specific version)
Compiling your contracts...
===========================
> Compiling @openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol
> Compiling @openzeppelin\contracts\token\ERC1155\utils\ERC1155Holder.sol
> Compiling @openzeppelin\contracts\token\ERC1155\utils\ERC1155Receiver.sol
> Compiling @openzeppelin\contracts\utils\introspection\ERC165.sol
> Compiling @openzeppelin\contracts\utils\introspection\IERC165.sol
> Compiling .\contracts\Migrations.sol
> Compiling .\contracts\SimpleStorage.sol
> Artifacts written to C:\Users\kdluu\CODE\token-exchange\build\contracts
> Compiled successfully using:
- solc: 0.8.10+commit.fc410830.Emscripten.clang
Traceback (most recent call last):
File "c:\python39\lib\site-packages\slither\__main__.py", line 743, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "c:\python39\lib\site-packages\slither\__main__.py", line 84, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "c:\python39\lib\site-packages\slither\__main__.py", line 67, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "c:\python39\lib\site-packages\slither\slither.py", line 97, in __init__
parser.parse_top_level_from_loaded_json(ast, path)
File "c:\python39\lib\site-packages\slither\solc_parsing\slither_compilation_unit_solc.py", line 224, in parse_top_level_from_loaded_json
get_imported_scope = self.compilation_unit.get_scope(import_directive.filename)
File "c:\python39\lib\site-packages\slither\core\compilation_unit.py", line 231, in get_scope
filename = self._crytic_compile_compilation_unit.crytic_compile.filename_lookup(
File "c:\python39\lib\site-packages\crytic_compile\crytic_compile.py", line 199, in filename_lookup
raise ValueError(
ValueError: @openzeppelin\contracts\token\ERC1155\utils\ERC1155Receiver.sol does not exist in ['C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\IERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\IERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\IERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Holder.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Holder.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Holder.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\ERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\ERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\ERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\SimpleStorage.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\SimpleStorage.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\SimpleStorage.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\Migrations.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\Migrations.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\Migrations.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\IERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\IERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\IERC165.sol']
None
Error in .
Traceback (most recent call last):
File "c:\python39\lib\site-packages\slither\__main__.py", line 743, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "c:\python39\lib\site-packages\slither\__main__.py", line 84, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "c:\python39\lib\site-packages\slither\__main__.py", line 67, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "c:\python39\lib\site-packages\slither\slither.py", line 97, in __init__
parser.parse_top_level_from_loaded_json(ast, path)
File "c:\python39\lib\site-packages\slither\solc_parsing\slither_compilation_unit_solc.py", line 224, in parse_top_level_from_loaded_json
get_imported_scope = self.compilation_unit.get_scope(import_directive.filename)
File "c:\python39\lib\site-packages\slither\core\compilation_unit.py", line 231, in get_scope
filename = self._crytic_compile_compilation_unit.crytic_compile.filename_lookup(
File "c:\python39\lib\site-packages\crytic_compile\crytic_compile.py", line 199, in filename_lookup
raise ValueError(
ValueError: @openzeppelin\contracts\token\ERC1155\utils\ERC1155Receiver.sol does not exist in ['C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\IERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\IERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\IERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Holder.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Holder.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Holder.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\ERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\ERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\ERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\token\\ERC1155\\utils\\ERC1155Receiver.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\SimpleStorage.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\SimpleStorage.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\SimpleStorage.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\Migrations.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\Migrations.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\contracts\\Migrations.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\IERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\IERC165.sol', 'C:\\Users\\kdluu\\CODE\\token-exchange\\node_modules\\@openzeppelin\\contracts\\utils\\introspection\\IERC165.sol']
Code to reproduce
-- // SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
import '@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol';
contract SimpleStorage is ERC1155Holder {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
Environment
<!--Environment:
Windows 10
Truffle v5.4.24 (core: 5.4.24)
Solidity - 0.8.10 (solc-js)
Node v14.16.0
Web3.js v1.5.3
Python 3.9.2
Slither 0.8.2. -->