v5.4.0
Added 22
- Add Account, a simple ERC-4337 account implementation with minimal logic to process user operations
- Add AccountERC7579, an extension of Account that implements support for ERC-7579 modules of type executor, validator, and fallback handler
- Add AccountERC7579Hooked, an extension of AccountERC7579 that implements support for ERC-7579 hook modules
- Add EIP7702Utils library for checking if an address has an EIP-7702 delegation in place
- Add IERC7821 and ERC7821 interface and logic for minimal batch execution
- Add GovernorNoncesKeyed extension of Governor that adds support for keyed nonces when voting by sig
- Add ERC20Bridgeable implementation of ERC-7802 that makes an ERC-20 compatible with crosschain bridges
- Add AbstractSigner, SignerECDSA, SignerP256, and SignerRSA abstract contract and various implementations for contracts that deal with signature verification
- Add SignerERC7702 implementation of AbstractSigner for Externally Owned Accounts (EOAs)
- Add SignerERC7913 abstract signer that verifies signatures using the ERC-7913 workflow
- Add MultiSignerERC7913 implementation of AbstractSigner that supports multiple ERC-7913 signers with a threshold-based signature verification system
- Add MultiSignerERC7913Weighted extension of MultiSignerERC7913 that supports assigning different weights to each signer
- Add ERC7913P256Verifier and ERC7913RSAVerifier ready to use ERC-7913 verifiers that implement key verification for P256 (secp256r1) and RSA keys
- Add support for ERC-7913 signatures to SignatureChecker alongside existing ECDSA and ERC-1271 signature verification
- Add ERC7739 abstract contract to validate signatures following the rehashing scheme from ERC7739Utils
- Add ERC7739Utils library that implements a defensive rehashing mechanism to prevent replayability of smart contract signatures based on the ERC-7739
- Add BytesToBytesMap type support to EnumerableMap
- Add keys(uint256,uint256) to EnumerableMap that returns a subset (slice) of the keys in the map
- Add StringSet and BytesSet types support to EnumerableSet
- Add values(uint256,uint256) to EnumerableSet that returns a subset (slice) of the values in the set
- Add unsafeAccess, unsafeMemoryAccess and unsafeSetLength to Arrays for bytes[] and string[]
- Add Blockhash library that provides access to historical block hashes using EIP-2935's history storage, extending the standard 256-block limit to 8191 blocks
Changed 2
- Update minimum pragma to 0.8.24 in SignatureChecker, Governor and Governor's extensions
- Reduce pragma requirement of interface files
Fixed 1
- Fix lastIndexOf(bytes,byte,uint256) in Bytes with empty buffers and finite position to correctly return type(uint256).max instead of accessing uninitialized memory sections
From openzeppelin-contracts
Breaking changes
- Update minimum pragma to 0.8.24 in
SignatureChecker,Governorand Governor's extensions. (#5716).
Pragma changes
- Reduced pragma requirement of interface files
Changes by category
Account
Account: Added a simple ERC-4337 account implementation with minimal logic to process user operations. (#5657)AccountERC7579: Extension ofAccountthat implements support for ERC-7579 modules of type executor, validator, and fallback handler. (#5657)AccountERC7579Hooked: Extension ofAccountERC7579that implements support for ERC-7579 hook modules. (#5657)EIP7702Utils: Add a library for checking if an address has an EIP-7702 delegation in place. (#5587)IERC7821,ERC7821: Interface and logic for minimal batch execution. No support for additionalopDatais included. (#5657)
Governance
GovernorNoncesKeyed: Extension ofGovernorthat adds support for keyed nonces when voting by sig. (#5574)
Tokens
ERC20Bridgeable: Implementation of ERC-7802 that makes an ERC-20 compatible with crosschain bridges. (#5739)
Cryptography
Signers
AbstractSigner,SignerECDSA,SignerP256, andSignerRSA: Add an abstract contract and various implementations for contracts that deal with signature verification. (#5657)SignerERC7702: Implementation ofAbstractSignerfor Externally Owned Accounts (EOAs). Useful with ERC-7702. (#5657)SignerERC7913: Abstract signer that verifies signatures using the ERC-7913 workflow. (#5659)MultiSignerERC7913: Implementation ofAbstractSignerthat supports multiple ERC-7913 signers with a threshold-based signature verification system. (#5659)MultiSignerERC7913Weighted: Extension ofMultiSignerERC7913that supports assigning different weights to each signer, enabling more flexible governance schemes. (#5741)
Verifiers
ERC7913P256VerifierandERC7913RSAVerifier: Ready to use ERC-7913 verifiers that implement key verification for P256 (secp256r1) and RSA keys. (#5659)
Other
SignatureChecker: Add support for ERC-7913 signatures alongside existing ECDSA and ERC-1271 signature verification. (#5659)ERC7739: An abstract contract to validate signatures following the rehashing scheme fromERC7739Utils. (#5664)ERC7739Utils: Add a library that implements a defensive rehashing mechanism to prevent replayability of smart contract signatures based on the ERC-7739. (#5664)
Structures
EnumerableMap: Add support forBytesToBytesMaptype. (#5658)EnumerableMap: Addkeys(uint256,uint256)that returns a subset (slice) of the keys in the map. (#5713)EnumerableSet: Add support forStringSetandBytesSettypes. (#5658)EnumerableSet: Addvalues(uint256,uint256)that returns a subset (slice) of the values in the set. (#5713)
Utils
Arrays: AddunsafeAccess,unsafeMemoryAccessandunsafeSetLengthforbytes[]andstring[]. (#5568)Blockhash: Add a library that provides access to historical block hashes using EIP-2935's history storage, extending the standard 256-block limit to 8191 blocks. (#5642)Bytes: FixlastIndexOf(bytes,byte,uint256)with empty buffers and finite position to correctly returntype(uint256).maxinstead of accessing uninitialized memory sections. (#5797)