- The disassembler now only works with files with hexadecimal strings
- The CLI library from deprecated
structopt
toclap
- Updated to Rust v1.82.0
- Cleared return data after calling
CREATE
/CREATE2
- More LLVM optimizations
- Wrapped project metadata into another object for future extensibility
- Supported functions with a return buffer without using
vyper
function metadata
- Incorrect handling of return buffer when
vyper
function metadata is missing
- The broken
--version
CLI endpoint
- The support for IPFS metadata hash type
- The EraVM disassembler
- More LLVM optimizations
- The error code when no input files are provided
- Several issues with fragile parsing of
--llvm-options
- More LLVM optimizations
- Source code files do not affect one another's metadata hash anymore
- Migrated to the LLVM-based assembler and linker
- Updated to Rust v1.80.1
- The complex bitwise operations misoptimization
- The
layout
,userdoc
,devdoc
fields to all output modes
- EraVM assembly must now be requested with
zkvyper -f eravm_assembly ...
- Redundant calls to
vyper
that were increasing the compilation time
- missing
0x
prefix in the combined JSON bytecode output bound
argument that was ignored in loop rangesassert_unreachable
is now translated toINVALID
, burning all gas
- Obsolete warnings for
extcodesize
andecrecover
- Path normalization error with the internal minimal proxy contract
- The vyper v0.4.0 support
- The
--enable-decimals
parameter - The support for compiling multiple files in Yul, LLVM IR, and EraVM assembly modes
- More LLVM optimizations
- Assembly is now only returned if requested with
--output-assembly
- Renamed the
zkasm
flag toeravm-assembly
- Updated to Rust v1.79.0
- Missing output with non-canonical input paths in combined JSON output
- 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
zkasm
flag toeravm
- Updated to Rust v1.78.0
zkasm
alias oferavm
flag
- The bytes-to-cells LLVM misoptimization
- 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
- Updated to LLVM 17
- The
xor(zext(cmp), -1)
optimization bug - Printing
--help
if no 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
Cancun
EVM version support with temporarily unsupported transient storage - The
MCOPY
instruction support - The
--evm-version
parameter to the CLI - The
create_from_blueprint
Vyper built-in support - 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
- An option to fallback to optimizing for size if the bytecode is too large
- More LLVM optimizations
- The incorrect behavior of complex sequences of overflow flags
- The incorrect behavior of complex sequences of modular operations
- The vyper v0.3.10 support
- More LLVM optimizations
- Warnings for
ecrecover
,extcodesize
,tx.origin
- The
INVALID
instruction now burns all gas - Moved the standard library functions to LLVM
- The crash with exceeded JSON deserialization recursion limit
- An issue with uninitialized immutable values (see GHSA-h8jv-969m-94r4)
- An issue with non-determinism in contract metadata hash
- Each contract is now compiled in a separate process
- The CLI argument validation to rule out incompatible options
- The EraVM assembly compilation mode (
--zkasm
) - The vyper v0.3.9 support
- The evaluation order of EVM instruction arguments in LLL IR
- The
CODESIZE
support in runtime code - An option not to include the metadata hash at the end of bytecode
- Calldata instructions now return 0 in deploy code
- The LLVM crash with memory offsets
>= 2^64
- The LLVM crash with ternary operator on fat memory pointers
- An option to disable the
vyper
optimizer
- Increased the stack size for
rayon
workers to 16 MB - Improved the CLI interface description (see
--help
)
- LLVM options for debugging and verification
- The contract metadata hash to the end of bytecode
- More optimizations
- The optimizer settings to support multiple modes
- The optimizer now optimizes for performance instead of size by default
- The LLVM build commit ID to the
--version
output - More LLVM optimizations
- The
long_version
field from the combined JSON output
- Calls now only copy
min(output_size, return_data_size)
of the return data
- 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 EraVM 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
- The non-zero initial return data size value
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
- 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
- The option to dump IRs to files
- More contract size optimizations
- The Windows platform support
- The
CODECOPY
instruction now produces a compile-time error in the runtime code - The
CALLCODE
instruction now emits a compile-time error
- The
BYTE
instruction overflow - The forwarder constructor unhandled error
- 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
- System contract calls now require a system call flag
- The handling of
msg.value
is made more robust - Failed system contract calls now do bubble-up the reverts
- The compiler versions to the output JSON
- Unsupported instructions
PC
,EXTCODECOPY
,SELFDESTRUCT
now produce compile-time errors
- Bloating the array of immutables with zero values
- Support for the
BASEFEE
instruction
- Better compatibility of opcodes
GASLIMIT
,GASPRICE
,CHAINID
,DIFFICULTY
,COINBASE
etc.
- Support for the SELECT instruction, used by min/max built-ins
- The initial release