You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Breaking changes
EIP712: Drop the storage fallback for long name/version values. Both parameters must now fit in a ShortString (at most 31 bytes) or the constructor reverts with ShortStrings.StringTooLong. Storing the domain exclusively in immutables keeps the domain (and downstream ERC7739 verification) consistent when the contract is used behind a proxy or clone without an initializer. (#6631)
ERC2771Forwarder: custom error ERC2771ForwarderFailureInAtomicBatch has been renamed to ERC2771ForwarderNoRefundReceiver. (#6415)
Governor and IGovernor: Replace GovernorQueueNotImplemented with GovernorProposalQueueingNotRequired and GovernorProposalQueueingFailed. (#6582)
Deprecations
Checkpoints, DoubleEndedQueue, EnumerableMap and EnumerableSet: Deprecate the at function for accessing a specific index of the structure. We introduce new pos functions 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 the CREATE3 mechanism, 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 via CREATE or CREATE2. (#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 a isReserved(Slice) function that checks if the memory occupied by the slice is reserved (i.e. before the free memory pointer). (#6302)
Memory: Remove the asBytes32 and asPointer function to reduce the risk of mistakes when manipulating memory pointers. (#6348)
RLP: Perform a memory copy when decoding bytes objects containing a single byte instead of returning a reference to the input. (#6303)
Access
AccessManager: Treat setAuthority differently in canCall to prevent bypassing the updateAuthority security using an execute. (#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 its onUninstall callback reverts, giving modules control over their own uninstallation. A forced uninstallation that bypasses the callback can still be performed through a delegate call via execute. (#6628)
ERC4337Utils, IERC4337: Drop the draft- prefix from the file names now that ERC-4337 is finalized. Imports must be updated from account/utils/draft-ERC4337Utils.sol to account/utils/ERC4337Utils.sol and from interfaces/draft-IERC4337.sol to interfaces/IERC4337.sol. (#6581)
Paymaster: Add a simple ERC-4337 paymaster implementation with minimal logic. (#6576)
PaymasterERC20: Add extension of Paymaster that sponsors user operations against payment in ERC-20 tokens. (#6576)
PaymasterERC20Guarantor: Add extension of PaymasterERC20 that enables third parties to guarantee user operations by prefunding gas costs upfront, with repayment handling for successful operations. (#6576)
PaymasterERC721Owner: Add extension of Paymaster that approves sponsoring of user operation based on ownership of an ERC-721 NFT. (#6576)
PaymasterSigner: Add extension of Paymaster that approves sponsoring of user operation based on a cryptographic signature verified by the paymaster. (#6576)
Cryptography
ERC7739: Reject signatures whose contentsDescr fails to parse into a non-empty contentsName, preventing a malformed descriptor from degrading verification to a constant structHash that no longer binds the message contents or the account's EIP-712 domain. (#6618)
ERC7913WebAuthnVerifier: Add an internal _requireUV function that can be overridden to disable the UV check. (#6596)
MultiSignerERC7913: Decode the multisignature payload directly from calldata and return false on malformed encoding instead of reverting during abi.decode, so paymaster/account validation can surface SIG_VALIDATION_FAILED rather than bubble up a revert. The _validateSignatures and _validateThreshold override parameters change from bytes[] memory to bytes[] calldata. (#6642)
RSA: Return false from pkcs1Sha256 instead 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 encoded bytes argument conforms to the ABI spec. (#6646)
WebAuthn: Verification now returns false instead of reverting when client data contains an out-of-bounds challengeIndex. (#6329)
Cross-chain
BridgeERC20Core: Rename BridgeERC20Core to BridgeFungible. (#6328)
BridgeNonFungible and BridgeERC721: Add bridge contracts to handle crosschain movements of ERC-721 tokens. (#6259)
BridgeMultiToken and BridgeERC1155: 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 on proposalNeedsQueuing when calling execute. (#6386)
GovernorCrosschain: Add governor module that facilitates the execution of crosschain operations through CrosschainRemoteExecutors and ERC-7786 gateways. (#6272)
GovernorPreventLateQuorum: Bound lateQuorumVoteExtension by a new internal virtual _maxLateQuorumVoteExtension (default votingPeriod()) to cap the total voting duration to twice the voting period, thus preventing a large extension from bricking governance. Integrators can override _maxLateQuorumVoteExtension to enforce a different bound. (#6644)
Structures
Accumulator: Check that slices being added (shift or push) are in the reserved space. (#6302)
DoubleEndedQueue: Add values(deque, start, end) to return a slice of the queue as an array, mirroring the paginated values accessor in EnumerableSet. Out-of-bound values for start and end are 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 _checkAuthorized to correctly apply authorization overrides. (#6435)
SafeERC20: Add tryGetDecimals helper that safely queries a token's decimals() without reverting. (#6482)
ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata: Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces. (#6246)