# openzeppelin-contracts v5.6.0-rc.0 - Product: openzeppelin-contracts (https://whatsnew.fyi/product/openzeppelin-contracts) - Vendor: OpenZeppelin - Date: 2025-12-19 - Version: v5.6.0-rc.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0-rc.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.6.0-rc.0 - Labels: Pre-release What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — ERC1155 batch transfers with exactly one id/value now call IERC1155Receiver.onERC1155BatchReceived instead of onERC1155Received - **changed** — ERC1967Proxy and TransparentUpgradeableProxy now mandate initialization during construction and revert with ERC1967ProxyUninitialized if no initialize call is provided - **changed** — ERC721 and ERC1155 now prevent setting an operator for address(0) - **changed** — RLP encode(bytes32) function now encodes bytes32 as a fixed size item instead of as a scalar - **changed** — ERC4337Utils parseValidationData now returns a ValidationRange as the last return tuple value indicating whether validationData is compared against a timestamp or block number - **changed** — Account updated default version of the ERC-4337 entrypoint to v0.9 - **changed** — AccountERC7579 no longer reverts and performs the uninstall if the onUninstall hook of a module reverts - **added** — ERC4337Utils added paymasterSignature function to extract the signature in paymasterAndData after Entrypoint v0.9 - **added** — ERC4337Utils added paymasterData variant that receives a flag to exclude the signature from the returned data - **added** — ERC4337Utils added variants of packValidationData that receive a ValidationRange argument for timestamp or block number - **added** — ERC1155 introduced _checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender checks - **added** — ERC4626 allows overriding underlying assets transfer mechanisms through new internal virtual functions _transferIn and _transferOut - **added** — ERC721URIStorage added _suffixURI internal getter for retrieving custom tokenURI without the base prefix - **added** — Added BridgeERC20Core, BridgeERC20 and BridgeERC7802 bridge contracts to handle crosschain movements of ERC-20 and ERC-7802 tokens - **added** — Added CrosschainLinked helper contract to facilitate communication between a contract on one chain and counterparts on remote chains through ERC-7786 gateways - **added** — Added ERC20Crosschain extension to embed an ERC-7786 based crosschain bridge directly in the token contract - **added** — MessageHashUtils added helper functions to build EIP-712 domain typehash and separator with fields selectively enabled/disabled - **added** — SignatureChecker added isValidERC1271SignatureNowCalldata variant that takes the signature from calldata - **added** — Added TrieProof library for verifying Ethereum Merkle-Patricia trie inclusion proofs - **added** — DoubleEndedQueue added tryPushBack, tryPopBack, tryPushFront, tryPopFront, tryFront, tryBack, and tryAt function variants that do not revert ###### Breaking changes - `ERC1155`: Performing batch transfers with exactly one id/value in the batch no-longer calls `IERC1155Receiver.onERC1155Received`. `IERC1155Receiver.onERC1155BatchReceived` is called instead (with arrays of length one). ([#6170](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6170)) - `ERC1967Proxy` and `TransparentUpgradeableProxy`: Mandate initialization during construction. Deployment now reverts with `ERC1967ProxyUninitialized` if an initialize call is not provided. Developers that rely on the previous behavior and want to disable this check can do so by overriding the internal `_unsafeAllowUninitialized` function to return true. ([#5906](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5906)) - `ERC721` and `ERC1155`: Prevent setting an operator for `address(0)`. In the case of `ERC721` this type of operator allowance could lead to obfuscated mint permission. ([#6171](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6171)) - `RLP`: The `encode(bytes32)` function now encodes `bytes32` as a fixed size item and not as a scalar in `encode(uint256)`. Users must replace calls to `encode(bytes32)` with `encode(uint256(bytes32))` to preserve the same behavior. ([#6167](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6167)) - `ERC4337Utils`: The `parseValidationData` now returns a `ValidationRange` as the last return tuple value indicating whether the `validationData` is compared against a timestamp or block number. Developers must update their code to handle this new return value (e.g. `(aggregator, validAfter, validUntil) -> (aggregator, validAfter, validUntil, range)`). ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) ###### Changes by category ###### Account - `Account`: Update default version of the ERC-4337 entrypoint to v0.9. ([#6135](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6135)) - `AccountERC7579`: Do not revert and perform the uninstall if the `onUninstall` hook of a module reverts. ([#6142](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6142)) - `ERC4337Utils`: Added the `paymasterSignature` function to extract the signature in `paymasterAndData` after Entrypoint v0.9. Similarly, a variant of `paymasterData` that receives a flag to exclude the signature from the returned data. ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) - `ERC4337Utils`: Added variants of `packValidationData(address,uint48,uint48)` and `packValidationData(bool,uint48,uint48)` that receive a `ValidationRange` argument, could be timestamp or block number. Similarly, the `parseValidationData` now returns a `ValidationRange` too. ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) ###### Tokens - `ERC1155`: Introduce the `_checkAuthorized` internal virtual function to encapsulate `isApprovedForAll` and `msg.sender == from` checks. ([#6133](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6133)) - `ERC1155`: Call `IERC1155Receiver.onERC1155BatchReceived` when performing a batch transfers with exactly one id/value in the batch. ([#6170](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6170)) - `ERC4626`: Allow overriding underlying assets transfer mechanisms through new internal virtual functions (`_transferIn` and `_transferOut`). ([#5970](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5970)) - `ERC721URIStorage`: Add `_suffixURI`, an internal getter for retrieving the custom tokenURI without the base prefix. ([#6175](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6175)) ###### Cross-chain - `BridgeERC20Core`, `BridgeERC20` and `BridgeERC7802`: Added bridge contracts to handle crosschain movements of ERC-20 (and ERC-7802) tokens. ([#5914](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5914)) - `CrosschainLinked`: Added a new helper contract to facilitate communication between a c _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0-rc.0]_