From eeb1f4812a1d9f59b16b969e87d36e1477da34f0 Mon Sep 17 00:00:00 2001 From: Grant Wuerker Date: Wed, 28 Apr 2021 19:12:29 -0600 Subject: [PATCH] Compile release notes --- docs/release_notes.md | 119 ++++++++++++++++++++++++++++++++++ newsfragments/211.bugfix.md | 1 - newsfragments/288.feature.md | 17 ----- newsfragments/331.bugfix.md | 1 - newsfragments/332.internal.md | 1 - newsfragments/335.bugfix.md | 1 - newsfragments/338.feature.md | 50 -------------- newsfragments/342.internal.md | 2 - newsfragments/346.feature.md | 2 - newsfragments/347.internal.md | 1 - newsfragments/352.feature.md | 13 ---- newsfragments/362.bugfix.md | 12 ---- 12 files changed, 119 insertions(+), 101 deletions(-) delete mode 100644 newsfragments/211.bugfix.md delete mode 100644 newsfragments/288.feature.md delete mode 100644 newsfragments/331.bugfix.md delete mode 100644 newsfragments/332.internal.md delete mode 100644 newsfragments/335.bugfix.md delete mode 100644 newsfragments/338.feature.md delete mode 100644 newsfragments/342.internal.md delete mode 100644 newsfragments/346.feature.md delete mode 100644 newsfragments/347.internal.md delete mode 100644 newsfragments/352.feature.md delete mode 100644 newsfragments/362.bugfix.md diff --git a/docs/release_notes.md b/docs/release_notes.md index fe53760876..7d0e1bafd3 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -11,6 +11,125 @@ Fe is moving fast. Read up on all the latest improvements. **WARNING: All Fe releases are alpha releases and only meant to share the development progress with developers and enthusiasts. It is NOT yet ready for production usage.** [//]: # (towncrier release notes start) +## 0.4.0-alpha (2021-04-28)## 0.4.0-alpha (2021-04-28) + + +### Features + + +- Support for revert messages in assert statements + + E.g + + ``` + assert a == b, "my revert statement" + ``` + + The provided string is abi-encoded as if it were a call + to a function `Error(string)`. For example, the revert string `"Not enough Ether provided."` returns the following hexadecimal as error return data: + + ``` + 0x08c379a0 // Function selector for Error(string) + 0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset + 0x000000000000000000000000000000000000000000000000000000000000001a // String length + 0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data + ``` ([#288](https://github.com/ethereum/fe/issues/288)) +- Added support for augmented assignments. + + e.g. + + ``` + contract Foo: + pub def add(a: u256, b: u256) -> u256: + a += b + return a + + pub def sub(a: u256, b: u256) -> u256: + a -= b + return a + + pub def mul(a: u256, b: u256) -> u256: + a *= b + return a + + pub def div(a: u256, b: u256) -> u256: + a /= b + return a + + pub def mod(a: u256, b: u256) -> u256: + a %= b + return a + + pub def pow(a: u256, b: u256) -> u256: + a **= b + return a + + pub def lshift(a: u8, b: u8) -> u8: + a <<= b + return a + + pub def rshift(a: u8, b: u8) -> u8: + a >>= b + return a + + pub def bit_or(a: u8, b: u8) -> u8: + a |= b + return a + + pub def bit_xor(a: u8, b: u8) -> u8: + a ^= b + return a + + pub def bit_and(a: u8, b: u8) -> u8: + a &= b + return a + ``` ([#338](https://github.com/ethereum/fe/issues/338)) +- A new parser implementation, which provides more helpful error messages + with fancy underlines and code context. ([#346](https://github.com/ethereum/fe/issues/346)) +- Added support for tuples with base type items. + + e.g. + + ``` + contract Foo: + my_num: u256 + + pub def bar(my_num: u256, my_bool: bool) -> (u256, bool): + my_tuple: (u256, bool) = (my_num, my_bool) + self.my_num = my_tuple.item0 + return my_tuple + ``` ([#352](https://github.com/ethereum/fe/issues/352)) + + +### Bugfixes + + +- Properly reject invalid emit ([#211](https://github.com/ethereum/fe/issues/211)) +- Properly tokenize numeric literals when they start with 0 ([#331](https://github.com/ethereum/fe/issues/331)) +- Reject non-string assert reasons as type error ([#335](https://github.com/ethereum/fe/issues/335)) +- Properly reject code that creates a circular dependency when using `create` or `create2`. + + Example, the follwing code is now rightfully rejected because it tries to create an + instance of `Foo` from within the `Foo` contract itself. + + ``` + contract Foo: + pub def bar()->address: + foo:Foo=Foo.create(0) + + return address(foo) + ``` ([#362](https://github.com/ethereum/fe/issues/362)) + + +### Internal Changes - for Fe Contributors + + +- AST nodes use `String`s instead of `&str`s. This way we can perform incremental compilation on the AST. ([#332](https://github.com/ethereum/fe/issues/332)) +- Added support for running tests against solidity fixtures. + Also added tests that cover how solidity encodes revert reason strings. ([#342](https://github.com/ethereum/fe/issues/342)) +- Refactoring of binary operation type checking. ([#347](https://github.com/ethereum/fe/issues/347)) + + ## 0.3.0-alpha "Calamine" (2021-03-24) diff --git a/newsfragments/211.bugfix.md b/newsfragments/211.bugfix.md deleted file mode 100644 index b25b413acc..0000000000 --- a/newsfragments/211.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Properly reject invalid emit \ No newline at end of file diff --git a/newsfragments/288.feature.md b/newsfragments/288.feature.md deleted file mode 100644 index 379208b6d6..0000000000 --- a/newsfragments/288.feature.md +++ /dev/null @@ -1,17 +0,0 @@ -Support for revert messages in assert statements - -E.g - -``` -assert a == b, "my revert statement" -``` - -The provided string is abi-encoded as if it were a call -to a function `Error(string)`. For example, the revert string `"Not enough Ether provided."` returns the following hexadecimal as error return data: - -``` -0x08c379a0 // Function selector for Error(string) -0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset -0x000000000000000000000000000000000000000000000000000000000000001a // String length -0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data -``` \ No newline at end of file diff --git a/newsfragments/331.bugfix.md b/newsfragments/331.bugfix.md deleted file mode 100644 index dc540d112f..0000000000 --- a/newsfragments/331.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Properly tokenize numeric literals when they start with 0 diff --git a/newsfragments/332.internal.md b/newsfragments/332.internal.md deleted file mode 100644 index d7433922c4..0000000000 --- a/newsfragments/332.internal.md +++ /dev/null @@ -1 +0,0 @@ -AST nodes use `String`s instead of `&str`s. This way we can perform incremental compilation on the AST. \ No newline at end of file diff --git a/newsfragments/335.bugfix.md b/newsfragments/335.bugfix.md deleted file mode 100644 index ebd5e764b4..0000000000 --- a/newsfragments/335.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Reject non-string assert reasons as type error \ No newline at end of file diff --git a/newsfragments/338.feature.md b/newsfragments/338.feature.md deleted file mode 100644 index a38980cbfb..0000000000 --- a/newsfragments/338.feature.md +++ /dev/null @@ -1,50 +0,0 @@ -Added support for augmented assignments. - -e.g. - -``` -contract Foo: - pub def add(a: u256, b: u256) -> u256: - a += b - return a - - pub def sub(a: u256, b: u256) -> u256: - a -= b - return a - - pub def mul(a: u256, b: u256) -> u256: - a *= b - return a - - pub def div(a: u256, b: u256) -> u256: - a /= b - return a - - pub def mod(a: u256, b: u256) -> u256: - a %= b - return a - - pub def pow(a: u256, b: u256) -> u256: - a **= b - return a - - pub def lshift(a: u8, b: u8) -> u8: - a <<= b - return a - - pub def rshift(a: u8, b: u8) -> u8: - a >>= b - return a - - pub def bit_or(a: u8, b: u8) -> u8: - a |= b - return a - - pub def bit_xor(a: u8, b: u8) -> u8: - a ^= b - return a - - pub def bit_and(a: u8, b: u8) -> u8: - a &= b - return a -``` \ No newline at end of file diff --git a/newsfragments/342.internal.md b/newsfragments/342.internal.md deleted file mode 100644 index 5997affe1c..0000000000 --- a/newsfragments/342.internal.md +++ /dev/null @@ -1,2 +0,0 @@ -Added support for running tests against solidity fixtures. -Also added tests that cover how solidity encodes revert reason strings. \ No newline at end of file diff --git a/newsfragments/346.feature.md b/newsfragments/346.feature.md deleted file mode 100644 index 8ce6634f3a..0000000000 --- a/newsfragments/346.feature.md +++ /dev/null @@ -1,2 +0,0 @@ -A new parser implementation, which provides more helpful error messages -with fancy underlines and code context. diff --git a/newsfragments/347.internal.md b/newsfragments/347.internal.md deleted file mode 100644 index c10783d863..0000000000 --- a/newsfragments/347.internal.md +++ /dev/null @@ -1 +0,0 @@ -Refactoring of binary operation type checking. \ No newline at end of file diff --git a/newsfragments/352.feature.md b/newsfragments/352.feature.md deleted file mode 100644 index 3a7153b953..0000000000 --- a/newsfragments/352.feature.md +++ /dev/null @@ -1,13 +0,0 @@ -Added support for tuples with base type items. - -e.g. - -``` -contract Foo: - my_num: u256 - - pub def bar(my_num: u256, my_bool: bool) -> (u256, bool): - my_tuple: (u256, bool) = (my_num, my_bool) - self.my_num = my_tuple.item0 - return my_tuple -``` \ No newline at end of file diff --git a/newsfragments/362.bugfix.md b/newsfragments/362.bugfix.md deleted file mode 100644 index d1c7b2c741..0000000000 --- a/newsfragments/362.bugfix.md +++ /dev/null @@ -1,12 +0,0 @@ -Properly reject code that creates a circular dependency when using `create` or `create2`. - -Example, the follwing code is now rightfully rejected because it tries to create an -instance of `Foo` from within the `Foo` contract itself. - -``` -contract Foo: - pub def bar()->address: - foo:Foo=Foo.create(0) - - return address(foo) -``` \ No newline at end of file