- JSON interface for the EraVM linker
- Missing libraries output in standard JSON mode
- Moved the
solc
client to another crate atera-solc
- Prohibited the usage of the upstream
solc
compiler - Disassembler now only works with files with hexadecimal strings
- Updated to Rust v1.82.0
- Supported transient storage layout that is returned by
solc
- The
--codegen
option to make codegen settings more unified - Increased the code coverage of the interface to nearly 100%
- The
zksolc
documentation as a part of this repository - More LLVM optimizations
- Moved suppressed messages inside
settings
in standard JSON input - Moved EraVM artifacts to
contract.eravm
in standard JSON output
- Different bytecode for compile-time and post-compile-time library linking
- Suppressed messages at the root of standard JSON input
- EraVM artifacts returned via
contract.evm
in standard JSON output --force-evmla
flag in favor of--codegen
--disable-solc-optimizer
flag, as we are not using thesolc
optimizer anymore
- An error about
solc
discovery when it is not present in${PATH}
- The solc v0.8.28 support
- More optimizations
- Skipped compilation if no output parameters are provided
- Broken
--output-dir
output paths for non-Solidity contracts solc
that was not picked up from${PATH}
in standard JSON modesolc
exit code check which is now before the output parsing- Several issues with fragile parsing of
--llvm-options
- The support for IPFS metadata hash type
- The support for deploy-time library linking
- The EraVM disassembler
- The solc v0.8.27 support
- More optimizations
- Incorrect serialization of suppressed warnings and errors
- More LLVM optimizations
- Migrated to the LLVM-based assembler and linker
- Updated to Rust v1.80.1
- The complex bitwise operations misoptimization
- The support for multiple
urls
to local files in standard JSON input
- The source code loading mechanism leading to file system errors
- The Solidity source code part of the metadata hash preimage
- Some duplicate fields in the metadata hash preimage
- Errors with imports of files not included into the initial input
- Parallelization in AST and IR parsing
- More LLVM optimizations
- Location resolution for EraVM-specific messages in standard JSON output
- The
suppress-errors
parameter to disable some compilation errors
- All messages are now written to JSON output in standard JSON mode
- AST and IRs are not emitted anymore if not explicitly requested
- Empty files and contracts are pruned from standard JSON output
- Message formats are made more compatible with original messages of solc
<address payable>.send/transfer(<X>)
now triggers a compilation error- Updated to Rust v1.79.0
- Obsolete warnings for
extcodesize
andecrecover
- EVM-specific warnings which solc has been emitting unconditionally
- Dependency graph inefficiency that caused excessive compilation time
- Removed JSON stream readers which are much slower than strings and vectors
- Missing output with non-canonical input paths in combined JSON output
- Missing warnings with solc v0.4.x and v0.5.x due to differences in AST
- Cryptic error on
type(T).runtimeCode
usage with EVM assembly codegen - The unknown
bytecodeHash
error in standard JSON mode with solc v0.5.x
- The support for compiling multiple files in Yul, LLVM IR, and EraVM assembly modes
- The support for Yul, LLVM IR, and EraVM assembly languages in standard JSON mode
- The support for
urls
to local files in standard JSON input - The solc v0.8.26 support
- More LLVM optimizations
- The
--llvm-options
parameter to pass arbitrary options to LLVM - The
--threads
parameter to control the number of threads - Caching of the underlying compiler's metadata, including
--version
- Updated to EraVM v1.5.0
- Renamed the
system-mode
flag toenable-eravm-extensions
- Renamed the
zkasm
flag toeravm-assembly
- Added all missing CLI flags to standard JSON input
- Updated to Rust v1.78.0
force-evmla
,detect-missing-libraries
,system-mode
CLI flags in standard JSON modesystem-mode
alias ofenable-eravm-extension
flagzkasm
alias oferavm
flag
- The bytes-to-cells LLVM misoptimization
- LLVM IR generator errors are now written to JSON in standard JSON mode
- Removed
:
from output filenames, as it is not allowed on Windows - Excessive RAM usage and compilation time with some projects
- Redundancy in error printing
- More LLVM optimizations, including jump tables
- The jump table density threshold optimization parameter
- Simulations to forward return data pointers
- Simulations to manipulate multiple active pointers
- The solc v0.8.25 support
- The support for
useLiteralContent
flag in metadata
- Updated to LLVM 17
- The
xor(zext(cmp), -1)
optimization bug - Libraries passed with
--libraries
and now added to input files - Printing
--help
if not arguments are provided - Missing
--overwrite
flag now triggers an error - Bytecode is now printed to
--output-dir
as a hexadecimal string - The broken pipe error when piping the output to another process
- The solc v0.8.24 support with temporarily unsupported transient storage and blobs
- The
MCOPY
instruction support - The
--evm-version
parameter to the CLI - An option to disable the system request memoization
- More compiler optimizations
- An issue with
MCOPY
for overlapping memory regions
- More LLVM optimizations
- Incorrect handling of input paths on Windows
- The issue with different bytecode hash across different platforms
- An option to fallback to optimizing for size if the bytecode is too large
- The support for the EraVM-friendly edition of solc
- Disabled the solc optimizer to prevent unnecessary interference
- The incorrect behavior of complex sequences of overflow flags
- More LLVM optimizations, especially for precompiles
- The incorrect detection of constant addresses in call simulations
- The Solidity import remappings support
- The solc v0.8.22 support
- The solc v0.8.23 support
- Simulations to work with constant arrays in code section
- LLVM attributes to Yul function names via
$llvm_<attrs>_llvm$
syntax - More LLVM optimizations
- The missing EVM legacy assembly fields in standard JSON output
- The LLVM attribute syntax in Yul function identifiers
- The incorrect behavior of complex sequences of modular operations
- More LLVM optimizations
- The
INVALID
instruction now burns all gas - Moved the standard library functions to LLVM
- The warnings for
block.*
environment variables
- The crash with exceeded JSON deserialization recursion limit
- The missing
evm.legacyAssembly
field in standard JSON output
- A mode for detection of missing deployable library addresses
- An option to suppress compiler warnings
- The solc v0.8.21 support
- The Yul validation via call to
solc --strict-assembly <path>
- A warning for
blockhash
usage
- A bug with
CODECOPY
where the bytecode hash was set to 0 - An inefficiency in the Yul lexical analyzer
- A non-deterministic EVMLA output by disabling the
solc
constant optimizer - Unclear error message for invalid Yul object names
- The CLI argument validation to rule out incompatible options
- The solc v0.8.20 support
- The zkEVM assembly compilation mode (
--zkasm
)
metadata.bytecodeHash
field in standard JSON is now optional
- The potentially dangerous compatible block workaround in EVMLA
- Parsing escape sequences in string and hexadecimal literals
- Some runtime errors with EVMLA from
solc
v0.4 - The bug where the scrutinee of Yul switch was not executed
- The evaluation order of Yul function arguments
- A warning that Yul is not validated in system mode
- The
CODESIZE
support in runtime code - An option not to include the metadata hash at the end of bytecode
- Internal function pointers now trigger a compile-time error with the EVMLA codegen
- Calldata instructions now return 0 in deploy code
- Disabled Yul validation via
solc
due to its crashes when attempting to compile to EVM
- The bug with addresses of unresolved libraries replaced with 0
CODECOPY
in EVMLA runtime code now zeroes memory out- The Solidity AST is now passed through without changes
- The LLVM crash with memory offsets
>= 2^64
- The LLVM crash with ternary operator on fat memory pointers
- Better errors for unsupported
type(X).runtimeCode
with the Yul codegen - An option to disable the
solc
optimizer
- Increased the stack size for
rayon
workers to 16 MB - Improved the CLI interface description (see
--help
)
- Another stack overflow issue with the EVMLA codegen
CODECOPY
in runtime code now does not copy calldata with the EVMLA codegenCODESIZE
in runtime code now returns 0 with the EVMLA codegen- Hexadecimal arguments in EVMLA are now parsed as case-insensitive
- LLVM options for debugging and verification
- Fields
metadata
,devdoc
,userdoc
,storage-layout
,ast
to the combined JSON output
- Options
--abi
and--hashes
due to inefficiency in calling thesolc
subprocess
- The missing
abi
field in the combined JSON output - The
hashes
field in the combined JSON output is now only printed if requested - The stack-too-deep error produced by
solc
in some cases of the combined JSON usage - Invalid behavior of exception handling with the near call ABI
- IRs are not removed from the standard JSON output anymore
- The contract metadata hash to the end of bytecode
- The solc v0.8.19 support
- Source code validation in the Yul mode via a call to
solc
- Output selection flags
metadata
,devdoc
,userdoc
- The optimizer settings to support multiple modes
- The optimizer now optimizes for performance instead of size by default
- The solc v0.8.18 support
- The broken optimization flag in the standard JSON mode
- The
send
andtransfer
now produce a warning again due to false-positives - Malfunctioned
CODECOPY
in some cases with the EVMLA codegen - The near call exception handling for the requests to system contracts
- The LLVM build commit ID to the
--version
output - More LLVM optimizations
- Warnings for the instructions
ORIGIN
,NUMBER
, andTIMESTAMP
- The
send
andtransfer
methods now produce a compile-time error - The minimal supported
solc
version to 0.4.12
- The
long_version
field from the combined JSON output
- Calls now only copy
min(output_size, return_data_size)
of the return data - Missing zkEVM warnings in non-standard-JSON outputs
- Some ABI data layout parameters
- The LLVM IR compilation mode (
--llvm-ir
)
- System contract calls now use remaining ergs instead of 0
- The LLVM optimization manager to the new one
- The contract ABI to match that of zkEVM v1.3
- Moved the event decoding to the system contracts
- Simplified the CLI arguments used for debugging
- The
extcodesize
check at the beginning of runtime code
msg.value >= 2^128
now set the call status code to zeroBALANCE
now returns 0 ifaddress >= 2^160
KECCAK256
now returns an empty error in case of revertSIGNEXTEND
now returns the original value ifbytes >= 31
CODESIZE
is forbidden in Yul runtime codeRETURNDATACOPY
now reverts on attempt to copy from beyond the return dataRETURN
andREVERT
offsets and lengths are now clamped to2^32 - 1
- Only block hashes of the last 256 blocks are now accessible
ptr.pack
is not optimized out by LLVM anymore
- The non-zero initial return data size value
- The stack overflow in EVMLA with a try-catch inside an infinite loop
- More LLVM optimizations
- Updated LLVM to v15.0.4
- The crash with some uncovered LLVM IR nodes
- The missing check for
msg.value
>2^128 - 1
- Some missing fields in the output JSONs
- The option to dump IRs to files
- More contract size optimizations
- The system contracts compilation mode
- The Windows platform support
- The
CODECOPY
instruction now produces a compile-time error in the runtime code - The
CALLCODE
instruction now produces a compile-time error
- The
BYTE
instruction overflow
- Many improvements for the memory security and EVM-compatibility
- Optimizations for the heap allocation
- Support for optimizations for the calldata and returndata forwarding
- More LLVM optimizations
- Support for solc v0.8.17
- System contract calls now require a system call flag
- The handling of
msg.value
became more robust - Failed system contract calls now do bubble-up the reverts
- Better compile-time errors for the Yul mode
- The compiler versions to all output JSONs
- Unsupported instructions
PC
,EXTCODECOPY
,SELFDESTRUCT
now produce compile-time errors
- Bloating the array of immutables with zero values
- Support for the
BASEFEE
instruction - Support for solc v0.8.16
- Better compatibility of opcodes
GASLIMIT
,GASPRICE
,CHAINID
,DIFFICULTY
,COINBASE
etc.
- The check for reserved function names in variable names
- An EVMLA stack inconsistency issue with the
GASPRICE
opcode
- The extcodesize check before the method selector
- The check for the latest supportable version of
solc
- A lot of LLVM optimizations
- The default memory allocator for MUSL to
mimalloc
- Overwriting the return data size during non-EVM far calls
- The incorrect behavior of immutables in some cases
- The exponentiation algorithm from linear to binary
- The evaluation order of event indexed fields
- Initial release