Breaking changes
EIP712: Drop the storage fallback for longname/versionvalues. Both parameters must now fit in aShortString(at most 31 bytes) or the constructor reverts withShortStrings.StringTooLong. Storing the domain exclusively in immutables keeps the domain (and downstreamERC7739verification) consistent when the contract is used behind a proxy or clone without an initializer. (#6631)ERC2771Forwarder: custom errorERC2771ForwarderFailureInAtomicBatchhas been renamed toERC2771ForwarderNoRefundReceiver. (#6415)GovernorandIGovernor: ReplaceGovernorQueueNotImplementedwithGovernorProposalQueueingNotRequiredandGovernorProposalQueueingFailed. (#6582)
Deprecations
Checkpoints,DoubleEndedQueue,EnumerableMapandEnumerableSet: Deprecate theatfunction for accessing a specific index of the structure. We introduce newposfunctions to replace them. (#6494)
Changes by category
Utils
Additions
BlockHeader: Add a new library for verifying and parsing block headers. (#6395)Create3: Add a library to deploy contracts using theCREATE3mechanism, allowing the deployment address to depend only on the salt and the deployer, independently of the deployed bytecode. (#6402)ERC1967Clones: Add a library to deploy minimal ERC-1967 proxies viaCREATEorCREATE2. (#6405)ERC6372Utils: Add utility library for ERC-6372 clock mode validation, supporting block number and timestamp modes with consistency checks. (#6483)RateLimiter: Add a library that provides primitives for limiting the rate at which an action can be performed, with two complementary strategies: a refilling token bucket and a sliding window counter. (#6490)SimulateCall: Add a new call simulation utilities that allow inspecting return data from contract calls by executing them in a non-mutating, revert-based context. (#6290)
Other
Arrays: Reduce reliance on recursion to prevent stack overflow and support larger arrays. (#6324)ERC2771Forwarder: Revert the entire atomic batch if a call with value fails. (#6391)InteroperableAddress: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses. (#6372)InteroperableAddress: Reject inputs with both chain reference and addresses empty. (#6331)Memory: Add aisReserved(Slice)function that checks if the memory occupied by the slice is reserved (i.e. before the free memory pointer). (#6302)Memory: Remove theasBytes32andasPointerfunction to reduce the risk of mistakes when manipulating memory pointers. (#6348)RLP: Perform a memory copy when decodingbytesobjects containing a single byte instead of returning a reference to the input. (#6303)
Access
AccessManager: TreatsetAuthoritydifferently incanCallto prevent bypassing theupdateAuthoritysecurity using anexecute. (#6388)AccessManager: Allow a role admin to cancel operations that grant or revoke roles. (#6573)
Account
AccountERC7579: Revert the uninstallation of any module (validator, executor, fallback, or hook) if itsonUninstallcallback reverts, giving modules control over their own uninstallation. A forced uninstallation that bypasses the callback can still be performed through a delegate call viaexecute. (#6628)ERC4337Utils,IERC4337: Drop thedraft-prefix from the file names now that ERC-4337 is finalized. Imports must be updated fromaccount/utils/draft-ERC4337Utils.soltoaccount/utils/ERC4337Utils.soland frominterfaces/draft-IERC4337.soltointerfaces/IERC4337.sol. (#6581)Paymaster: Add a simple ERC-4337 paymaster implementation with minimal logic. (#6576)PaymasterERC20: Add extension ofPaymasterthat sponsors user operations against payment in ERC-20 tokens. (#6576)PaymasterERC20Guarantor: Add extension ofPaymasterERC20that enables third parties to guarantee user operations by prefunding gas costs upfront, with repayment handling for successful operations. (#6576)PaymasterERC721Owner: Add extension ofPaymasterthat approves sponsoring of user operation based on ownership of an ERC-721 NFT. (#6576)PaymasterSigner: Add extension ofPaymasterthat approves sponsoring of user operation based on a cryptographic signature verified by the paymaster. (#6576)
Cryptography
ERC7739: Reject signatures whosecontentsDescrfails to parse into a non-emptycontentsName, preventing a malformed descriptor from degrading verification to a constantstructHashthat no longer binds the message contents or the account's EIP-712 domain. (#6618)ERC7913WebAuthnVerifier: Add an internal_requireUVfunction that can be overridden to disable the UV check. (#6596)MultiSignerERC7913: Decode the multisignature payload directly from calldata and returnfalseon malformed encoding instead of reverting duringabi.decode, so paymaster/account validation can surfaceSIG_VALIDATION_FAILEDrather than bubble up a revert. The_validateSignaturesand_validateThresholdoverride parameters change frombytes[] memorytobytes[] calldata. (#6642)RSA: Returnfalsefrompkcs1Sha256instead of reverting when modular exponentiation fails. (#6638)SignatureChecker: Zero-pad the ERC-1271 signature calldata to a 32-byte boundary when performing the ERC-1271 static call, so the encodedbytesargument conforms to the ABI spec. (#6646)WebAuthn: Verification now returnsfalseinstead of reverting when client data contains an out-of-boundschallengeIndex. (#6329)
Cross-chain
BridgeERC20Core: RenameBridgeERC20CoretoBridgeFungible. (#6328)BridgeNonFungibleandBridgeERC721: Add bridge contracts to handle crosschain movements of ERC-721 tokens. (#6259)BridgeMultiTokenandBridgeERC1155: Add bridge contracts to handle crosschain movements of ERC-1155 tokens. (#6281)CrosschainRemoteExecutor: Add a new executor contract that relays transaction from a controller on a remote chain. (#6272)
Governance
Governor: Strictly enforce the expected proposal state depending onproposalNeedsQueuingwhen callingexecute. (#6386)GovernorCrosschain: Add governor module that facilitates the execution of crosschain operations through CrosschainRemoteExecutors and ERC-7786 gateways. (#6272)GovernorPreventLateQuorum: BoundlateQuorumVoteExtensionby a new internal virtual_maxLateQuorumVoteExtension(defaultvotingPeriod()) to cap the total voting duration to twice the voting period, thus preventing a large extension from bricking governance. Integrators can override_maxLateQuorumVoteExtensionto enforce a different bound. (#6644)
Structures
Accumulator: Check that slices being added (shiftorpush) are in the reserved space. (#6302)DoubleEndedQueue: Addvalues(deque, start, end)to return a slice of the queue as an array, mirroring the paginatedvaluesaccessor inEnumerableSet. Out-of-bound values forstartandendare clamped to the queue length. (#6522)
Token
ERC20TransferAuthorization: Add an ERC-20 extension implementing ERC-3009's transfer with authorization using parallel nonces. (#6354)ERC721Crosschain: Add an ERC-721 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#6259)ERC1155Crosschain: Add an ERC-1155 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#6281)ERC1155Burnable: Use_checkAuthorizedto correctly apply authorization overrides. (#6435)SafeERC20: AddtryGetDecimalshelper that safely queries a token'sdecimals()without reverting. (#6482)ERC6909ContentURI,ERC6909TokenSupplyandERC6909Metadata: Add ERC-165 detection for theIERC6909ContentURI,IERC6909TokenSupplyandIERC6909Metadatainterfaces. (#6246)