Skip to content

Changelog#

4.13.2 (Nov 14, 2024)#

Fixes:

  • fixed coverage collection in multiprocess testing [testing framework]

4.13.1 (Nov 4, 2024)#

Fixes:

  • fixed non-deterministic pytypes generation for source files under multiple different source unit names [testing & deployment framework]
  • fixed pytypes generation for source units with dots in their names [testing & deployment framework]
  • fixed tx not assigned on error that could not be resolved [testing & deployment framework]
  • fixed latest supported tx type not properly detected with Anvil caused by breaking change in Anvil [testing framework]
  • fixed base fee parsing with Anvil caused by breaking change in Anvil [testing framework]

4.13.0 (Oct 14, 2024)#

Features & improvements:

  • added support for Solidity 0.8.28 [core]
  • Github is now used as a secondary source of solc binaries [core]
  • added support for compilation metadata settings [core]
  • optimized compilation with solc >= 0.8.28 on CLI [core]

Fixes:

  • fixed language server crash on editing files removed on disk but still opened in IDE [language server]
  • fixed compilation of Etherscan contracts [testing framework]

4.12.1 (Oct 7, 2024)#

Fixes & improvements:

  • fixed removal of errored files from compilation build [core]
  • fixed AST node indexing of multiple structurally different ASTs [core]
  • fixed crashes on non-utf8 files present in workspace on compilation [core]
  • increased timeouts for solc binary installation [core]
  • fixed LSP features not available for files without workspace [language server]
  • improved error logging of LSP subprocesses [language server]
  • Anvil is now also being searched in standard ~/.foundry/bin directory [testing framework]

4.12.0 (Oct 2, 2024)#

Features & improvements:

  • added support for Solidity 0.8.27 [core]
  • implemented wake compile and wake detect JSON export [core]
  • introduced support for subprojects compilation [core]
  • added initial support for LSP 3.18 specification [language server]
  • injected wake_random_seed variable into debugger instances [testing framework]
  • transaction revert and EVM halt errors are now properly distinguished with Anvil [testing framework]

Fixes:

  • fixed wake detect detection code snippets trailing blank lines [core]
  • fixed Deploy & Interact compilation of contracts without provided bytecode [language server]
  • KeyboardInterrupt is now handled correctly in multiprocess testing [testing framework]
  • breakpoint is now supported in multiprocess testing [testing framework]

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_variables for 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 IdentifierPath in >=0.8 and Identifier in <0.8 [core]
  • fixed memory not always available in call traces in LSP contract deployment & interaction [language server]
  • fixed FileNotFoundError when 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 --incremental CLI option to wake up commands [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 certifi dependency 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 mcopy definition - 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 .selector types in pytypes (bytes4 and bytes32 instead of bytes) [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, shr and sar instructions in lsp-yul-definitions printer [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 exclude and only config options for printers [core]

Changes:

  • improved random_int documentation & incorrect value checking [testing framework]
  • changed __str__ and __repr__ of Account for 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 print commands with latest rich-click [cli]

4.9.0 (Apr 25, 2024)#

Features & improvements:

  • new deploy method for contract deployment from creation code [testing framework]
  • introduced alias chain = default_chain [testing framework]
  • chain.txs can now be indexed with numbers [testing framework]
  • chain.chain_id is now cast to uint256 [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_offsets LSP printers API function [language server]
  • fixed is_reachable is control flow graph [static analysis]
  • fixed recursion in expression_is_only_owner function [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.log is now tread as library (in respect to detectors)
  • Wake console.log is 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 from keccak256 and read_storage_variable
  • fixed get_variable_declarations_from_expression recursion 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 random affected by logging - created custom Random instance
  • 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_revert handler 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-id detector
  • mint_erc20, burn_erc20 now 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 .max members of primitive integer types
  • fixed is_reachable helper function in ControlFlowGraph

4.5.1 (Feb 17, 2024)#

Fixes:

  • ValueError is no longer raised for experimental abi.encode_with_signature and abi.encode_call with ambiguous integers
  • fixed mint_erc20/burn_erc20 for most tokens

4.5.0 (Feb 12, 2024)#

Features:

  • Accounts / contracts can now be created without default_chain connected
  • added new unsafe-erc20-call detector
  • added support for named arguments in call traces
  • reprlib is used again in call traces, full call traces can be enabled with -v CLI option
  • added alias -h for --help on command-line
  • added .min and .max members to int/uint types
  • added new experimental abi coder

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
  • 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)
  • ErrorDefinition and EventDefinition are now supported in pair_function_call_arguments helper 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 test multiprocessing mode on macOS and Windows

4.3.1 (Jan 9, 2024)#

Fixes:

  • fixed wake test multiprocessing mode when running more than one test
  • fixed global TOML config file not always loaded with local wake.toml in 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-getter and struct-mapping-deletion detectors
  • added new c3-linearization printer
  • re-run detectors after modifying a loaded detector

Fixes:

  • fixed Yul return ignored in the control flow graph
  • fixed AssertionError in call traces when running out of gas
  • fixed abi-encode-with-signature detector when processing signatures with nested brackets
  • fixed detectors were not re-run after changing a detector-specific setting
  • bumped abch-tree-sitter minimal version, fixing the language server crashes caused by distutils not being available in Python 3.12

4.2.0 (Dec 11, 2023)#

Features:

  • wake open command to open any Github or Etherscan-like project
  • wake up alias for wake init
  • new unused-function and unused-modifier detectors
  • helper functions for working with storage variables now can handle whole arrays and structs
  • wake detect and wake print commands now accept --theme options

Changes:

  • changed unused-import detections impact from warning to info

Fixes:

  • fixed compiler crashes when using SMTChecker

4.1.2 (Dec 3 , 2023)#

Fixes:

  • solc binaries are automatically re-installed if corrupted
  • added --silent mode 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 reentrancy detector crashes

4.1.0 (Nov 28, 2023)#

  • added new printers:
    • control-flow-graph
    • imports-graph
    • inheritance-graph
    • inheritance-tree
    • modifiers
    • state-changes
  • lsp_range and IR declaration name_location are now used in SARIF export
  • implemented SolidityName Click parameter type for Solidity name shell completions
  • improved wake detect and wake print help messages
  • added a new Command-line interface docs page under the static analysis section
  • state changes are now evaluated even for Yul blocks
  • fixed crashes caused by YulLiteral.value being unset

4.0.1 (Nov 22, 2023)#

  • fixed SARIF export crashing in Github action
  • fixed wake detect incorrect 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_revert and must_revert context 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 origin field to all events, describing contract Account that emitted event
    • improved forked chain ID detection
    • fuzz command was integrated into test command
    • both single-process and multi-process tests now use pytest
      • running tests without pytest is still supported with --no-pytest flag
  • 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 --config option for setting local config path
  • implemented svm install --all to install all matching solc versions
  • renamed ignore_paths config options to exclude_paths
    • automatic migration script performs automatic renaming
  • all solc optimizer settings may now be configured
  • implemented new wake init config command 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.ir and networkx are 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
    • logging module 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 --watch mode
    • implemented export to SARIF format for detectors
    • detectors may now assign dynamic impact & confidence per-detection
  • implemented ready-to-use printers

    • abi for exporting contract ABI
    • storage-layout for printing contract storage layout
    • tokens for finding all ERC-20/ERC-721/ERC-1155 tokens in project
  • improved existing detectors
  • implemented new detectors
    • abi-encode-with-signature for detecting invalid ABI signatures
    • incorrect-interface for detecting incorrectly implemented ERC-20/ERC-721/ERC-1155 interface
    • unused-import for finding unused imports