# Release Candidate for Contracts 3.4

**URL:** <https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560>\
**Category:** Announcements\
**Created:** [January 26, 2021, 4:40pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560 "2021-01-26T16:40:28Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![frangio](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/frangio/32/15251_2.png) [@frangio](https://forum.openzeppelin.com/u/frangio)\
**Post date:** [January 26, 2021, 4:40pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/1 "2021-01-26T16:40:28Z")

</div>

**OpenZeppelin Contracts 3.4 is around the corner!** 🎉

Here are the changelog entries.

#### Security Fixes

- `ERC777`: fix potential reentrancy issues for custom extensions to `ERC777`. ([#2483](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2483))

If you’re using our implementation of ERC777 from version 3.3.0 or earlier, and you define a custom `_beforeTokenTransfer` function that writes to a storage variable, you may be vulnerable to a reentrancy attack. If you’re affected and would like assistance please write to [security@openzeppelin.com](mailto:security@openzeppelin.com). [Read more in the pull request.](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2483)

#### Other Changes

- `BeaconProxy`: added new kind of proxy that allows simultaneous atomic upgrades. ([#2411](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2411))
- `EIP712`: added helpers to verify EIP712 typed data signatures on chain. ([#2418](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2418))
- `ERC20Permit`: added an implementation of the ERC20 permit extension for gasless token approvals. ([#2237](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237))
- Presets: added token presets with preminted fixed supply `ERC20PresetFixedSupply` and `ERC777PresetFixedSupply`. ([#2399](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2399))
- `Address`: added `functionDelegateCall`, similar to the existing `functionCall`. ([#2333](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2333))
- `Clones`: added a library for deploying EIP 1167 minimal proxies. ([#2449](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2449))
- `Context`: moved from `contracts/GSN` to `contracts/utils`. ([#2453](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2453))
- `PaymentSplitter`: replace usage of `.transfer()` with `Address.sendValue` for improved compatibility with smart wallets. ([#2455](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2455))
- `UpgradeableProxy`: bubble revert reasons from initialization calls. ([#2454](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2454))
- `SafeMath`: fix a memory allocation issue by adding new `SafeMath.tryOp(uint,uint)→(bool,uint)` functions. `SafeMath.op(uint,uint,string)→uint` are now deprecated. ([#2462](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2462))
- `EnumerableMap`: fix a memory allocation issue by adding new `EnumerableMap.tryGet(uint)→(bool,address)` functions. `EnumerableMap.get(uint)→string` is now deprecated. ([#2462](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2462))
- `ERC165Checker`: added batch `getSupportedInterfaces`. ([#2469](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2469))
- `RefundEscrow`: `beneficiaryWithdraw` will forward all available gas to the beneficiary. ([#2480](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2480))
- Many view and pure functions have been made virtual to customize them via overrides. In many cases this will not imply that other functions in the contract will automatically adapt to the overridden definitions. People who wish to override should consult the source code to understand the impact and if they need to override any additional functions to achieve the desired behavior.

* * *

The upgradeable and solc-0.7 variants will be released together with the final release at the end of the release candidate period in about a week.

---

<div class="post-metadata">

**Author:** ![larron](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/larron/32/4190_2.png) [@larron](https://forum.openzeppelin.com/u/larron)\
**Post date:** [January 31, 2021, 7:18pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/2 "2021-01-31T19:18:23Z")

</div>

@frangio Nice work! Is the BeaconProxy something you would still use createClone with?

---

<div class="post-metadata">

**Author:** ![abcoathup](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/abcoathup/32/415_2.png) [@abcoathup](https://forum.openzeppelin.com/u/abcoathup)\
**Post date:** [January 31, 2021, 11:40pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/3 "2021-01-31T23:40:09Z")

</div>

Hi @larron,

Welcome to the community 👋

I wasn’t sure what you meant by `createClone`, do you mean creating a BeaconProxy from Solidity?

---

<div class="post-metadata">

**Author:** ![frangio](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/frangio/32/15251_2.png) [@frangio](https://forum.openzeppelin.com/u/frangio)\
**Post date:** [February 1, 2021, 7:18pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/4 "2021-02-01T19:18:41Z")

</div>

@larron Do you mean as in the new `Clones` library for minimal proxies? If so, you can technically create clones of a beacon proxy but I don’t see a clear reason why you would do it.

---

<div class="post-metadata">

**Author:** ![larron](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/larron/32/4190_2.png) [@larron](https://forum.openzeppelin.com/u/larron)\
**Post date:** [February 1, 2021, 7:58pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/5 "2021-02-01T19:58:18Z")

</div>

Yup, that’s what I meant. I was just curious if there would have been any savings or good reason to do so!

Thanks for your swift response.

---

<div class="post-metadata">

**Author:** ![santisiri](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/santisiri/32/3854_2.png) [@santisiri](https://forum.openzeppelin.com/u/santisiri)\
**Post date:** [February 3, 2021, 5:18pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/6 "2021-02-03T17:18:16Z")

</div>

Hi guys, any news regarding this release?

---

<div class="post-metadata">

**Author:** ![abcoathup](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/abcoathup/32/415_2.png) [@abcoathup](https://forum.openzeppelin.com/u/abcoathup)\
**Post date:** [February 3, 2021, 10:21pm UTC](https://forum.openzeppelin.com/t/release-candidate-for-contracts-3-4/5560/7 "2021-02-03T22:21:36Z")

</div>

Hi @santisiri,

OpenZeppelin Contracts 3.4 has been released  
⚠ Fix for potential reentrancy issues in custom ERC777 extensions  
🏗 Virtual view functions  
⤴ ERC20 permit in drafts  
📢 Beacon proxy  
🏭 Minimal Proxy (Clones) library.

Install: `npm install @openzeppelin/contracts`

> **[OpenZeppelin Contracts 3.4](https://blog.openzeppelin.com/openzeppelin-contracts-3-4/)**
>
> OpenZeppelin Contracts 3.4 includes an ERC777 security fix for potential reentrancy issues in custom ERC777 extension, virtual view functions, ERC20 permit in drafts, Beacon proxy, and a Minimal Pr…
