CARVIEW |
Navigation Menu
-
-
Notifications
You must be signed in to change notification settings - Fork 850
Releases: vyperlang/vyper
v0.4.3 ("Buttermilk Racer")
bff19ea
Compare
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
Assets 5
v0.4.3rc1
a35bfd5
Compare
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_return
decorator by @charles-cooper in #4568 - fix[docs]: fix build status in README.md by @gap-editor in #4680
- refactor[test]: rename venom
param
instruction in tests by @charles-cooper in #4689 - fix[lang]: disallow
@raw_return
in 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
clone
function by @charles-cooper in #4696 - fix[venom]: fix incorrect write reordering in
DFTPass
by @charles-cooper in #4695 - feat[docs]: add docs for
@raw_return
decorator by @charles-cooper in #4699 - fix[tool]: fix invalid quotes in
-f cfg
output by @crebsy in #4672 - fix[docs]: clarify
n_slots
requirement in custom layout file by @crypdoughdoteth in #4641 - feat[tool]!: make
prague
the 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
Assets 5
v0.4.2 ("Lernaean Hydra")
c216787
Compare
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
Assets 5
v0.4.2rc1
11522b8
Compare
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
MakeSSA
by @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_check
docs 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
jnz
by @charles-cooper in #4505 - feat[test]: add hevm to
get_contract
harness by @charles-cooper in #4499 - refactor[venom]: use
InstUpdater
in 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
calloca
instruction 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_value
to all numeric types by @trocher in #3498 - feat[venom]: make
revert
a 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
SimplifyCFG
pass by @charles-cooper in #4528 - feat[lang]: add
raw_create()
builtin by @charles-cooper in #4204 - fix[ux]: fold
keccak
andsha256
of 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
@external
decorator 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
bytesM
types by @charles-cooper in #4538 - chore[docs]: remove dead link from internal documentation by @iamslown in #4543
- refactor[venom]: update more passes to use
InstUpdater
by @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_setter
by @charles-cooper in #4419 - feat[lang]!: move sqrt to new stdlib
math
module by @cyberthirst in #4520 - fix[lang]!: ban calling nonreentrant functions from nonreentrant functions by @charles-cooper in #4574
- fix[lang]: disallow some builtins in
pure
functions 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
sha3
andimportlib_metadata
imports by @charles-cooper in #4588 - chore[tool]: widen version bounds for
packaging
by @charles-cooper in #4590 - feat[venom]: add memory SSA analysis by @harkal in #4555
- chore[tool]: widen version bounds for
asttokens
by @Romain-Geissler-1A in #4592 - feat[venom]: add common subexpression elimination by @HodanPlodky in #4241
- fix[venom]: fix
.name
invalidation inMakeSSA
by @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_assembly
by @charles-cooper in #4587 - refactor[test]: remove
selfdestruct
from example contracts by @cyberthirst in #4537 - refactor[venom]: extract liveness and cfg data structures by @charles-cooper in #4595
- feat[venom]: improve
dload
/mstore
merging 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
log
by @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.sqrt
implementation 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
Assets 5
v0.4.1 ("Tokara Habu")
8a93dd2
Compare
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
@external
modifier optional in.vyi
files (#4178) - feat[codegen]!: check
returndatasize
even whenskip_contract_check
is set (#4148) - fix[stdlib]!: fix
IERC4626
signatures (#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
mana
as 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"
.vyi
files (#4290) - feat[ux]: improve hint for events kwarg upgrade (#4275)
Tooling / CLI
- feat[tool]: add
-Werror
and-Wnone
options (#4447) - feat[tool]: support storage layouts via
json
and.vyz
inputs (#4370) - feat[tool]: add integrity hash to initcode (#4234)
- fix[ci]: fix commithash calculation for pypi release (#4309)
- fix[tool]: include structs in
-f interface
output (#4294) - feat[tool]: separate import resolution pass (#4229)
- feat[tool]: add all imported modules to
-f annotated_ast
output (#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_encode
buffer size in external calls (#4202) - fix[lang]: fix
==
and!=
bytesM folding (#4254) - fix[lang]: fix
.vyi
function 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
experimentalCodegen
blank 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_id
kwarg (#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
sqrt
doesn't define rounding behavior (GHSA-2p94-8669-xg86- multiple eval in
for
list iterator (GHSA-h33q-mhmp-8p67
Venom improvements
- feat[venom]: add venom parser (#4381)
- feat[venom]: new
DFTPass
algorithm (#4255) - feat[venom]: only
stack_reorder
before 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
phi
s after SCCP (#4181) - fix[venom]: clean up sccp pass (#4261)
- refactor[venom]: remove
dup_requirements
analysis (#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
deploy
instruction (#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_ssa
pass 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
venom
a...
Assets 5
v0.4.1rc3
1339177
Compare
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
Assets 5
v0.4.1rc2
305813c
Compare
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.yml
by @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
build
job 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_removal
withmake_nop
by @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
-Werror
and-Wnone
options by @charles-cooper in #4447
Full Changelog: v0.4.1rc1...v0.4.1rc2
Assets 5
v0.4.1rc1
4d693b7
Compare
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
ASTTokens
by @charles-cooper in #4364 - chore[docs]: update readme about testing by @charles-cooper in #4448
- feat[ci]: use
coverage combine
to 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
Assets 5
v0.4.1b4
4507d2a
Compare
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
dload
instruction 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
MakeSSA
with existing phis by @harkal in #4423 - refactor[venom]: refactor mem2var by @charles-cooper in #4421
- feat[ux]: allow "compiling"
.vyi
files by @sandbubbles in #4290 - fix[stdlib]: fix
IERC4626
signatures 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]:
nonpayable
internal
function behaviour by @pcaversaccio in #4416 - chore[docs]: abi function signature for default arguments by @pcaversaccio in #4415
- feat[tool]: support storage layouts via
json
and.vyz
inputs by @tserg in #4370 - fix[ux]: improve error message on failed imports by @sandbubbles in #4409
Full Changelog: v0.4.1b3...v0.4.1b4
Assets 5
v0.4.1b3
537313b
Compare
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.13
tests by @pcaversaccio in #4386 - fix[ux]: fix validation for
abi_encode()
method_id
kwarg 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