Release Notes¶
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)
- Add support for EIP-1344, Chain ID Opcode (VIP #1652)
- Support for EIP-1052,
EXTCODEHASH
(VIP #1765)
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)
- Changed opcode costs per EIP-1884 (#1764)
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)
- Improvements for Windows users (#1486) (#1488)
- Array copy optimisation (#1487)
- Fixing
@nonreentrant
decorator for return statements (#1532) sha3
builtin function removed (#1328)- Disallow conflicting method IDs (#1530)
- Additional
convert()
supported types (#1524) (#1500) - 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 loops - 2017.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