Release Notes¶
v0.3.2¶
Date released: 2022-04-17
Breaking changes:
Increase the bounds of the
decimal
type (#2730)Generalize and simplify the semantics of the
convert
builtin (#2694)
Non-breaking changes and improvements:
Support all ABIv2 integer and bytes types (#2705)
Add storage layout override mechanism (#2593)
Support
<address>.code
attribute (#2583)Add
tx.gasprice
builtin (#2624)Allow structs as constant variables (#2617)
Implement
skip_contract_check
kwarg (#2551)Support EIP-2678 ethPM manifest files (#2628)
Add
metadata
output format (#2597)Allow
msg.*
variables in internal functions (#2632)Add
unsafe_
arithmetic builtins (#2629)Add subroutines to Vyper IR (#2598)
Add
select
opcode to Vyper IR (#2690)Allow lists of any type as loop variables (#2616)
Improve suggestions in error messages (#2806)
Notable Fixes:
Clamping of returndata from external calls in complex expressions (GHSA-4mrx-6fxm-8jpg, GHSA-j2x6-9323-fp7h)
Bytestring equality for (N<=32) (GHSA-7vrm-3jc8-5wwm)
Referencing immutables in constructor (#2627)
Arrays of interfaces in for loops (#2699)
Lots of optimizations, refactoring and other fixes made it into this release! For the full list, please see the changelog.
Special thanks to @tserg for typechecker fixes and significant testing of new features! Additional contributors to this release include @abdullathedruid, @hi-ogawa, @skellet0r, @fubuloubu, @onlymaresia, @SwapOperator, @hitsuzen-eth, @Sud0u53r, @davidhq.
v0.3.1¶
Date released: 2021-12-01
Breaking changes:
Disallow changes to decimal precision when used as a library (#2479)
Non-breaking changes and improvements:
Add immutable variables (#2466)
Add uint8 type (#2477)
Add gaslimit and basefee env variables (#2495)
Enable checkable raw_call (#2482)
Propagate revert data when external call fails (#2531)
Improve LLL annotations (#2486)
Optimize identity precompile usage (#2488)
Remove loaded limits for int128 and address (#2506)
Add machine readable ir_json format (#2510)
Optimize raw_call for the common case when the input is in memory (#2481)
Remove experimental OVM transpiler (#2532)
Add CLI flag to disable optimizer (#2522)
Add docs for LLL syntax and semantics (#2494)
Fixes:
Allow non-constant revert reason strings (#2509)
Allow slices of complex expressions (#2500)
Remove seq_unchecked from LLL codegen (#2485)
Fix external calls with default parameters (#2526)
Enable lists of structs as function arguments (#2515)
Fix .balance on constant addresses (#2533)
Allow variable indexing into constant/literal arrays (#2534)
Special thanks to @skellet0r for some major features in this release!
v0.3.0¶
Date released: 2021-10-04
Breaking changes:
Change ABI encoding of single-struct return values to be compatible with Solidity (#2457)
Drop Python 3.6 support (#2462)
Non-breaking changes and improvements:
Rewrite internal calling convention (#2447)
Allow any ABI-encodable type as function arguments and return types (#2154, #2190)
Add support for deterministic deployment of minimal proxies using CREATE2 (#2460)
Optimize code for certain copies (#2468)
Add -o CLI flag to redirect output to a file (#2452)
Other docs updates (#2450)
Fixes:
_abi_encode builtin evaluates arguments multiple times (#2459)
ABI length is too short for nested tuples (#2458)
Returndata is not clamped for certain numeric types (#2454)
__default__ functions do not respect nonreentrancy keys (#2455)
Clamps for bytestrings in initcode are broken (#2456)
Missing clamps for decimal args in external functions (GHSA-c7pr-343r-5c46)
Memory corruption when returning a literal struct with a private function call inside of it (GHSA-xv8x-pr4h-73jv)
Special thanks to contributions from @skellet0r and @benjyz for this release!
v0.2.16¶
Date released: 2021-08-27
Non-breaking changes and improvements:
Expose _abi_encode as a user-facing builtin (#2401)
Export the storage layout as a compiler output option (#2433)
Add experimental OVM backend (#2416)
Allow any ABI-encodable type as event arguments (#2403)
Optimize int128 clamping (#2411)
Fixes:
Disallow nonreentrant decorator on constructors (#2426)
Fix bounds checks when handling msg.data (#2419)
Allow interfaces in lists, structs and maps (#2397)
Fix trailing newline parse bug (#2412)
Special thanks to contributions from @skellet0r, @sambacha and @milancermak for this release!
v0.2.15¶
Date released: 23-07-2021
Non-breaking changes and improvements - Optimization when returning nested tuples (#2392)
Fixes: - Annotated kwargs for builtins (#2389) - Storage slot allocation bug (#2391)
v0.2.14¶
Date released: 20-07-2021
Non-breaking changes and improvements: - Reduce bytecode by sharing code for clamps (#2387)
Fixes: - Storage corruption from re-entrancy locks (#2379)
v0.2.13¶
THIS RELEASE HAS BEEN PULLED
Date released: 06-07-2021
Non-breaking changes and improvements:
v0.2.12¶
Date released: 16-04-2021
This release fixes a memory corruption bug (#2345) that was introduced in the v0.2.x series and was not fixed in VVE-2020-0004. Read about it further in VVE-2021-0001.
Non-breaking changes and improvements:
v0.2.11¶
Date released: 27-02-2021
This is a quick patch release to fix a memory corruption bug that was introduced in v0.2.9 (#2321) with excessive memory deallocation when releasing internal variables
v0.2.10¶
THIS RELEASE HAS BEEN PULLED
Date released: 17-02-2021
This is a quick patch release to fix incorrect generated ABIs that was introduced in v0.2.9 (#2311) where storage variable getters were incorrectly marked as nonpayable
instead of view
v0.2.9¶
THIS RELEASE HAS BEEN PULLED
Date released: 16-02-2021
Non-breaking changes and improvements: - Add license to wheel, Anaconda support (#2265) - Consider events during type-check with implements: (#2283) - Refactor ABI generation (#2284) - Remove redundant checks in parser/signatures (#2288) - Streamling ABI-encoding logic for tuple return types (#2302) - Optimize function ordering within bytecode (#2303) - Assembly-level optimizations (#2304) - Optimize nonpayable assertion (#2307) - Optimize re-entrancy locks (#2308)
Fixes: - Change forwarder proxy bytecode to ERC-1167 (#2281) - Reserved keywords check update (#2286) - Incorrect type-check error in literal lists (#2309)
Tons of Refactoring work courtesy of (@iamdefinitelyahuman)!
v0.2.8¶
Date released: 04-12-2020
Non-breaking changes and improvements:
AST updates to provide preliminary support for Python 3.9 (#2225)
Support for the
not in
comparator (#2232)Lift restriction on calldata variables shadowing storage variables (#2226)
Optimize
shift
bytecode when 2nd arg is a literal (#2201)Warn when EIP-170 size limit is exceeded (#2208)
Fixes:
Allow use of
slice
on a calldatabytes32
(#2227)Explicitly disallow iteration of a list of structs (#2228)
Improved validation of address checksums (#2229)
Bytes are always represented as hex within the AST (#2231)
Allow
empty
as an argument within a function call (#2234)Allow
empty
static-sized array as an argument within alog
statement (#2235)Compile-time issue with
Bytes
variables as a key in a mapping (#2239)
v0.2.7¶
Date released: 10-14-2020
This is a quick patch release to fix a runtime error introduced in v0.2.6
(#2188) that could allow for memory corruption under certain conditions.
Non-breaking changes and improvements:
Optimizations around
assert
andraise
(#2198)Simplified internal handling of memory variables (#2194)
Fixes:
v0.2.6¶
Date released: 10-10-2020
Non-breaking changes and improvements:
Release and reuse memory slots within the same function (#2188)
Allow implicit use of
uint256
as iterator type in range-based for loops (#2180)Optimize clamping logic for
int128
(#2179)Calculate array index offsets at compile time where possible (#2187)
Improved exception for invalid use of dynamically sized struct (#2189)
Improved exception for incorrect arg count in function call (#2178)
Improved exception for invalid subscript (#2177)
Fixes:
v0.2.5¶
Date released: 30-09-2020
Non-breaking changes and improvements:
Improve exception on incorrect interface (#2131)
Standalone binary preparation (#2134)
Improve make freeze (#2135)
Remove Excessive Scoping Rules on Local Variables (#2166)
Optimize nonpayable check for contracts that do not accept ETH (#2172)
Optimize safemath on division-by-zero with a literal divisor (#2173)
Optimize multiple sequential memory-zeroings (#2174)
Optimize size-limit checks for address and bool types (#2175)
Fixes:
Constant folding on lhs of assignments (#2137)
ABI issue with bytes and string arrays inside tuples (#2140)
Returning struct from a external function gives error (#2143)
Error messages with struct display all members (#2160)
The returned struct value from the external call doesn’t get stored properly (#2164)
Improved exception on invalid function-scoped assignment (#2176)
v0.2.4¶
Date released: 03-08-2020
Non-breaking changes and improvements:
Improve EOF Exceptions (#2115)
Improve exception messaging for type mismatches (#2119)
Ignore trailing newline tokens (#2120)
Fixes:
v0.2.3¶
Date released: 16-07-2020
Non-breaking changes and improvements:
Show contract names in raised exceptions (#2103)
Adjust function offsets to not include decorators (#2102)
Raise certain exception types immediately during module-scoped type checking (#2101)
Fixes:
v0.2.1¶
Date released: 03-07-2020
This is a major breaking release of the Vyper compiler and language. It is also the first release following our versioning scheme (#1887).
Breaking changes:
@public
and@private
function decorators have been renamed to@external
and@internal
(VIP #2065)The
@constant
decorator has been renamed to@view
(VIP #2040)Type units have been removed (VIP #1881)
Event declaraion syntax now resembles that of struct declarations (VIP #1864)
log
is now a statement (VIP #1864)Mapping declaration syntax changed to
HashMap[key_type, value_type]
(VIP #1969)Interfaces are now declared via the
interface
keyword instead ofcontract
(VIP #1825)bytes
andstring
types are now written asBytes
andString
(#2080)bytes
andstring
literals must now be bytes or regular strings, respectively. They are no longer interchangeable. (VIP #1876)assert_modifiable
has been removed, you can now directly perform assertions on calls (#2050)value
is no longer an allowable variable name in a function input (VIP #1877)The
slice
builtin function expectsuint256
for thestart
andlength
args (VIP #1986)len
return type is nowuint256
(VIP #1979)value
andgas
kwargs for external function calls must be given asuint256
(VIP #1878)The
outsize
kwarg inraw_call
has been renamed tomax_outsize
(#1977)The
type
kwarg inextract32
has been renamed tooutput_type
(#2036)Public array getters now use
uint256
for their input argument(s) (VIP #1983)Public struct getters now return all values of a struct (#2064)
RLPList
has been removed (VIP #1866)
The following non-breaking VIPs and features were implemented:
Implement boolean condition short circuiting (VIP #1817)
Add the
empty
builtin function for zero-ing a value (#1676)Refactor of the compiler process resulting in an almost 5x performance boost! (#1962)
Support ABI State Mutability Fields in Interface Definitions (VIP #2042)
Support
@pure
decorator (VIP #2041)Overflow checks for exponentiation (#2072)
Validate return data length via
RETURNDATASIZE
(#2076)Improved constant folding (#1949)
Allow raise without reason string (VIP #1902)
Make the type argument in
method_id
optional (VIP #1980)Hash complex types when used as indexed values in an event (#2060)
Ease restrictions on calls to self (#2059)
Remove ordering restrictions in module-scope of contract (#2057)
raw_call
can now be used to perform aSTATICCALL
(#1973)Optimize precompiles to use
STATICCALL
(#1930)
Some of the bug and stability fixes:
Arg clamping issue when using multidimensional arrays (#2071)
Support calldata arrays with the
in
comparator (#2070)Prevent modification of a storage array during iteration via
for
loop (#2028)Fix memory length of revert string (#1982)
Memory offset issue when returning tuples from private functions (#1968)
Issue with arrays as default function arguments (#2077)
Private function calls no longer generate a call signature (#2058)
Significant codebase refactor, thanks to (@iamdefinitelyahuman)!
NOTE: v0.2.0
was not used due to a conflict in PyPI with a previous release. Both tags v0.2.0
and v0.2.1
are identical.
v0.1.0-beta.17¶
Date released: 24-03-2020
The following VIPs and features were implemented for Beta 17:
Some of the bug and stability fixes:
ABI interface fixes (#1842)
Modifications to how ABI data types are represented (#1846)
Generate method identifier for struct return type (#1843)
Return tuple with fixed array fails to compile (#1838)
Also lots of refactoring and doc updates!
This release will be the last to follow our current release process. All future releases will be governed by the versioning scheme (#1887). The next release will be v0.2.0, and contain many breaking changes.
v0.1.0-beta.16¶
Date released: 09-01-2020
Beta 16 was a quick patch release to fix one issue: (#1829)
v0.1.0-beta.15¶
Date released: 06-01-2020
NOTE: we changed our license to Apache 2.0 (#1772)
The following VIPs were implemented for Beta 15:
EVM Ruleset Switch (VIP #1230)
Some of the bug and stability fixes:
Removed all traces of Javascript from the codebase (#1770)
Ensured sufficient gas stipend for precompiled calls (#1771)
Allow importing an interface that contains an
implements
statement (#1774)Fixed how certain values compared when using
min
andmax
(#1790)Removed unnecessary overflow checks on
addmod
andmulmod
(#1786)Check for state modification when using tuples (#1785)
Fix Windows path issue when importing interfaces (#1781)
Added Vyper grammar, currently used for fuzzing (#1768)
Modify modulus calculations for literals to be consistent with the EVM (#1792)
Explicitly disallow the use of exponentiation on decimal values (#1792)
Add compile-time checks for divide by zero and modulo by zero (#1792)
Fixed some issues with negating constants (#1791)
Allow relative imports beyond one parent level (#1784)
Implement SHL/SHR for bitshifting, using Constantinople rules (#1796)
vyper-json
compatibility withsolc
settings (#1795)Simplify the type check when returning lists (#1797)
Add branch coverage reporting (#1743)
Fix struct assignment order (#1728)
Added more words to reserved keyword list (#1741)
Allow scientific notation for literals (#1721)
Avoid overflow on sqrt of Decimal upper bound (#1679)
Refactor ABI encoder (#1723)
Special thanks to (@iamdefinitelyahuman) for lots of updates this release!
v0.1.0-beta.14¶
Date released: 13-11-2019
Some of the bug and stability fixes:
Mucho Documentation and Example cleanup!
Python 3.8 support (#1678)
Disallow scientific notation in literals, which previously parsed incorrectly (#1681)
Add implicit rewrite rule for
bytes[32]
->bytes32
(#1718)Support
bytes32
inraw_log
(#1719)Fixed EOF parsing bug (#1720)
Cleaned up arithmetic expressions (#1661)
Fixed off-by-one in check for homogeneous list element types (#1673)
Fixed stack valency issues in if and for statements (#1665)
Prevent overflow when using
sqrt
on certain datatypes (#1679)Prevent shadowing of internal variables (#1601)
Reject unary substraction on unsigned types (#1638)
Disallow
orelse
syntax infor
loops (#1633)Increased clarity and efficiency of zero-padding (#1605)
v0.1.0-beta.13¶
Date released: 27-09-2019
The following VIPs were implemented for Beta 13:
Add
vyper-json
compilation mode (VIP #1520)Environment variables and constants can now be used as default parameters (VIP #1525)
Require unitialized memory be set on creation (VIP #1493)
Some of the bug and stability fixes:
v0.1.0-beta.12¶
Date released: 27-08-2019
The following VIPs were implemented for Beta 12:
Support for relative imports (VIP #1367)
Restricted use of environment variables in private functions (VIP #1199)
Some of the bug and stability fixes:
@nonreentrant
/@constant
logical inconsistency (#1544)Struct passthrough issue (#1551)
Private underflow issue (#1470)
Constancy check issue (#1480)
Prevent use of conflicting method IDs (#1530)
Missing arg check for private functions (#1579)
Zero padding issue (#1563)
vyper.cli
rearchitecture of scripts (#1574)AST end offsets and Solidity-compatible compressed sourcemap (#1580)
Special thanks to (@iamdefinitelyahuman) for lots of updates this release!
v0.1.0-beta.11¶
Date released: 23-07-2019
Beta 11 brings some performance and stability fixes.
Using calldata instead of memory parameters. (#1499)
Reducing of contract size, for large parameter functions. (#1486)
Array copy optimisation (#1487)
Fixing
@nonreentrant
decorator for return statements (#1532)sha3
builtin function removed (#1328)Disallow conflicting method IDs (#1530)
Equality operator for strings and bytes (#1507)
Change in
compile_codes
interface function (#1504)
Thanks to all the contributors!
v0.1.0-beta.10¶
Date released: 24-05-2019
Lots of linting and refactoring!
Bugfix with regards to using arrays as parameters to private functions (#1418). Please check your contracts, and upgrade to latest version, if you do use this.
Slight shrinking in init produced bytecode. (#1399)
Additional constancy protection in the
for .. range
expression. (#1397)Improved bug report (#1394)
Fix returning of External Contract from functions (#1376)
Interface unit fix (#1303)
Not Equal (!=) optimisation (#1303) 1386
New
assert <condition>, UNREACHABLE
statement. (#711)
Special thanks to (Charles Cooper), for some excellent contributions this release.
v0.1.0-beta.9¶
Date released: 12-03-2019
Prior to v0.1.0-beta.9¶
Prior to this release, we managed our change log in a different fashion. Here is the old changelog:
2019.04.05: Add stricter checking of unbalanced return statements. (#590)
2019.03.04:
create_with_code_of
has been renamed tocreate_forwarder_to
. (#1177)2019.02.14: Assigning a persistent contract address can only be done using the
bar_contact = ERC20(<address>)
syntax.2019.02.12: ERC20 interface has to be imported using
from vyper.interfaces import ERC20
to use.2019.01.30: Byte array literals need to be annoted using
b""
, strings are represented as “”.2018.12.12: Disallow use of
None
, disallow use ofdel
, implementedclear()
built-in function.2018.11.19: Change mapping syntax to use
map()
. (VIP564)2018.10.02: Change the convert style to use types instead of string. (VIP1026)
2018.09.24: Add support for custom constants.
2018.08.09: Add support for default parameters.
2018.06.08: Tagged first beta.
2018.05.23: Changed
wei_value
to beuint256
.2018.04.03: Changed bytes declaration from
bytes <= n
tobytes[n]
.2018.03.27: Renaming
signed256
toint256
.2018.03.22: Add modifiable and static keywords for external contract calls.
2018.03.20: Renaming
__log__
toevent
.2018.02.22: Renaming num to int128, and num256 to uint256.
2018.02.13: Ban functions with payable and constant decorators.
2018.02.12: Division by num returns decimal type.
2018.02.09: Standardize type conversions.
2018.02.01: Functions cannot have the same name as globals.
2018.01.27: Change getter from get_var to var.
2018.01.11: Change version from 0.0.2 to 0.0.3
2018.01.04: Types need to be specified on assignment (VIP545).
2017.01.02 Change
as_wei_value
to use quotes for units.2017.12.25: Change name from Viper to Vyper.
2017.12.22: Add
continue
for loops2017.11.29:
@internal
renamed to@private
.2017.11.15: Functions require either
@internal
or@public
decorators.2017.07.25: The
def foo() -> num(const): ...
syntax no longer works; you now need to dodef foo() -> num: ...
with a@constant
decorator on the previous line.2017.07.25: Functions without a
@payable
decorator now fail when called with nonzero wei.2017.07.25: A function can only call functions that are declared above it (that is, A can call B only if B appears earlier in the code than A does). This was introduced