diff --git a/CHANGELOG.md b/CHANGELOG.md index a408b29cffb..0d24dfdcf6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ ### Breaking changes - `SignerERC7702` is renamed as `SignerEIP7702`. Imports and inheritance must be updated to that new name and path. Behavior is unmodified. -- `ERC721Holder` and `ERC1155Holder` are flagged as stateless and are no longer transpiled. Developers using their upgradeable variants from `@openzeppelin/contracts-upgradeable` (i.e. `ERC712HolderUpgradeable` and `ERC1155HolderUpgradeable`) must update their imports to use the equivalent version available in `@openzeppelin/contracts`. +- `ERC721Holder`, `ERC1155Holder`, `ReentrancyGuard` and `ReentrancyGuardTransient` are flagged as stateless and are no longer transpiled. Developers using their upgradeable variants from `@openzeppelin/contracts-upgradeable` must update their imports to use the equivalent version available in `@openzeppelin/contracts`. - Update minimum pragma to 0.8.24 in `Votes`, `VotesExtended`, `ERC20Votes`, `Strings`, `ERC1155URIStorage`, `MessageHashUtils`, `ERC721URIStorage`, `ERC721Votes`, `ERC721Wrapper`, `ERC721Burnable`, `ERC721Consecutive`, `ERC721Enumerable`, `ERC721Pausable`, `ERC721Royalty`, `ERC721Wrapper`, `EIP712`, `ERC4626` and `ERC7739`. ([#5726](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5726)) ### Deprecation diff --git a/contracts/utils/ReentrancyGuard.sol b/contracts/utils/ReentrancyGuard.sol index be35f0d4ab5..6e44894dc0f 100644 --- a/contracts/utils/ReentrancyGuard.sol +++ b/contracts/utils/ReentrancyGuard.sol @@ -26,6 +26,8 @@ import {StorageSlot} from "./StorageSlot.sol"; * * IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced * by the {ReentrancyGuardTransient} variant in v6.0. + * + * @custom:stateless */ abstract contract ReentrancyGuard { using StorageSlot for bytes32; diff --git a/contracts/utils/ReentrancyGuardTransient.sol b/contracts/utils/ReentrancyGuardTransient.sol index 173b018e84b..80723cd77cc 100644 --- a/contracts/utils/ReentrancyGuardTransient.sol +++ b/contracts/utils/ReentrancyGuardTransient.sol @@ -11,6 +11,8 @@ import {TransientSlot} from "./TransientSlot.sol"; * NOTE: This variant only works on networks where EIP-1153 is available. * * _Available since v5.1._ + * + * @custom:stateless */ abstract contract ReentrancyGuardTransient { using TransientSlot for *; diff --git a/scripts/upgradeable/upgradeable.patch b/scripts/upgradeable/upgradeable.patch index ad3ed680894..8a17576b584 100644 --- a/scripts/upgradeable/upgradeable.patch +++ b/scripts/upgradeable/upgradeable.patch @@ -140,7 +140,7 @@ index 8ccb9465e..509cd7f05 100644 + } } diff --git a/contracts/utils/ReentrancyGuard.sol b/contracts/utils/ReentrancyGuard.sol -index f958d5e8f..845209bc8 100644 +index 6e44894dc..7b076aaa7 100644 --- a/contracts/utils/ReentrancyGuard.sol +++ b/contracts/utils/ReentrancyGuard.sol @@ -36,6 +36,11 @@ abstract contract ReentrancyGuard { @@ -155,6 +155,17 @@ index f958d5e8f..845209bc8 100644 // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write +@@ -55,10 +60,6 @@ abstract contract ReentrancyGuard { + */ + error ReentrancyGuardReentrantCall(); + +- constructor() { +- _reentrancyGuardStorageSlot().getUint256Slot().value = NOT_ENTERED; +- } +- + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` diff --git a/contracts/utils/cryptography/EIP712.sol b/contracts/utils/cryptography/EIP712.sol index 0eaef9d27..01f1b5f58 100644 --- a/contracts/utils/cryptography/EIP712.sol @@ -330,7 +341,7 @@ index 0eaef9d27..01f1b5f58 100644 } } diff --git a/package.json b/package.json -index 285a074ed..d48cc8e4b 100644 +index f6960972a..369e2e1e6 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@