Meta Issue: Planned breaking changes for new major (5.0)
Here is a list of breaking changes that we would like to include in the next major release. Timming for this release is not yet known.
- https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2839
- #2962
Fix data packing with nested structures smaller than one slot. In particular, the
Governor.ProposalCorestructure is not effectively packed. We might remove theTimersstruct in exchange for alias touint64. - Use address(this) in the computation of Governor's proposal ids
- Change upgradeability for the current gap system to a "diamond storage" system
- Only transpile contracts that include storage slots. All other contracts (interfaces/library should not be transpiled and should be fetched from the vanilla contract through a dependency
- Make some contract libraries (ERC1967)
- Make some storage values constant (see 712)
- Use Votes in ERC20Votes
- Have a multi-timeline "nounce" module, that can be used by Permit/Votes/...
- https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3693
We should break this up into multiple issues except those that should be implemented and reviewed together.
We might just need the milestone to track these items instead of the meta issue.
Most of these items have their own issues by now so I will close this issue.
The missing ones are:
- Make some contract libraries (ERC1967)
We can't make ERC1967Upgrade into a library because it needs to emit events. I don't know if there are others like this.
- Make some storage values constant (see 712)
Not sure exactly what this means. We do have https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2538 and https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2638, none of those are about EIP712.