Changelog#
4.11.1 (Aug 26, 2024)#
Changes:
- Wake now does not scan for Solidity files in hidden directories both in CLI and LSP [core]
Fixes:
- fixed exception when accessing
Assignment.assigned_variablesfor array access with base enclosed in parentheses [core] - fixed indexing of Solidity AST compiled with both >=0.8 and <0.8 versions with AST node represented by
IdentifierPathin >=0.8 andIdentifierin <0.8 [core] - fixed memory not always available in call traces in LSP contract deployment & interaction [language server]
- fixed
FileNotFoundErrorwhen scanning for Solidity files in LSP [language server]
4.11.0 (Aug 13, 2024)#
Features & improvements:
- improved merging of compilation units in context of min. supported version and target version set in config [core]
- CLI does not raise exception on compilation of files with Solidity version lower than min. supported version [core]
- Wake IR now uses weak references to avoid cyclic references preventing garbage collection [core]
- improved error messages when Rosetta is not enabled on macOS [core]
- added optional
--incrementalCLI option towake upcommands [core] - introduced API for deployment & interaction with Solidity contracts through LSP [language server]
- language server now watches for external changes to Solidity files (e.g. through git branch switch) and recompiles automatically [language server]
- improved language server RAM usage [language server]
- improved language server responsiveness, especially when recompiling [language server]
- improved multiprocessing test status messages [testing framework]
Fixes:
- added
certifidependency on macOS - should resolve SSL certificates error when downloading solc binaries [core] - fixed imported source unit removed from build artifacts while importing source unit kept in build artifacts [core]
- fixed variable name location parsing when variable has empty name [core]
- fixed sending compilation build to detectors/printers subprocess causing crashes due to build size & cyclic references [language server]
- fixed multiple memory leaks in LSP [language server]
- fixed LSP
mcopydefinition - thanks to @madlabman [language server] - fixed language server crashes due to unexpected code action kinds [language server]
- fixed race conditions when creating language server context and initialising server [language server]
- fixed LSP watchdog URI format causing crashes in Neovim [language server]
- fixed multiple other LSP compilation bugs [language server]
- fixed max. supported tx type detection with DRPC node [deployment framework]
- fixed
.selectortypes in pytypes (bytes4andbytes32instead ofbytes) [testing & deployment framework]
4.10.1 (Jun 11, 2024)#
Fixes:
- fixed language server unicode decoding crash when trying to read from non-existent files [language server]
- fixed Yul definitions of
shl,shrandsarinstructions inlsp-yul-definitionsprinter [language server] - fixed handling of language server subprocess crashes [language server]
4.10.0 (Jun 11, 2024)#
Features & improvements:
- implemented abi encoding & decoding of errors [testing framework]
- included standard Solidity interfaces, Create3 deployer and ERC-1967 factory into bundled-in contracts [testing framework]
- detectors & printers now run in subprocesses in LSP [language server]
- implemented LSP workspace symbols feature [language server]
- added support for Solidity 0.8.26 [core]
- implemented
excludeandonlyconfig options for printers [core]
Changes:
- improved
random_intdocumentation & incorrect value checking [testing framework] - changed
__str__and__repr__ofAccountfor easier debugging [testing framework] - code lens LSP features re-implemented as LSP printers + created docs [language server]
- dropped support for Python 3.7 [core]
- upgraded pydantic to 2.x [core]
Fixes:
- fixed pickling error when encoding dataclasses using new abi encoder [testing framework]
- fixed file descriptors leak in LSP [language server]
- fixed misbehavior of LSP configuration key removal [language server]
- fixed LSP connection crash due to incorrect content length with unicode characters [language server]
- fixed rare compilation pipeline crash with multiple solc versions [core]
- fixed
wake detect&wake printcommands with latestrich-click[cli]
4.9.0 (Apr 25, 2024)#
Features & improvements:
- new
deploymethod for contract deployment from creation code [testing framework] - introduced alias
chain = default_chain[testing framework] chain.txscan now be indexed with numbers [testing framework]chain.chain_idis now cast touint256[testing framework]
Fixes:
- fixed process count setting for collecting coverage [testing framework]
- fixed pytypes generator overloading + inheritance issue [testing framework]
- fixed LSP race conditions on files updated outside of IDE (VS Code) [language server]
- fixed
add_hover_from_offsetsLSP printers API function [language server] - fixed
is_reachableis control flow graph [static analysis] - fixed recursion in
expression_is_only_ownerfunction [static analysis] - fixed regex parsing from source code containing comments [core]
4.8.0 (Apr 5, 2024)#
Features & improvements:
- implemented callback commands for LSP printers
- go to locations, peek locations, open URI, copy to clipboard
- Wake
console.logis now tread as library (in respect to detectors) - Wake
console.logis now auto-completed in Solidity imports through LSP - random seeds used in testing are now printed in pytest summary
- documented possible test reproducibility issues and their solutions
Fixes:
- fixed empty array encoding in new abi coder
- Python warning messages are suppressed in shell completions
- fixed LSP config loading race conditions
- newly excluded Solidity files in LSP are now treated as deleted (fixes LSP crashes)
- primitive types (e.g.
bytes32) are now returned fromkeccak256andread_storage_variable - fixed
get_variable_declarations_from_expressionrecursion bug
4.7.0 (Mar 16, 2024)#
Features:
- added support for Solidity 0.8.25
Fixes:
- fixed compilation crashes when using Solidity
log0-log4 - fixed compilation crashes when using
bytes.pop() - fixed
randomaffected bylogging- created customRandominstance - fixed compilation crashes in AST validation with Solidity <= 0.7.2
4.6.0 (Mar 13, 2024)#
Features:
- added
visit_functions for base classes to visitors - added
on_reverthandler example to the default test template - IR types (
wake.ir.types) are now strictly comparable - improved printing of structs and errors in call traces
- updated
axelar-proxy-contract-iddetector mint_erc20,burn_erc20now works with constant total supply tokens (warning is printed that total supply cannot be updated)
Fixes:
- fixed multiple issues in call traces printing
- fixed Python linter firing when using pytypes with new version of primitives types (
uint256, etc.) - fixed the type of
.min.maxmembers of primitive integer types - fixed
is_reachablehelper function inControlFlowGraph
4.5.1 (Feb 17, 2024)#
Fixes:
ValueErroris no longer raised for experimentalabi.encode_with_signatureandabi.encode_callwith ambiguous integers- fixed
mint_erc20/burn_erc20for most tokens
4.5.0 (Feb 12, 2024)#
Features:
- Accounts / contracts can now be created without
default_chainconnected - added new
unsafe-erc20-calldetector - added support for named arguments in call traces
reprlibis used again in call traces, full call traces can be enabled with-vCLI option- added alias
-hfor--helpon command-line - added
.minand.maxmembers to int/uint types - added new experimental
abicoder
Fixes:
- fixed coverage collection with new Anvil
- fixed coverage collection on macOS/Windows
- fixed ambiguous errors resolving when reverting in contract constructor
- fixed ERC- slots detection using storage layout
- fixed debugger attachment when chain is not connected
4.4.1 (Jan 30, 2024)#
Fixes:
- changed detectors/printers preview interface causing
__init__and click entry points being run even when not intended to be run on CLI / in LSP- fixes
OSError(30, 'Read-only file system')error messages in LSP on macOS
- fixes
- fixed compiling projects from sources on Etherscan-like explorers in testing framework helper functions
4.4.0 (Jan 27, 2024)#
Features:
- Solidity 0.8.24 support
- LSP providers in detectors and printers (preview)
ErrorDefinitionandEventDefinitionare now supported inpair_function_call_argumentshelper function
Fixes:
- fixed
pair_function_call_arguments- struct construction with (possibly nested) mapping in Solidity < 0.7 - fixed LSP crash on file opened but not saved on disk
4.3.2 (Jan 23, 2024)#
Fixes:
- fixed issue when generating pytypes for cyclically imported Solidity files with inheritance
- fixed
wake testmultiprocessing mode on macOS and Windows
4.3.1 (Jan 9, 2024)#
Fixes:
- fixed
wake testmultiprocessing mode when running more than one test - fixed global TOML config file not always loaded with local
wake.tomlin LSP - fixed counter example README
4.3.0 (Dec 24, 2023)#
Features:
- print warnings when a detector set in config options is not discovered (both on the CLI and in LSP)
- added new
complex-struct-getterandstruct-mapping-deletiondetectors - added new
c3-linearizationprinter - re-run detectors after modifying a loaded detector
Fixes:
- fixed Yul
returnignored in the control flow graph - fixed
AssertionErrorin call traces when running out of gas - fixed
abi-encode-with-signaturedetector when processing signatures with nested brackets - fixed detectors were not re-run after changing a detector-specific setting
- bumped
abch-tree-sitterminimal version, fixing the language server crashes caused bydistutilsnot being available in Python 3.12
4.2.0 (Dec 11, 2023)#
Features:
wake opencommand to open any Github or Etherscan-like projectwake upalias forwake init- new
unused-functionandunused-modifierdetectors - helper functions for working with storage variables now can handle whole arrays and structs
wake detectandwake printcommands now accept--themeoptions
Changes:
- changed
unused-importdetections impact from warning to info
Fixes:
- fixed compiler crashes when using SMTChecker
4.1.2 (Dec 3 , 2023)#
Fixes:
solcbinaries are automatically re-installed if corrupted- added
--silentmode to fix LSP server crashes on Windows because of unicode
4.1.1 (Nov 28, 2023)#
- fixed script responsible for migration to XDG paths when the global config file already exists
- fixed assertion error in ownable pattern detection, manifested mainly by
reentrancydetector crashes
4.1.0 (Nov 28, 2023)#
- added new printers:
control-flow-graphimports-graphinheritance-graphinheritance-treemodifiersstate-changes
lsp_rangeand IR declarationname_locationare now used in SARIF export- implemented
SolidityNameClick parameter type for Solidity name shell completions - improved
wake detectandwake printhelp messages - added a new
Command-line interfacedocs page under the static analysis section - state changes are now evaluated even for Yul blocks
- fixed crashes caused by
YulLiteral.valuebeing unset
4.0.1 (Nov 22, 2023)#
- fixed SARIF export crashing in Github action
- fixed
wake detectincorrect exit codes - fixed exporting ignored detections in SARIF format
- minor changes to the documentation
4.0.0 (Nov 20, 2023)#
-
reviewed, updated and documented IR model
- all IR nodes are now documented, generated docs available in API reference section
- added link to SourceUnit from all IR nodes
- added link to nearest StatementAbc from all expressions
- added link to declaration (FunctionDefinition/ModifierDefinition) from all statements
- added link to InlineAssembly from all Yul nodes
-
updated control flow graph
- Yul is now fully supported; InlineAssembly blocks are now decomposed into Yul statemenets
- successful execution and reverting execution is now distinguished in control flow graph
- assert/require/revert function calls are now handled (including these calls in conditionals)
- fixed missing edge for in try/catch statement
-
development & testing framework
- all default accounts (
default_tx_account,default_call_account,default_estimate_account,default_access_list_account) are now set by default may_revertandmust_revertcontext managers now re-raise original exception when it does not match one of arguments- significantly improved performance when accessing
tx.events - improved event resolving algorithm
- added
originfield to all events, describing contract Account that emitted event - improved forked chain ID detection
fuzzcommand was integrated intotestcommand- both single-process and multi-process tests now use pytest
- running tests without pytest is still supported with
--no-pytestflag
- running tests without pytest is still supported with
- all default accounts (
-
added support for Solidity 0.8.21, 0.8.22 and 0.8.23
- added experimental support for Python 3.12
- rebranded from Woke to Wake
- implemented automatic migration script for migrating project-specific and global files
- all CLI commands now accept
--configoption for setting local config path - implemented
svm install --allto install all matching solc versions - renamed
ignore_pathsconfig options toexclude_paths- automatic migration script performs automatic renaming
- all solc optimizer settings may now be configured
-
implemented new
wake init configcommand for initializing only config file -
new detectors & printers API
- printers are similar to detectors but allow printing (or exporting in other ways) any useful information
- users may create custom detectors & printers using documented API
- may be project-specific, global and loaded from plugin packages
- project-specific detectors/printers must be first confirmed as verified to protect users downloading others (potentially malicious) projects
- both detectors and printers may accept any number of Click options and arguments that can be set in CLI, ENV variables and TOML files
- detector results and compiler warnings may be ignored using
// wake-disable-*comments - loading priorities may be specified for multiple detectors/printers with the same name loaded from multiple plugin packages
wake.analysis,wake.irandnetworkxare now imported as lazy modules to improve auto-completions speed in CLI- detectors cannot crash LSP server or prevent other detectors from executing, errors are reported to LSP clients
loggingmodule logger attached to each detector/printer; logging messages are redirected to LSP client when running LSP server- detectors are live-reloaded after modifications when running LSP server, no need to restart LSP server to trigger changes
- added helper CLI and LSP commands for creating new detector/printer from template
- added more export formats to detectors and printers
- both detectors and printers may be launched in
--watchmode - implemented export to SARIF format for detectors
- detectors may now assign dynamic impact & confidence per-detection
-
implemented ready-to-use printers
abifor exporting contract ABIstorage-layoutfor printing contract storage layouttokensfor finding all ERC-20/ERC-721/ERC-1155 tokens in project
- improved existing detectors
- implemented new detectors
abi-encode-with-signaturefor detecting invalid ABI signaturesincorrect-interfacefor detecting incorrectly implemented ERC-20/ERC-721/ERC-1155 interfaceunused-importfor finding unused imports