v1.2.0 Andromeda Release
Changelog
Major changes to the Extendable pattern to improve gas cost efficiency and better runtime introspection. Solves problem of function shadowing and refactored ERC165 implementation away from Extension.
Extension implementation now slightly changed.
Some bug fixes.
Implemented enhancements and fixes as suggested by auditors.
Added
- Extensions now implicitly implement ERC165 by calling a singleton contract that contains the logic, to prevent redeployment
- ERC165Logic singleton exists at static address on all EVM chains
- Comprehensive event emissions for all base Extensions (Extend, Retract, Replace, Permissioning)
- Interface struct type that is used to describe Extension implementations
- PermissioningLogic: renounceOwnership function
Changed
- Storage libraries function to return state struct renamed
_getStorage=>_getState - Extendable no longer cycles through Extensions to try/catch calls
- Extensions now must implement a new
IExtensioninterface consisting ofgetInterfaceandgetSolidityInterfacefunctions. - ExtendableStorage changed to support new introspection routines
- Introspection now allows clearer viewing of interfaces and functions implemented by an Extension or an Extendable
_beforeFallbackandafterFallbackare now correctly placed to avoid certain conditions where they were not atomic- ExtendLogic function renamed from
getCurrentInterface=>getFullInterface - ExtendLogic now extends the contract with the Extension using its interface and all function selectors, and will revert if any are already extended
- RetractLogic now retracts an Extension by removing all references to the Extension address by interfaceId and function selector
- ReplaceLogic now checks if an Extension that implements multiple interfaces matches that of the old Extension before performing the replacement
- PermissioningLogic: owner can now no longer be set to the zero address to avoid cases where any user could become owner after setting to address zero by calling
init