Releases: vyperlang/vyper
v0.4.3 ("Buttermilk Racer")
What's Changed
v0.4.3 introduces the @raw_return decorator which allows contracts to return bytes directly without ABI-encoding, which enables new proxy contract use cases. The default EVM version has been updated to prague, and several improvements have been made to the Venom optimizer pipeline.
Full release notes hosted at https://docs.vyperlang.org/en/latest/release-notes.html#v0-4-3-buttermilk-racer (source on github).
New Contributors
- @gap-editor made their first contribution in #4680
- @crypdoughdoteth made their first contribution in #4641
Full Changelog: v0.4.2...v0.4.3
v0.4.3rc1
What's Changed
- fix[venom]: reduce single-use expansion by @HodanPlodky in #4667
- chore[ci]: update gitignore by @charles-cooper in #4690
- feat[lang]:
@raw_returndecorator by @charles-cooper in #4568 - fix[docs]: fix build status in README.md by @gap-editor in #4680
- refactor[test]: rename venom
paraminstruction in tests by @charles-cooper in #4689 - fix[lang]: disallow
@raw_returnin interfaces by @charles-cooper in #4700 - fix[tool]: add metadata for ctor functions by @charles-cooper in #4668
- feat[venom]: rewrite grammar to LALR(1) by @charles-cooper in #4687
- fix[venom]: fix function inliner
clonefunction by @charles-cooper in #4696 - fix[venom]: fix incorrect write reordering in
DFTPassby @charles-cooper in #4695 - feat[docs]: add docs for
@raw_returndecorator by @charles-cooper in #4699 - fix[tool]: fix invalid quotes in
-f cfgoutput by @crebsy in #4672 - fix[docs]: clarify
n_slotsrequirement in custom layout file by @crypdoughdoteth in #4641 - feat[tool]!: make
praguethe default evm version by @pcaversaccio in #4633
New Contributors
- @gap-editor made their first contribution in #4680
- @crypdoughdoteth made their first contribution in #4641
Full Changelog: v0.4.2...v0.4.3rc1
v0.4.2 ("Lernaean Hydra")
What's Changed
v0.4.2 includes a new raw_create() builtin which allows users to build more generic factories in Vyper. It also moves the sqrt() builtin to a pure Vyper module, involving a refactor which will allow more stdlib functionality to be written in Vyper in the future.
Additionally, Venom has undergone more improvements, including a CSE elimination pass, dead-store elimination pass, as well as moving more items in the calling convention to the stack in the venom pipeline. Benchmark contracts are now typically 5% smaller.
Two low severity GHSAs have been patched in this release.
Full release notes hosted at https://docs.vyperlang.org/en/latest/release-notes.html#v0-4-2-lernaean-hydra (source on github).
New Contributors
- @2xic made their first contribution in #4475
- @iamslown made their first contribution in #4543
- @Romain-Geissler-1A made their first contribution in #4592
- @crebsy made their first contribution in #4637
Full Changelog: v0.4.1...v0.4.2
v0.4.2rc1
What's Changed
- fix[codegen]: relax the filter for augassign oob check by @charles-cooper in #4497
- release[docs]: add release notes for v0.4.1 ("Tokara Habu") by @charles-cooper in #4310
- fix[docs]: update v0.4.1 release date by @charles-cooper in #4502
- perf[venom]: improve performance of
MakeSSAby @charles-cooper in #4491 - feat[test]: add tests for venom dload lowering pass by @HodanPlodky in #4471
- feat[venom]: add varname freshener by @charles-cooper in #4484
- refactor[test]: add more tests with hevm venom harness by @HodanPlodky in #4493
- fix[ux]: don't warn for logs with 0 positional args by @charles-cooper in #4501
- fix[docs]: update
skip_contract_checkdocs by @trocher in #4511 - fix[parser]: block value assignment in for targets by @charles-cooper in #4492
- feat[test]: add negative hevm tests by @charles-cooper in #4504
- feat[venom]: add basic semantic check machinery to venom by @HodanPlodky in #4483
- feat[test]: add more example contracts by @charles-cooper in #4500
- refactor[lang]: refactor decorator parsing by @charles-cooper in #4490
- fix[venom]: fix sccp resolution of truthy
jnzby @charles-cooper in #4505 - feat[test]: add hevm to
get_contractharness by @charles-cooper in #4499 - refactor[venom]: use
InstUpdaterin more passes by @charles-cooper in #4508 - fix[docs]: fix venom examples by @2xic in #4475
- feat[venom]: allow labels to be assigned to variables by @harkal in #4514
- feat[venom]: add
callocainstruction by @charles-cooper in #4376 - chore[test]: add test for struct member names by @tserg in #3527
- fix[codegen]: interleaved effects eval for some builtins by @charles-cooper in #4156
- fix[venom]: fix var defined check for unreachable blocks by @HodanPlodky in #4518
- fix[lang]: extend
as_wei_valueto all numeric types by @trocher in #3498 - feat[venom]: make
reverta bb terminator by @charles-cooper in #4529 - fix[ci]: suppress hypothesis health check by @charles-cooper in #4533
- feat[venom]: parse hex literals in text format by @harkal in #4532
- refactor[venom]: simplify
SimplifyCFGpass by @charles-cooper in #4528 - feat[lang]: add
raw_create()builtin by @charles-cooper in #4204 - fix[ux]: fold
keccakandsha256of constant hexbytes by @tserg in #4536 - feat[venom]: improve memmerge pass by @HodanPlodky in #4422
- fix[lang]!: forbid calling
__default__by @sandbubbles in #4371 - fix[test]: fix warnings in thirdparty tests by @charles-cooper in #4547
- refactor[venom]: add dom walk property by @harkal in #4546
- feat[lang]: bubble up create revertdata by @charles-cooper in #4540
- feat[lang]!: remove deprecated bitwise builtins by @cyberthirst in #4552
- refactor[parser]: refactor pragma parsing by @charles-cooper in #4530
- fix[ux]: typechecking for loop annotation of list variable by @tserg in #4550
- feat[lang]: remove
@externaldecorator from builtin interfaces by @charles-cooper in #4562 - feat[lang]: remove one-warning limit from builtins by @charles-cooper in #4542
- feat[venom]: improvements for iszero handling and memmerge by @HodanPlodky in #4469
- feat[lang]: enable bitwise ops for
bytesMtypes by @charles-cooper in #4538 - chore[docs]: remove dead link from internal documentation by @iamslown in #4543
- refactor[venom]: update more passes to use
InstUpdaterby @charles-cooper in #4516 - refactor[parser]: put settings on Module AST node by @charles-cooper in #4569
- fix[lang]: block modules in structs by @cyberthirst in #4566
- fix[lang]: filter oob array access during folding by @charles-cooper in #4571
- fix[codegen]: fix overcopying of bytes in
make_setterby @charles-cooper in #4419 - feat[lang]!: move sqrt to new stdlib
mathmodule by @cyberthirst in #4520 - fix[lang]!: ban calling nonreentrant functions from nonreentrant functions by @charles-cooper in #4574
- fix[lang]: disallow some builtins in
purefunctions by @tserg in #3157 - fix[lang]: only reserve builtins at the top level by @charles-cooper in #4578
- feat[venom]: tune function inliner by @charles-cooper in #4584
- feat[venom]: add assert optimizer by @charles-cooper in #4585
- fix[venom]: revert-to-assert should invalidate dfg by @charles-cooper in #4586
- chore[lang]: remove
sha3andimportlib_metadataimports by @charles-cooper in #4588 - chore[tool]: widen version bounds for
packagingby @charles-cooper in #4590 - feat[venom]: add memory SSA analysis by @harkal in #4555
- chore[tool]: widen version bounds for
asttokensby @Romain-Geissler-1A in #4592 - feat[venom]: add common subexpression elimination by @HodanPlodky in #4241
- fix[venom]: fix
.nameinvalidation inMakeSSAby @charles-cooper in #4545 - refactor[venom]: add annotation to append_instruction by @charles-cooper in #4583
- fix[venom]: fix handling of params in
venom_to_assemblyby @charles-cooper in #4587 - refactor[test]: remove
selfdestructfrom example contracts by @cyberthirst in #4537 - refactor[venom]: extract liveness and cfg data structures by @charles-cooper in #4595
- feat[venom]: improve
dload/mstoremerging by @HodanPlodky in #4570 - feat[venom]: mark loads as non-volatile by @charles-cooper in #4388
- feat[docs]: document order of evalution of arguments of
logby @cyberthirst in #4617 - feat[lang]: nonreentrancy by default by @charles-cooper in #4563
- fix[venom]: fix
DominatorTreeAnalysis.dominates()by @charles-cooper in #4615 - fix[docs]: fix code block rst formatting by @charles-cooper in #4618
- refactor[stdlib]: refactor
math.sqrtimplementation by @charles-cooper in #4575 - fix[tool]: fix layout export with nonreentrancy pragma on by @cyberthirst in #4621
- fix[lang]: disallow staticcall in pure context by @cyberthirst in #4619
- fix[lang]: disallow duplicate getter annotations by @cyberthirst in #4623
- fix[lang]: disable nonreentrant behavior of immutable and constant getters by @cyberthirst in #4622
New Contributors
- @2xic made their first contribution in #4475
- @iamslown made their first contribution in #4543
- @Romain-Geissler-1A made their first contribution in #4592
Full Changelog: v0.4.1rc3...v0.4.2rc1
v0.4.1 ("Tokara Habu")
What's Changed
v0.4.1 is primarily a polishing release, focusing on bug fixes, UX
improvements, and security-related fixes (with four low-to-moderate
severity GHSA reports published). However, a substantial amount of
effort has also been invested in improving the Venom pipeline, resulting
in better performance and code generation from the Venom pipeline. Venom
can be enabled by passing the --venom or --experimental-codegen flag
to the Vyper compiler (they are aliases of each other). Venom code can
now also be compiled directly, using the venom binary (included in
this release).
Breaking changes
- feat[lang]!: make
@externalmodifier optional in.vyifiles (#4178) - feat[codegen]!: check
returndatasizeeven whenskip_contract_checkis set (#4148) - fix[stdlib]!: fix
IERC4626signatures (#4425) - fix[lang]!: disallow absolute relative imports (#4268)
Other new features and improvements
- feat[lang]: add
module.__at__()to cast to interface (#4090) - feat[lang]: use keyword arguments for event instantiation (#4257)
- feat[lang]: add native hex string literals (#4271)
- feat[lang]: introduce
manaas an alias forgas(#3713) - feat[lang]: support top level
"abi"key in json interfaces (#4279) - feat[lang]: support flags from imported interfaces (#4253)
- feat[ux]: allow "compiling"
.vyifiles (#4290) - feat[ux]: improve hint for events kwarg upgrade (#4275)
Tooling / CLI
- feat[tool]: add
-Werrorand-Wnoneoptions (#4447) - feat[tool]: support storage layouts via
jsonand.vyzinputs (#4370) - feat[tool]: add integrity hash to initcode (#4234)
- fix[ci]: fix commithash calculation for pypi release (#4309)
- fix[tool]: include structs in
-f interfaceoutput (#4294) - feat[tool]: separate import resolution pass (#4229)
- feat[tool]: add all imported modules to
-f annotated_astoutput (#4209) - fix[tool]: add missing internal functions to metadata (#4328)
- fix[tool]: update VarAccess pickle implementation (#4270)
- fix[tool]: fix output formats for .vyz files (#4338)
- fix[tool]: add missing user errors to error map (#4286)
- fix[ci]: fix README encoding in
setup.py(#4348) - refactor[tool]: refactor
compile_from_zip()(#4366)
Bugfixes
- fix[lang]: add
raw_log()constancy check (#4201) - fix[lang]: use folded node for typechecking (#4365)
- fix[ux]: fix error message for "staticall" typo (#4438)
- fix[lang]: fix certain varinfo comparisons (#4164)
- fix[codegen]: fix
abi_encodebuffer size in external calls (#4202) - fix[lang]: fix
==and!=bytesM folding (#4254) - fix[lang]: fix
.vyifunction body check (#4177) - fix[venom]: invalid jump error (#4214)
- fix[lang]: fix precedence in floordiv hint (#4203)
- fix[lang]: define rounding mode for sqrt (#4486)
- fix[codegen]: disable augassign with overlap (#4487)
- fix[codegen]: relax the filter for augassign oob check (#4497)
- fix[lang]: fix panic in call cycle detection (#4200)
- fix[tool]: update
InterfaceT.__str__implementation (#4205) - fix[tool]: fix classification of AST nodes (#4210)
- fix[tool]: keep
experimentalCodegenblank in standard json input (#4216) - fix[ux]: fix relpath compiler panic on windows (#4228)
- fix[ux]: fix empty hints in error messages (#4351)
- fix[ux]: fix validation for
abi_encode()method_idkwarg (#4369) - fix[ux]: fix false positive for overflow in type checker (#4385)
- fix[ux]: add missing filename to syntax exceptions (#4343)
- fix[ux]: improve error message on failed imports (#4409)
- fix[parser]: fix bad tokenization of hex strings (#4406)
- fix[lang]: fix encoding of string literals (#3091)
- fix[codegen]: fix assertions for certain precompiles (#4451)
- fix[lang]: allow
print()schema larger than 32 bytes (#4456) - fix[codegen]: fix iteration over constant literals (#4462)
- fix[codegen]: fix gas usage of iterators (#4485)
- fix[codegen]: cache result of iter eval (#4488)
- fix[lang]: fix recursive interface imports (#4303)
- fix[tool]: roll back OS used to build binaries (#4494)
Patched security advisories (GHSAs)
- success of certain precompiles not checked (GHSA-vgf2-gvx8-xwc3
- AugAssign evaluation order causing OOB write within object (GHSA-4w26-8p97-f4jp
sqrtdoesn't define rounding behavior (GHSA-2p94-8669-xg86- multiple eval in
forlist iterator (GHSA-h33q-mhmp-8p67
Venom improvements
- feat[venom]: add venom parser (#4381)
- feat[venom]: new
DFTPassalgorithm (#4255) - feat[venom]: only
stack_reorderbefore join points (#4247) - feat[venom]: add function inliner (#4478)
- feat[venom]: add binop optimizations (#4281)
- feat[venom]: offset instruction (#4180)
- feat[venom]: make dft-pass commutative aware (#4358)
- perf[venom]: add
OrderedSet.last()(#4236) - feat[venom]: improve liveness computation time (#4086)
- fix[venom]: fix invalid
phis after SCCP (#4181) - fix[venom]: clean up sccp pass (#4261)
- refactor[venom]: remove
dup_requirementsanalysis (#4262) - fix[venom]: remove duplicate volatile instructions (#4263)
- fix[venom]: fix
_stack_reorder()routine (#4220) - feat[venom]: store expansion pass (#4068)
- feat[venom]: add effects to instructions (#4264)
- feat[venom]: add small heuristic for cleaning input stack (#4251)
- refactor[venom]: refactor module structure (#4295)
- refactor[venom]: refactor sccp pass to use dfg (#4329)
- refactor[venom]: update translator for
deployinstruction (#4318) - feat[venom]: make cfg scheduler "stack aware" (#4356)
- feat[venom]: improve liveness computation (#4330)
- refactor[venom]: optimize lattice evaluation (#4368)
- perf[venom]: improve OrderedSet operations (#4246)
- fix[venom]: promote additional memory locations to variables (#4039)
- feat[venom]: add codesize optimization pass (#4333)
- fix[venom]: fix unused variables pass (#4259)
- refactor[venom]: move commutative instruction set (#4307)
- fix[venom]: add
make_ssapass after algebraic optimizations (#4292) - feat[venom]: reduce legacy opts when venom is enabled (#4336)
- fix[venom]: fix duplicate allocas (#4321)
- fix[venom]: add missing extcodesize+hash effects (#4373)
- refactor[ux]: add
venoma...
v0.4.1rc3
What's Changed
- fix[codegen]: fix gas usage of iterators by @charles-cooper in #4485
- fix[codegen]: cache result of iter eval by @charles-cooper in #4488
- fix[lang]: define rounding mode for sqrt by @charles-cooper in #4486
- fix[codegen]: disable augassign with overlap by @charles-cooper in #4487
- fix[tool]: roll back OS used to build binaries by @charles-cooper in #4494
Full Changelog: v0.4.1rc2...v0.4.1rc3
v0.4.1rc2
What's Changed
- chore[ci]: improve coverage jobs by @tserg in #4457
- chore[tool]: mention that output format is comma separated by @antazoey in #4467
- chore[docs]: add giveth to
FUNDING.ymlby @benber86 in #4466 - refactor[venom]: add
make_nop()helper function by @harkal in #4470 - feat[test]: add hevm harness for venom passes by @charles-cooper in #4460
- chore[ci]: update ubuntu image for
buildjob by @charles-cooper in #4473 - feat[venom]: improve load elimination by @charles-cooper in #4407
- feat[ux]: improve hint for events kwarg upgrade by @charles-cooper in #4275
- refactor[venom]: replace
bb.mark_for_removalwithmake_nopby @charles-cooper in #4474 - fix[lang]: allow
print()schema larger than 32 bytes by @charles-cooper in #4456 - fix[codegen]: fix iteration over constant literals by @charles-cooper in #4462
- feat[venom]: add function inliner by @harkal in #4478
- feat[tool]: add
-Werrorand-Wnoneoptions by @charles-cooper in #4447
Full Changelog: v0.4.1rc1...v0.4.1rc2
v0.4.1rc1
What's Changed
- fix[ux]: fix error message for "staticall" typo by @charles-cooper in #4438
- fix[parser]: fix bad tokenization of hex strings by @charles-cooper in #4406
- chore[ci]: update codecov github action to v5 by @charles-cooper in #4437
- refactor[lang]: remove VyperNode
__hash__()and__eq__()implementations by @charles-cooper in #4433 - fix[lang]: fix encoding of string literals by @charles-cooper in #3091
- chore[ci]: bump upload-artifact action to v4 by @tserg in #4445
- refactor[parser]: remove
ASTTokensby @charles-cooper in #4364 - chore[docs]: update readme about testing by @charles-cooper in #4448
- feat[ci]: use
coverage combineto reduce codecov uploads by @tserg in #4452 - fix[codegen]: fix assertions for certain precompiles by @charles-cooper in #4451
- feat[venom]: add binop optimizations by @HodanPlodky in #4281
- chore[ci]: separate codecov upload into separate job by @charles-cooper in #4455
Full Changelog: v0.4.1b4...v0.4.1rc1
v0.4.1b4
What's Changed
- refactor[venom]: add new venom test machinery by @charles-cooper in #4401
- feat[venom]: allow alphanumeric variables and source comments by @harkal in #4403
- fix[lang]: disallow absolute relative imports by @sandbubbles in #4268
- fix[tool]: add missing internal functions to metadata by @sandbubbles in #4328
- feat[venom]: cleanup variable version handling by @harkal in #4404
- feat[venom]: merge memory writes by @HodanPlodky in #4341
- refactor[codegen]: add profiling utils by @charles-cooper in #4412
- refactor[venom]: make venom repr parseable by @charles-cooper in #4402
- feat[venom]: propagate
dloadinstruction to venom by @charles-cooper in #4410 - feat[venom]: remove special cases in store elimination by @charles-cooper in #4413
- feat[venom]: add codesize optimization pass by @charles-cooper in #4333
- feat[venom]: update text format for data section by @charles-cooper in #4414
- feat[venom]: add load elimination pass by @charles-cooper in #4265
- fix[venom]: fix
MakeSSAwith existing phis by @harkal in #4423 - refactor[venom]: refactor mem2var by @charles-cooper in #4421
- feat[ux]: allow "compiling"
.vyifiles by @sandbubbles in #4290 - fix[stdlib]: fix
IERC4626signatures by @charles-cooper in #4425 - fix[venom]: fix store elimination pass by @charles-cooper in #4428
- fix[tool]: fix output formats for .vyz files by @charles-cooper in #4338
- chore[docs]:
nonpayableinternalfunction behaviour by @pcaversaccio in #4416 - chore[docs]: abi function signature for default arguments by @pcaversaccio in #4415
- feat[tool]: support storage layouts via
jsonand.vyzinputs by @tserg in #4370 - fix[ux]: improve error message on failed imports by @sandbubbles in #4409
Full Changelog: v0.4.1b3...v0.4.1b4
v0.4.1b3
What's Changed
- fix[venom]: fix duplicate allocas by @charles-cooper in #4321
- fix[venom]: add missing extcodesize+hash effects by @charles-cooper in #4373
- chore[ci]: enable Python
3.13tests by @pcaversaccio in #4386 - fix[ux]: fix validation for
abi_encode()method_idkwarg by @charles-cooper in #4369 - fix[ux]: fix false positive for overflow in type checker by @tserg in #4385
- fix[tool]: add missing user errors to error map by @sandbubbles in #4286
- fix[ux]: add missing filename to syntax exceptions by @sandbubbles in #4343
- feat[venom]: add venom parser by @Philogy in #4381
New Contributors
Full Changelog: v0.4.1b2...v0.4.1b3