Configuration#
Wake can be configured using configuration options loaded from multiple sources in the following order:
- default values,
- global configuration file,
- project configuration file,
- environment variables,
- command-line arguments.
Default values#
Info
The following TOML snippet shows the default values of all configuration options.
subconfigs = []
[api_keys]
# etherscan = "" (unset - no Etherscan API key)
# "goerli.etherscan" = "" (unset - no Goerli Etherscan API key)
# ...
[compiler.solc]
allow_paths = []
# evm_version (unset - let the compiler decide)
exclude_paths = ["node_modules", "venv", ".venv", "lib", "script", "test"]
include_paths = ["node_modules"]
remappings = []
# target_version (unset - use the latest version)
# via_IR (unset - let the compiler decide)
[compiler.solc.optimizer]
# enabled (unset - let the compiler decide)
runs = 200
[compiler.solc.optimizer.details]
# peephole (unset - let the compiler decide)
# inliner (unset - let the compiler decide)
# jumpdest_remover (unset - let the compiler decide)
# order_literals (unset - let the compiler decide)
# deduplicate (unset - let the compiler decide)
# cse (unset - let the compiler decide)
# constant_optimizer (unset - let the compiler decide)
# simple_counter_for_loop_unchecked_increment (unset - let the compiler decide)
[compiler.solc.optimizer.details.yul_details]
# stack_allocation (unset - let the compiler decide)
# optimizer_steps (unset - let the compiler decide)
[deployment]
confirm_transactions = true
silent = false
[detector]
[detectors]
exclude = []
# only (unset - all detectors are enabled)
ignore_paths = ["venv", ".venv", "test"]
exclude_paths = ["node_modules", "lib", "script"]
[printers]
exclude = []
# only (unset - all printers are enabled)
[printer]
[lsp]
compilation_delay = 0
[lsp.code_lens]
enable = true
sort_tag_priority = [
"lsp-references", "lsp-selectors", "lsp-inheritance-graph",
"lsp-linearized-inheritance-graph"
]
[lsp.detectors]
enable = true
[lsp.find_references]
include_declarations = false
[lsp.inlay_hints]
enable = true
sort_tag_priority = []
[general]
call_trace_options = [
"contract_name", "function_name", "named_arguments", "status",
"call_type", "value", "return_value", "error"
]
json_rpc_timeout = 15
link_format = "vscode://file/{path}:{line}:{col}"
[testing]
cmd = "anvil"
[testing.anvil]
cmd_args = "--prune-history 100 --transaction-block-keeper 10 --steps-tracing --silent"
[testing.ganache]
cmd_args = "-k istanbul -q"
[testing.hardhat]
cmd_args = ""
Global configuration file#
The global configuration file is loaded from $XDG_CONFIG_HOME/wake/config.toml
.
If $XDG_CONFIG_HOME
is not set, the global configuration file is loaded from:
$HOME/.config/wake/config.toml
on Linux/MacOS,%LOCALAPPDATA%\wake\config.toml
on Windows.
Additionally, there is a plugins.toml
file in the same directory. It holds verified_paths
with trusted paths to detectors and printers.
The paths are updated automatically with command-line queries or when creating a new detector or printer.
The plugins.toml
file can be used to specify priorities when having multiple colliding detectors or printers of the same name installed.
Example plugins.toml
[detector_loading_priorities]
reentrancy = "my_detectors" # prefer my_detectors module if present
unused-import = ["my_detectors", "wake_detectors"] # prefer my_detectors, then wake_detectors
"*" = "wake_detectors" # prefer wake_detectors for all other detectors
[printer_loading_priorities]
# follows the same structure
Project configuration file#
The project configuration file is loaded from ./wake.toml
. This can be changed using the wake --config path/to/wake.toml
command-line option.
Subconfigs#
The global config.toml
and project configuration files can include additional TOML files (subconfigs). These subconfigs are loaded after the original configuration file in the specified order. Subconfig configuration values override the values of the parent configuration file.
Example
Environment variables#
Environment variables (if supported) are printed in the help message of each command on the command-line.
Command-line arguments#
Command-line arguments for each command can be displayed using the --help
option.
Configuration options#
api_keys
namespace#
The api_keys
namespace may contain API keys for Etherscan, BscScan, PolygonScan, etc.
Blockchain explorer API keys are stored under the lowercase name of the explorer with a subdomain prefix if needed (e.g. goerli.etherscan
).
Additionally, detectors and printers may use this namespace to load needed API keys.
Warning
Keep your API keys secret. Store them in the global configuration file or in a separate file included as a subconfig and add this file to .gitignore
.
compiler.solc
namespace#
Option | Description |
---|---|
allow_paths |
Allow paths passed to the solc executable |
evm_version |
EVM version as specified by the Solidity docs |
exclude_paths |
Files in these paths are not compiled unless imported from other non-excluded files |
include_paths |
Paths (along with the current working directory) where files from non-relative imports are searched |
remappings |
Compiler remappings as specified by the Solidity docs |
target_version |
Target solc version used to compile the project |
via_IR |
Compile the code via the Yul intermediate language (see the Solidity docs) |
Info
The include_paths
option is the preferred way to handle imports of libraries. Remappings should be used only when include_paths
cannot be used (e.g. when the import path differs from the system path of the imported file).
compiler.solc.optimizer
namespace#
Option | Description |
---|---|
enabled |
Compile the project with solc optimizations enabled. Leaving this unset disables most of the available optimizations. Setting this to false disables all optimizations for Solidity <0.8.6 and has the same behavior as leaving this unset for Solidity >=0.8.6. |
runs |
Configuration of the optimizer specifying how many times the code is intended to be run. Lower values optimize more for initial deployment cost, while higher values optimize more for high-frequency usage. |
compiler.solc.optimizer.details
namespace#
For optimizer details, see the Solidity docs. Settings follow the same structure as in the Solidity docs with an exception of optimizer.details.yul
not being supported.
detector
namespace#
This namespace contains detector-specific configuration options. See the documentation of each detector for more information.
Each detector has its own namespace under the detector
namespace, e.g. detector.reentrancy
.
Every detector supports at least the min_confidence
and min_impact
options:
detectors
namespace#
Option | Description |
---|---|
exclude |
List of detectors that should not be enabled. |
only |
List of detectors that should only be enabled. |
ignore_paths |
Detections or subdetections in these paths are always ignored. Intended for files that will never be deployed (e.g. test files). |
exclude_paths |
Detections are excluded if a whole detection (including subdetections) is in these paths. Intended for dependencies. |
general
namespace#
Option | Description |
---|---|
call_trace_options |
What information to display in call traces. Possible options: contract_name , address , function_name , named_arguments , arguments , status , call_type , value , gas , sender , return_value , error . |
json_rpc_timeout |
Timeout in seconds when communicating with a node via JSON-RPC. |
link_format |
Format of links to source code files used in detectors and printers. The link should contain {path} , {line} and {col} placeholders. |
generator.control_flow_graph
namespace#
Related to the wake.generate.control_flow_graph
LSP command.
Option | Description | Default value |
---|---|---|
direction |
Graph direction. Possible options: TB , BT , LR , RL . |
TB |
vscode_urls |
Attach VS Code URLs to the graph nodes | true |
generator.imports_graph
namespace#
Related to the wake.generate.imports_graph
LSP command.
Option | Description | Default value |
---|---|---|
direction |
Graph direction. Possible options: TB , BT , LR , RL . |
TB |
imports_direction |
Direction of edges between imported files. Possible options: imported-to-importing , importing-to-imported . |
imported-to-importing |
vscode_urls |
Attach VS Code URLs to the graph nodes | true |
generator.inheritance_graph
namespace#
Related to the wake.generate.inheritance_graph
LSP command.
Option | Description | Default value |
---|---|---|
direction |
Graph direction. Possible options: TB , BT , LR , RL . |
BT |
vscode_urls |
Attach VS Code URLs to the graph nodes | true |
generator.inheritance_graph_full
namespace#
Related to the wake.generate.inheritance_graph_full
LSP command.
Option | Description | Default value |
---|---|---|
direction |
Graph direction. Possible options: TB , BT , LR , RL . |
BT |
vscode_urls |
Attach VS Code URLs to the graph nodes | true |
generator.linearized_inheritance_graph
namespace#
Related to the wake.generate.linearized_inheritance_graph
LSP command.
Option | Description | Default value |
---|---|---|
direction |
Graph direction. Possible options: TB , BT , LR , RL . |
LR |
vscode_urls |
Attach VS Code URLs to the graph nodes | true |
lsp
namespace#
Option | Description |
---|---|
compilation_delay |
Delay in seconds before the project is compiled after a keystroke. |
lsp.code_lens
namespace#
Option | Description |
---|---|
enable |
Enable LSP code lens language server feature. |
sort_tag_priority |
Order of code lens with the same start and end position based on sort tags used in detectors/printers. Sort tags default to the printer/detector name. |
lsp.detectors
namespace#
Option | Description |
---|---|
enable |
Enable vulnerability detectors in the LSP server. |
lsp.find_references
namespace#
Configuration options specific to the LSP Find references
request.
Option | Description |
---|---|
include_declarations |
Also include declarations in Find references request results. |
lsp.inlay_hints
namespace#
Option | Description |
---|---|
enable |
Enable inlay hints language server feature. |
sort_tag_priority |
Order of inlay hints with the same position based on sort tags used in detectors/printers. Sort tags default to the printer/detector name. |
printer
namespace#
This namespace contains printer-specific configuration options. See the documentation of each printer for more information.
Each printer has its own namespace under the printer
namespace, e.g. printer."lsp-references"
.
printers
namespace#
The following settings mainly apply to LSP printers that are run automatically by the LSP server.
Option | Description |
---|---|
exclude |
List of printers that should not be enabled. |
only |
List of printers that should only be enabled. |
testing
namespace#
Option | Description |
---|---|
cmd |
Development chain implementation to use. May be anvil , hardhat or ganache . |
testing.anvil
namespace#
Option | Description |
---|---|
cmd_args |
Command line arguments passed to the anvil executable when launching it. |
testing.ganache
namespace#
Option | Description |
---|---|
cmd_args |
Command line arguments passed to the ganache executable when launching it. |
testing.hardhat
namespace#
Option | Description |
---|---|
cmd_args |
Command line arguments passed to the npx hardhat node command when launching it. |