From 6bf68a41d19f3d6e364d8c207cb7d1a9a8e542e1 Mon Sep 17 00:00:00 2001 From: Francisco Date: Thu, 6 Jul 2023 05:00:34 -0300 Subject: [PATCH] Remove "available since" comments (#4424) Co-authored-by: Hadrien Croubois --- contracts/access/AccessControl.sol | 4 - .../access/AccessControlDefaultAdminRules.sol | 2 - contracts/access/IAccessControl.sol | 2 - .../IAccessControlDefaultAdminRules.sol | 2 - contracts/governance/Governor.sol | 2 - contracts/governance/IGovernor.sol | 2 - contracts/governance/TimelockController.sol | 2 - .../GovernorCompatibilityBravo.sol | 2 - .../IGovernorCompatibilityBravo.sol | 2 - .../extensions/GovernorCountingSimple.sol | 2 - .../extensions/GovernorPreventLateQuorum.sol | 2 - .../extensions/GovernorSettings.sol | 2 - .../extensions/GovernorTimelockCompound.sol | 2 - .../extensions/GovernorTimelockControl.sol | 2 - .../governance/extensions/GovernorVotes.sol | 2 - .../GovernorVotesQuorumFraction.sol | 2 - .../extensions/IGovernorTimelock.sol | 2 - contracts/governance/utils/IVotes.sol | 2 - contracts/governance/utils/Votes.sol | 2 - contracts/interfaces/IERC1271.sol | 2 - contracts/interfaces/IERC1967.sol | 2 - contracts/interfaces/IERC2309.sol | 2 - contracts/interfaces/IERC2981.sol | 2 - .../interfaces/IERC3156FlashBorrower.sol | 2 - contracts/interfaces/IERC3156FlashLender.sol | 2 - contracts/interfaces/IERC4626.sol | 2 - contracts/interfaces/IERC5313.sol | 2 - contracts/proxy/Clones.sol | 2 - contracts/proxy/ERC1967/ERC1967Utils.sol | 2 - contracts/proxy/beacon/BeaconProxy.sol | 2 - contracts/proxy/utils/UUPSUpgradeable.sol | 2 - contracts/token/ERC1155/ERC1155.sol | 2 - contracts/token/ERC1155/IERC1155.sol | 2 - contracts/token/ERC1155/IERC1155Receiver.sol | 3 +- .../ERC1155/extensions/ERC1155Burnable.sol | 2 - .../ERC1155/extensions/ERC1155Pausable.sol | 2 - .../ERC1155/extensions/ERC1155URIStorage.sol | 2 - .../extensions/IERC1155MetadataURI.sol | 2 - .../token/ERC1155/utils/ERC1155Holder.sol | 4 +- .../token/ERC1155/utils/ERC1155Receiver.sol | 4 +- .../token/ERC20/extensions/ERC20FlashMint.sol | 2 - .../token/ERC20/extensions/ERC20Permit.sol | 2 - .../token/ERC20/extensions/ERC20Votes.sol | 2 - .../token/ERC20/extensions/ERC20Wrapper.sol | 2 - contracts/token/ERC20/extensions/ERC4626.sol | 2 - .../token/ERC20/extensions/IERC20Metadata.sol | 2 - .../ERC721/extensions/ERC721Consecutive.sol | 2 - .../token/ERC721/extensions/ERC721Royalty.sol | 2 - .../token/ERC721/extensions/ERC721Votes.sol | 2 - .../token/ERC721/extensions/ERC721Wrapper.sol | 2 - contracts/token/common/ERC2981.sol | 2 - contracts/utils/Address.sol | 22 --- contracts/utils/Base64.sol | 2 - contracts/utils/Multicall.sol | 2 - contracts/utils/StorageSlot.sol | 3 - contracts/utils/cryptography/ECDSA.sol | 8 -- contracts/utils/cryptography/EIP712.sol | 8 -- contracts/utils/cryptography/MerkleProof.sol | 14 -- .../utils/cryptography/SignatureChecker.sol | 2 - .../utils/introspection/ERC165Checker.sol | 2 - contracts/utils/math/Math.sol | 10 -- contracts/utils/math/SafeCast.sol | 128 ------------------ contracts/utils/structs/Checkpoints.sol | 2 - contracts/utils/structs/DoubleEndedQueue.sol | 2 - scripts/generate/templates/Checkpoints.js | 2 - scripts/generate/templates/SafeCast.js | 65 --------- scripts/generate/templates/StorageSlot.js | 23 +--- scripts/upgradeable/upgradeable.patch | 29 ++-- 68 files changed, 26 insertions(+), 407 deletions(-) diff --git a/contracts/access/AccessControl.sol b/contracts/access/AccessControl.sol index 8465fefbd..ec30e81e7 100644 --- a/contracts/access/AccessControl.sol +++ b/contracts/access/AccessControl.sol @@ -64,8 +64,6 @@ abstract contract AccessControl is Context, IAccessControl, ERC165 { * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ - * - * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); @@ -91,8 +89,6 @@ abstract contract AccessControl is Context, IAccessControl, ERC165 { * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. - * - * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); diff --git a/contracts/access/AccessControlDefaultAdminRules.sol b/contracts/access/AccessControlDefaultAdminRules.sol index ebc40a5bf..4572a328d 100644 --- a/contracts/access/AccessControlDefaultAdminRules.sol +++ b/contracts/access/AccessControlDefaultAdminRules.sol @@ -35,8 +35,6 @@ import {IERC5313} from "../interfaces/IERC5313.sol"; * ) {} * } * ``` - * - * _Available since v4.9._ */ abstract contract AccessControlDefaultAdminRules is IAccessControlDefaultAdminRules, IERC5313, AccessControl { // pending admin pair read/written together frequently diff --git a/contracts/access/IAccessControl.sol b/contracts/access/IAccessControl.sol index 9abc2b735..38facbfb1 100644 --- a/contracts/access/IAccessControl.sol +++ b/contracts/access/IAccessControl.sol @@ -24,8 +24,6 @@ interface IAccessControl { * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. - * - * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); diff --git a/contracts/access/IAccessControlDefaultAdminRules.sol b/contracts/access/IAccessControlDefaultAdminRules.sol index 5e61f965d..a1afb3d22 100644 --- a/contracts/access/IAccessControlDefaultAdminRules.sol +++ b/contracts/access/IAccessControlDefaultAdminRules.sol @@ -7,8 +7,6 @@ import {IAccessControl} from "./IAccessControl.sol"; /** * @dev External interface of AccessControlDefaultAdminRules declared to support ERC165 detection. - * - * _Available since v4.9._ */ interface IAccessControlDefaultAdminRules is IAccessControl { /** diff --git a/contracts/governance/Governor.sol b/contracts/governance/Governor.sol index a66a1a6bf..94f29e95f 100644 --- a/contracts/governance/Governor.sol +++ b/contracts/governance/Governor.sol @@ -23,8 +23,6 @@ import {IGovernor, IERC6372} from "./IGovernor.sol"; * - A counting module must implement {quorum}, {_quorumReached}, {_voteSucceeded} and {_countVote} * - A voting module must implement {_getVotes} * - Additionally, {votingPeriod} must also be implemented - * - * _Available since v4.3._ */ abstract contract Governor is Context, ERC165, EIP712, Nonces, IGovernor, IERC721Receiver, IERC1155Receiver { using DoubleEndedQueue for DoubleEndedQueue.Bytes32Deque; diff --git a/contracts/governance/IGovernor.sol b/contracts/governance/IGovernor.sol index af4698226..b954ed205 100644 --- a/contracts/governance/IGovernor.sol +++ b/contracts/governance/IGovernor.sol @@ -8,8 +8,6 @@ import {IERC6372} from "../interfaces/IERC6372.sol"; /** * @dev Interface of the {Governor} core. - * - * _Available since v4.3._ */ abstract contract IGovernor is IERC165, IERC6372 { enum ProposalState { diff --git a/contracts/governance/TimelockController.sol b/contracts/governance/TimelockController.sol index ff8d45595..2cf954d12 100644 --- a/contracts/governance/TimelockController.sol +++ b/contracts/governance/TimelockController.sol @@ -21,8 +21,6 @@ import {Address} from "../utils/Address.sol"; * is in charge of proposing (resp executing) operations. A common use case is * to position this {TimelockController} as the owner of a smart contract, with * a multisig or a DAO as the sole proposer. - * - * _Available since v3.3._ */ contract TimelockController is AccessControl, ERC721Holder, ERC1155Holder { bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE"); diff --git a/contracts/governance/compatibility/GovernorCompatibilityBravo.sol b/contracts/governance/compatibility/GovernorCompatibilityBravo.sol index 445f71be0..40284c578 100644 --- a/contracts/governance/compatibility/GovernorCompatibilityBravo.sol +++ b/contracts/governance/compatibility/GovernorCompatibilityBravo.sol @@ -15,8 +15,6 @@ import {IGovernorCompatibilityBravo} from "./IGovernorCompatibilityBravo.sol"; * through inheritance. It does not include token bindings, nor does it include any variable upgrade patterns. * * NOTE: When using this module, you may need to enable the Solidity optimizer to avoid hitting the contract size limit. - * - * _Available since v4.3._ */ abstract contract GovernorCompatibilityBravo is IGovernorTimelock, IGovernorCompatibilityBravo, Governor { enum VoteType { diff --git a/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol b/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol index 4bd593077..5476edf4f 100644 --- a/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol +++ b/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol @@ -7,8 +7,6 @@ import {IGovernor} from "../IGovernor.sol"; /** * @dev Interface extension that adds missing functions to the {Governor} core to provide `GovernorBravo` compatibility. - * - * _Available since v4.3._ */ abstract contract IGovernorCompatibilityBravo is IGovernor { /** diff --git a/contracts/governance/extensions/GovernorCountingSimple.sol b/contracts/governance/extensions/GovernorCountingSimple.sol index 8934995de..6496c3acc 100644 --- a/contracts/governance/extensions/GovernorCountingSimple.sol +++ b/contracts/governance/extensions/GovernorCountingSimple.sol @@ -7,8 +7,6 @@ import {Governor} from "../Governor.sol"; /** * @dev Extension of {Governor} for simple, 3 options, vote counting. - * - * _Available since v4.3._ */ abstract contract GovernorCountingSimple is Governor { /** diff --git a/contracts/governance/extensions/GovernorPreventLateQuorum.sol b/contracts/governance/extensions/GovernorPreventLateQuorum.sol index 8687b6fd1..89c02fce6 100644 --- a/contracts/governance/extensions/GovernorPreventLateQuorum.sol +++ b/contracts/governance/extensions/GovernorPreventLateQuorum.sol @@ -14,8 +14,6 @@ import {Math} from "../../utils/math/Math.sol"; * If a vote causes quorum to be reached, the proposal's voting period may be extended so that it does not end before at * least a specified time has passed (the "vote extension" parameter). This parameter can be set through a governance * proposal. - * - * _Available since v4.5._ */ abstract contract GovernorPreventLateQuorum is Governor { uint48 private _voteExtension; diff --git a/contracts/governance/extensions/GovernorSettings.sol b/contracts/governance/extensions/GovernorSettings.sol index 5d98fbf34..834555654 100644 --- a/contracts/governance/extensions/GovernorSettings.sol +++ b/contracts/governance/extensions/GovernorSettings.sol @@ -7,8 +7,6 @@ import {Governor} from "../Governor.sol"; /** * @dev Extension of {Governor} for settings updatable through governance. - * - * _Available since v4.4._ */ abstract contract GovernorSettings is Governor { // amount of token diff --git a/contracts/governance/extensions/GovernorTimelockCompound.sol b/contracts/governance/extensions/GovernorTimelockCompound.sol index 935600d56..4b609723d 100644 --- a/contracts/governance/extensions/GovernorTimelockCompound.sol +++ b/contracts/governance/extensions/GovernorTimelockCompound.sol @@ -19,8 +19,6 @@ import {Address} from "../../utils/Address.sol"; * Using this model means the proposal will be operated by the {TimelockController} and not by the {Governor}. Thus, * the assets and permissions must be attached to the {TimelockController}. Any asset sent to the {Governor} will be * inaccessible. - * - * _Available since v4.3._ */ abstract contract GovernorTimelockCompound is IGovernorTimelock, Governor { ICompoundTimelock private _timelock; diff --git a/contracts/governance/extensions/GovernorTimelockControl.sol b/contracts/governance/extensions/GovernorTimelockControl.sol index fefe31555..111569408 100644 --- a/contracts/governance/extensions/GovernorTimelockControl.sol +++ b/contracts/governance/extensions/GovernorTimelockControl.sol @@ -21,8 +21,6 @@ import {IERC165} from "../../interfaces/IERC165.sol"; * grants them powers that they must be trusted or known not to use: 1) {onlyGovernance} functions like {relay} are * available to them through the timelock, and 2) approved governance proposals can be blocked by them, effectively * executing a Denial of Service attack. This risk will be mitigated in a future release. - * - * _Available since v4.3._ */ abstract contract GovernorTimelockControl is IGovernorTimelock, Governor { TimelockController private _timelock; diff --git a/contracts/governance/extensions/GovernorVotes.sol b/contracts/governance/extensions/GovernorVotes.sol index bb14d7fde..eea43290e 100644 --- a/contracts/governance/extensions/GovernorVotes.sol +++ b/contracts/governance/extensions/GovernorVotes.sol @@ -10,8 +10,6 @@ import {SafeCast} from "../../utils/math/SafeCast.sol"; /** * @dev Extension of {Governor} for voting weight extraction from an {ERC20Votes} token, or since v4.5 an {ERC721Votes} token. - * - * _Available since v4.3._ */ abstract contract GovernorVotes is Governor { IERC5805 public immutable token; diff --git a/contracts/governance/extensions/GovernorVotesQuorumFraction.sol b/contracts/governance/extensions/GovernorVotesQuorumFraction.sol index 5d7976b14..7782130fa 100644 --- a/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +++ b/contracts/governance/extensions/GovernorVotesQuorumFraction.sol @@ -10,8 +10,6 @@ import {Checkpoints} from "../../utils/structs/Checkpoints.sol"; /** * @dev Extension of {Governor} for voting weight extraction from an {ERC20Votes} token and a quorum expressed as a * fraction of the total supply. - * - * _Available since v4.3._ */ abstract contract GovernorVotesQuorumFraction is GovernorVotes { using Checkpoints for Checkpoints.Trace224; diff --git a/contracts/governance/extensions/IGovernorTimelock.sol b/contracts/governance/extensions/IGovernorTimelock.sol index 00254853a..7d9c3c554 100644 --- a/contracts/governance/extensions/IGovernorTimelock.sol +++ b/contracts/governance/extensions/IGovernorTimelock.sol @@ -7,8 +7,6 @@ import {IGovernor} from "../IGovernor.sol"; /** * @dev Extension of the {IGovernor} for timelock supporting modules. - * - * _Available since v4.3._ */ abstract contract IGovernorTimelock is IGovernor { /** diff --git a/contracts/governance/utils/IVotes.sol b/contracts/governance/utils/IVotes.sol index ee17721ff..c664d1255 100644 --- a/contracts/governance/utils/IVotes.sol +++ b/contracts/governance/utils/IVotes.sol @@ -4,8 +4,6 @@ pragma solidity ^0.8.19; /** * @dev Common interface for {ERC20Votes}, {ERC721Votes}, and other {Votes}-enabled contracts. - * - * _Available since v4.5._ */ interface IVotes { /** diff --git a/contracts/governance/utils/Votes.sol b/contracts/governance/utils/Votes.sol index 988255189..1c0bb3289 100644 --- a/contracts/governance/utils/Votes.sol +++ b/contracts/governance/utils/Votes.sol @@ -27,8 +27,6 @@ import {ECDSA} from "../../utils/cryptography/ECDSA.sol"; * When using this module the derived contract must implement {_getVotingUnits} (for example, make it return * {ERC721-balanceOf}), and can use {_transferVotingUnits} to track a change in the distribution of those units (in the * previous example, it would be included in {ERC721-_beforeTokenTransfer}). - * - * _Available since v4.5._ */ abstract contract Votes is Context, EIP712, Nonces, IERC5805 { using Checkpoints for Checkpoints.Trace224; diff --git a/contracts/interfaces/IERC1271.sol b/contracts/interfaces/IERC1271.sol index e7fca3079..1523f988e 100644 --- a/contracts/interfaces/IERC1271.sol +++ b/contracts/interfaces/IERC1271.sol @@ -6,8 +6,6 @@ pragma solidity ^0.8.19; /** * @dev Interface of the ERC1271 standard signature validation method for * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]. - * - * _Available since v4.1._ */ interface IERC1271 { /** diff --git a/contracts/interfaces/IERC1967.sol b/contracts/interfaces/IERC1967.sol index 190d86b2c..a57f767f1 100644 --- a/contracts/interfaces/IERC1967.sol +++ b/contracts/interfaces/IERC1967.sol @@ -5,8 +5,6 @@ pragma solidity ^0.8.19; /** * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. - * - * _Available since v4.8.3._ */ interface IERC1967 { /** diff --git a/contracts/interfaces/IERC2309.sol b/contracts/interfaces/IERC2309.sol index 9d8886994..cd967e41b 100644 --- a/contracts/interfaces/IERC2309.sol +++ b/contracts/interfaces/IERC2309.sol @@ -5,8 +5,6 @@ pragma solidity ^0.8.19; /** * @dev ERC-2309: ERC-721 Consecutive Transfer Extension. - * - * _Available since v4.8._ */ interface IERC2309 { /** diff --git a/contracts/interfaces/IERC2981.sol b/contracts/interfaces/IERC2981.sol index ba0f98c99..18cfa7135 100644 --- a/contracts/interfaces/IERC2981.sol +++ b/contracts/interfaces/IERC2981.sol @@ -10,8 +10,6 @@ import {IERC165} from "../utils/introspection/IERC165.sol"; * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. - * - * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** diff --git a/contracts/interfaces/IERC3156FlashBorrower.sol b/contracts/interfaces/IERC3156FlashBorrower.sol index 3f216194b..5c0b88de4 100644 --- a/contracts/interfaces/IERC3156FlashBorrower.sol +++ b/contracts/interfaces/IERC3156FlashBorrower.sol @@ -6,8 +6,6 @@ pragma solidity ^0.8.19; /** * @dev Interface of the ERC3156 FlashBorrower, as defined in * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156]. - * - * _Available since v4.1._ */ interface IERC3156FlashBorrower { /** diff --git a/contracts/interfaces/IERC3156FlashLender.sol b/contracts/interfaces/IERC3156FlashLender.sol index e5dd9c523..b52428a06 100644 --- a/contracts/interfaces/IERC3156FlashLender.sol +++ b/contracts/interfaces/IERC3156FlashLender.sol @@ -8,8 +8,6 @@ import {IERC3156FlashBorrower} from "./IERC3156FlashBorrower.sol"; /** * @dev Interface of the ERC3156 FlashLender, as defined in * https://eips.ethereum.org/EIPS/eip-3156[ERC-3156]. - * - * _Available since v4.1._ */ interface IERC3156FlashLender { /** diff --git a/contracts/interfaces/IERC4626.sol b/contracts/interfaces/IERC4626.sol index 27735f6b9..8854b0022 100644 --- a/contracts/interfaces/IERC4626.sol +++ b/contracts/interfaces/IERC4626.sol @@ -9,8 +9,6 @@ import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol"; /** * @dev Interface of the ERC4626 "Tokenized Vault Standard", as defined in * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]. - * - * _Available since v4.7._ */ interface IERC4626 is IERC20, IERC20Metadata { event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); diff --git a/contracts/interfaces/IERC5313.sol b/contracts/interfaces/IERC5313.sol index 1d17080a1..1150c322c 100644 --- a/contracts/interfaces/IERC5313.sol +++ b/contracts/interfaces/IERC5313.sol @@ -7,8 +7,6 @@ pragma solidity ^0.8.19; * @dev Interface for the Light Contract Ownership Standard. * * A standardized minimal interface required to identify an account that controls a contract - * - * _Available since v4.9._ */ interface IERC5313 { /** diff --git a/contracts/proxy/Clones.sol b/contracts/proxy/Clones.sol index d859d5645..fea1db13a 100644 --- a/contracts/proxy/Clones.sol +++ b/contracts/proxy/Clones.sol @@ -13,8 +13,6 @@ pragma solidity ^0.8.19; * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. - * - * _Available since v3.4._ */ library Clones { /** diff --git a/contracts/proxy/ERC1967/ERC1967Utils.sol b/contracts/proxy/ERC1967/ERC1967Utils.sol index 843fa6584..f7caaa684 100644 --- a/contracts/proxy/ERC1967/ERC1967Utils.sol +++ b/contracts/proxy/ERC1967/ERC1967Utils.sol @@ -10,8 +10,6 @@ import {StorageSlot} from "../../utils/StorageSlot.sol"; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. - * - * _Available since v4.1._ */ library ERC1967Utils { // We re-declare ERC-1967 events here because they can't be used directly from IERC1967. diff --git a/contracts/proxy/beacon/BeaconProxy.sol b/contracts/proxy/beacon/BeaconProxy.sol index 57883b692..94e697ca4 100644 --- a/contracts/proxy/beacon/BeaconProxy.sol +++ b/contracts/proxy/beacon/BeaconProxy.sol @@ -12,8 +12,6 @@ import {ERC1967Utils} from "../ERC1967/ERC1967Utils.sol"; * * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't * conflict with the storage layout of the implementation behind the proxy. - * - * _Available since v3.4._ */ contract BeaconProxy is Proxy { /** diff --git a/contracts/proxy/utils/UUPSUpgradeable.sol b/contracts/proxy/utils/UUPSUpgradeable.sol index 7d1515bbb..f4045aa6f 100644 --- a/contracts/proxy/utils/UUPSUpgradeable.sol +++ b/contracts/proxy/utils/UUPSUpgradeable.sol @@ -15,8 +15,6 @@ import {ERC1967Utils} from "../ERC1967/ERC1967Utils.sol"; * `UUPSUpgradeable` with a custom implementation of upgrades. * * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. - * - * _Available since v4.1._ */ abstract contract UUPSUpgradeable is IERC1822Proxiable { /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment diff --git a/contracts/token/ERC1155/ERC1155.sol b/contracts/token/ERC1155/ERC1155.sol index a9028f323..7b1c9cfff 100644 --- a/contracts/token/ERC1155/ERC1155.sol +++ b/contracts/token/ERC1155/ERC1155.sol @@ -15,8 +15,6 @@ import {IERC1155Errors} from "../../interfaces/draft-IERC6093.sol"; * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 - * - * _Available since v3.1._ */ abstract contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI, IERC1155Errors { using Arrays for uint256[]; diff --git a/contracts/token/ERC1155/IERC1155.sol b/contracts/token/ERC1155/IERC1155.sol index 1b0b0ae9d..19b626c9a 100644 --- a/contracts/token/ERC1155/IERC1155.sol +++ b/contracts/token/ERC1155/IERC1155.sol @@ -8,8 +8,6 @@ import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. - * - * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** diff --git a/contracts/token/ERC1155/IERC1155Receiver.sol b/contracts/token/ERC1155/IERC1155Receiver.sol index 04ef783f1..ce3265246 100644 --- a/contracts/token/ERC1155/IERC1155Receiver.sol +++ b/contracts/token/ERC1155/IERC1155Receiver.sol @@ -6,7 +6,8 @@ pragma solidity ^0.8.19; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** - * @dev _Available since v3.1._ + * @dev Interface that must be implemented by smart contracts in order to receive + * ERC-1155 token transfers. */ interface IERC1155Receiver is IERC165 { /** diff --git a/contracts/token/ERC1155/extensions/ERC1155Burnable.sol b/contracts/token/ERC1155/extensions/ERC1155Burnable.sol index 5ebfcf6c4..3696d1bbe 100644 --- a/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +++ b/contracts/token/ERC1155/extensions/ERC1155Burnable.sol @@ -8,8 +8,6 @@ import {ERC1155} from "../ERC1155.sol"; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. - * - * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn(address account, uint256 id, uint256 value) public virtual { diff --git a/contracts/token/ERC1155/extensions/ERC1155Pausable.sol b/contracts/token/ERC1155/extensions/ERC1155Pausable.sol index 960cd3b6e..a51f21599 100644 --- a/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +++ b/contracts/token/ERC1155/extensions/ERC1155Pausable.sol @@ -18,8 +18,6 @@ import {Pausable} from "../../../security/Pausable.sol"; * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will * make the contract pause mechanism of the contract unreachable, and thus unusable. - * - * _Available since v3.1._ */ abstract contract ERC1155Pausable is ERC1155, Pausable { /** diff --git a/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol b/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol index 303b452b8..2e502fd35 100644 --- a/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +++ b/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol @@ -9,8 +9,6 @@ import {ERC1155} from "../ERC1155.sol"; /** * @dev ERC1155 token with storage based token URI management. * Inspired by the ERC721URIStorage extension - * - * _Available since v4.6._ */ abstract contract ERC1155URIStorage is ERC1155 { using Strings for uint256; diff --git a/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol b/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol index 88462ef87..d0391d371 100644 --- a/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +++ b/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol @@ -8,8 +8,6 @@ import {IERC1155} from "../IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. - * - * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** diff --git a/contracts/token/ERC1155/utils/ERC1155Holder.sol b/contracts/token/ERC1155/utils/ERC1155Holder.sol index 87c42b02f..e288f8692 100644 --- a/contracts/token/ERC1155/utils/ERC1155Holder.sol +++ b/contracts/token/ERC1155/utils/ERC1155Holder.sol @@ -6,12 +6,10 @@ pragma solidity ^0.8.19; import {ERC1155Receiver} from "./ERC1155Receiver.sol"; /** - * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens. + * @dev Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. - * - * @dev _Available since v3.1._ */ abstract contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( diff --git a/contracts/token/ERC1155/utils/ERC1155Receiver.sol b/contracts/token/ERC1155/utils/ERC1155Receiver.sol index cf948ced7..02f922cf8 100644 --- a/contracts/token/ERC1155/utils/ERC1155Receiver.sol +++ b/contracts/token/ERC1155/utils/ERC1155Receiver.sol @@ -7,7 +7,9 @@ import {IERC1155Receiver} from "../IERC1155Receiver.sol"; import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol"; /** - * @dev _Available since v3.1._ + * @dev Basic contract implementing the ERC-165 interface for {IERC1155Receiver}. + * + * NOTE: This contract does not suffice to receive tokens. See {ERC1155Holder}. */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** diff --git a/contracts/token/ERC20/extensions/ERC20FlashMint.sol b/contracts/token/ERC20/extensions/ERC20FlashMint.sol index 0583af5df..5d3e11f76 100644 --- a/contracts/token/ERC20/extensions/ERC20FlashMint.sol +++ b/contracts/token/ERC20/extensions/ERC20FlashMint.sol @@ -17,8 +17,6 @@ import {ERC20} from "../ERC20.sol"; * NOTE: When this extension is used along with the {ERC20Capped} or {ERC20Votes} extensions, * {maxFlashLoan} will not correctly reflect the maximum that can be flash minted. We recommend * overriding {maxFlashLoan} so that it correctly reflects the supply cap. - * - * _Available since v4.1._ */ abstract contract ERC20FlashMint is ERC20, IERC3156FlashLender { bytes32 private constant _RETURN_VALUE = keccak256("ERC3156FlashBorrower.onFlashLoan"); diff --git a/contracts/token/ERC20/extensions/ERC20Permit.sol b/contracts/token/ERC20/extensions/ERC20Permit.sol index 8778f4baf..c83c7dae7 100644 --- a/contracts/token/ERC20/extensions/ERC20Permit.sol +++ b/contracts/token/ERC20/extensions/ERC20Permit.sol @@ -16,8 +16,6 @@ import {Nonces} from "../../../utils/Nonces.sol"; * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. - * - * _Available since v3.4._ */ abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces { // solhint-disable-next-line var-name-mixedcase diff --git a/contracts/token/ERC20/extensions/ERC20Votes.sol b/contracts/token/ERC20/extensions/ERC20Votes.sol index c27115eaa..e0d675b2a 100644 --- a/contracts/token/ERC20/extensions/ERC20Votes.sol +++ b/contracts/token/ERC20/extensions/ERC20Votes.sol @@ -20,8 +20,6 @@ import {Checkpoints} from "../../../utils/structs/Checkpoints.sol"; * * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. - * - * _Available since v4.2._ */ abstract contract ERC20Votes is ERC20, Votes { /** diff --git a/contracts/token/ERC20/extensions/ERC20Wrapper.sol b/contracts/token/ERC20/extensions/ERC20Wrapper.sol index c9e33d00a..fb5f314d7 100644 --- a/contracts/token/ERC20/extensions/ERC20Wrapper.sol +++ b/contracts/token/ERC20/extensions/ERC20Wrapper.sol @@ -12,8 +12,6 @@ import {SafeERC20} from "../utils/SafeERC20.sol"; * Users can deposit and withdraw "underlying tokens" and receive a matching number of "wrapped tokens". This is useful * in conjunction with other modules. For example, combining this wrapping mechanism with {ERC20Votes} will allow the * wrapping of an existing "basic" ERC20 into a governance token. - * - * _Available since v4.2._ */ abstract contract ERC20Wrapper is ERC20 { IERC20 private immutable _underlying; diff --git a/contracts/token/ERC20/extensions/ERC4626.sol b/contracts/token/ERC20/extensions/ERC4626.sol index cb5e03da8..11f1cd593 100644 --- a/contracts/token/ERC20/extensions/ERC4626.sol +++ b/contracts/token/ERC20/extensions/ERC4626.sol @@ -44,8 +44,6 @@ import {Math} from "../../../utils/math/Math.sol"; * * To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide]. * ==== - * - * _Available since v4.7._ */ abstract contract ERC4626 is ERC20, IERC4626 { using Math for uint256; diff --git a/contracts/token/ERC20/extensions/IERC20Metadata.sol b/contracts/token/ERC20/extensions/IERC20Metadata.sol index bdfe81145..d79bbaa39 100644 --- a/contracts/token/ERC20/extensions/IERC20Metadata.sol +++ b/contracts/token/ERC20/extensions/IERC20Metadata.sol @@ -7,8 +7,6 @@ import {IERC20} from "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. - * - * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** diff --git a/contracts/token/ERC721/extensions/ERC721Consecutive.sol b/contracts/token/ERC721/extensions/ERC721Consecutive.sol index e25edfcd9..7c37e0764 100644 --- a/contracts/token/ERC721/extensions/ERC721Consecutive.sol +++ b/contracts/token/ERC721/extensions/ERC721Consecutive.sol @@ -26,8 +26,6 @@ import {Checkpoints} from "../../../utils/structs/Checkpoints.sol"; * IMPORTANT: When overriding {_afterTokenTransfer}, be careful about call ordering. {ownerOf} may return invalid * values during the {_afterTokenTransfer} execution if the super call is not called first. To be safe, execute the * super call before your custom logic. - * - * _Available since v4.8._ */ abstract contract ERC721Consecutive is IERC2309, ERC721 { using BitMaps for BitMaps.BitMap; diff --git a/contracts/token/ERC721/extensions/ERC721Royalty.sol b/contracts/token/ERC721/extensions/ERC721Royalty.sol index b4518dc24..eb128ac58 100644 --- a/contracts/token/ERC721/extensions/ERC721Royalty.sol +++ b/contracts/token/ERC721/extensions/ERC721Royalty.sol @@ -17,8 +17,6 @@ import {ERC165} from "../../../utils/introspection/ERC165.sol"; * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. - * - * _Available since v4.5._ */ abstract contract ERC721Royalty is ERC2981, ERC721 { /** diff --git a/contracts/token/ERC721/extensions/ERC721Votes.sol b/contracts/token/ERC721/extensions/ERC721Votes.sol index 1e694e4c7..0838010eb 100644 --- a/contracts/token/ERC721/extensions/ERC721Votes.sol +++ b/contracts/token/ERC721/extensions/ERC721Votes.sol @@ -13,8 +13,6 @@ import {Votes} from "../../../governance/utils/Votes.sol"; * Tokens do not count as votes until they are delegated, because votes must be tracked which incurs an additional cost * on every transfer. Token holders can either delegate to a trusted representative who will decide how to make use of * the votes in governance decisions, or they can delegate to themselves to be their own representative. - * - * _Available since v4.5._ */ abstract contract ERC721Votes is ERC721, Votes { /** diff --git a/contracts/token/ERC721/extensions/ERC721Wrapper.sol b/contracts/token/ERC721/extensions/ERC721Wrapper.sol index b8c396c3e..f204c1079 100644 --- a/contracts/token/ERC721/extensions/ERC721Wrapper.sol +++ b/contracts/token/ERC721/extensions/ERC721Wrapper.sol @@ -12,8 +12,6 @@ import {IERC721Receiver} from "../IERC721Receiver.sol"; * Users can deposit and withdraw an "underlying token" and receive a "wrapped token" with a matching tokenId. This is useful * in conjunction with other modules. For example, combining this wrapping mechanism with {ERC721Votes} will allow the * wrapping of an existing "basic" ERC721 into a governance token. - * - * _Available since v4.9.0_ */ abstract contract ERC721Wrapper is ERC721, IERC721Receiver { IERC721 private immutable _underlying; diff --git a/contracts/token/common/ERC2981.sol b/contracts/token/common/ERC2981.sol index b9183e34e..e683b41c5 100644 --- a/contracts/token/common/ERC2981.sol +++ b/contracts/token/common/ERC2981.sol @@ -18,8 +18,6 @@ import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol"; * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. - * - * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { diff --git a/contracts/utils/Address.sol b/contracts/utils/Address.sol index 859332b39..3f5d0a55b 100644 --- a/contracts/utils/Address.sol +++ b/contracts/utils/Address.sol @@ -64,8 +64,6 @@ library Address { * * - `target` must be a contract. * - calling `target` with `data` must not revert. - * - * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, defaultRevert); @@ -78,8 +76,6 @@ library Address { * Requirements: * * - `customRevert` must be a reverting function. - * - * _Available since v5.0._ */ function functionCall( address target, @@ -97,8 +93,6 @@ library Address { * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. - * - * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, defaultRevert); @@ -111,8 +105,6 @@ library Address { * Requirements: * * - `customRevert` must be a reverting function. - * - * _Available since v5.0._ */ function functionCallWithValue( address target, @@ -130,8 +122,6 @@ library Address { /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. - * - * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, defaultRevert); @@ -140,8 +130,6 @@ library Address { /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. - * - * _Available since v3.3._ */ function functionStaticCall( address target, @@ -155,8 +143,6 @@ library Address { /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. - * - * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, defaultRevert); @@ -165,8 +151,6 @@ library Address { /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. - * - * _Available since v3.4._ */ function functionDelegateCall( address target, @@ -180,8 +164,6 @@ library Address { /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided `customRevert`) in case of unsuccessful call or if target was not a contract. - * - * _Available since v5.0._ */ function verifyCallResultFromTarget( address target, @@ -206,8 +188,6 @@ library Address { /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or with a default revert error. - * - * _Available since v5.0._ */ function verifyCallResult(bool success, bytes memory returndata) internal view returns (bytes memory) { return verifyCallResult(success, returndata, defaultRevert); @@ -220,8 +200,6 @@ library Address { * Requirements: * * - `customRevert` must be a reverting function. - * - * _Available since v5.0._ */ function verifyCallResult( bool success, diff --git a/contracts/utils/Base64.sol b/contracts/utils/Base64.sol index 9ba6defe0..ae73ec4af 100644 --- a/contracts/utils/Base64.sol +++ b/contracts/utils/Base64.sol @@ -5,8 +5,6 @@ pragma solidity ^0.8.19; /** * @dev Provides a set of functions to operate with Base64 strings. - * - * _Available since v4.5._ */ library Base64 { /** diff --git a/contracts/utils/Multicall.sol b/contracts/utils/Multicall.sol index fed9844c4..12c01ef11 100644 --- a/contracts/utils/Multicall.sol +++ b/contracts/utils/Multicall.sol @@ -7,8 +7,6 @@ import {Address} from "./Address.sol"; /** * @dev Provides a function to batch together multiple calls in a single external call. - * - * _Available since v4.1._ */ abstract contract Multicall { /** diff --git a/contracts/utils/StorageSlot.sol b/contracts/utils/StorageSlot.sol index b0e918967..cae1c8b68 100644 --- a/contracts/utils/StorageSlot.sol +++ b/contracts/utils/StorageSlot.sol @@ -27,9 +27,6 @@ pragma solidity ^0.8.19; * } * } * ``` - * - * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._ - * _Available since v4.9 for `string`, `bytes`._ */ library StorageSlot { struct AddressSlot { diff --git a/contracts/utils/cryptography/ECDSA.sol b/contracts/utils/cryptography/ECDSA.sol index 5e67a7591..aabfb5ca2 100644 --- a/contracts/utils/cryptography/ECDSA.sol +++ b/contracts/utils/cryptography/ECDSA.sol @@ -63,8 +63,6 @@ library ECDSA { * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] - * - * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) { if (signature.length == 65) { @@ -109,8 +107,6 @@ library ECDSA { * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] - * - * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) { unchecked { @@ -123,8 +119,6 @@ library ECDSA { /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. - * - * _Available since v4.2._ */ function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs); @@ -135,8 +129,6 @@ library ECDSA { /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. - * - * _Available since v4.3._ */ function tryRecover( bytes32 hash, diff --git a/contracts/utils/cryptography/EIP712.sol b/contracts/utils/cryptography/EIP712.sol index d94e956af..ff34e8146 100644 --- a/contracts/utils/cryptography/EIP712.sol +++ b/contracts/utils/cryptography/EIP712.sol @@ -28,8 +28,6 @@ import {IERC5267} from "../../interfaces/IERC5267.sol"; * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the * separator from the immutable values, which is cheaper than accessing a cached version in cold storage. * - * _Available since v3.4._ - * * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment */ abstract contract EIP712 is IERC5267 { @@ -111,8 +109,6 @@ abstract contract EIP712 is IERC5267 { /** * @dev See {IERC-5267}. - * - * _Available since v4.9._ */ function eip712Domain() public @@ -144,8 +140,6 @@ abstract contract EIP712 is IERC5267 { * * NOTE: By default this function reads _name which is an immutable value. * It only reads from storage if necessary (in case the value is too large to fit in a ShortString). - * - * _Available since v5.0._ */ // solhint-disable-next-line func-name-mixedcase function _EIP712Name() internal view returns (string memory) { @@ -157,8 +151,6 @@ abstract contract EIP712 is IERC5267 { * * NOTE: By default this function reads _version which is an immutable value. * It only reads from storage if necessary (in case the value is too large to fit in a ShortString). - * - * _Available since v5.0._ */ // solhint-disable-next-line func-name-mixedcase function _EIP712Version() internal view returns (string memory) { diff --git a/contracts/utils/cryptography/MerkleProof.sol b/contracts/utils/cryptography/MerkleProof.sol index 94586ff7b..17a6384fe 100644 --- a/contracts/utils/cryptography/MerkleProof.sol +++ b/contracts/utils/cryptography/MerkleProof.sol @@ -35,8 +35,6 @@ library MerkleProof { /** * @dev Calldata version of {verify} - * - * _Available since v4.7._ */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; @@ -47,8 +45,6 @@ library MerkleProof { * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. - * - * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; @@ -60,8 +56,6 @@ library MerkleProof { /** * @dev Calldata version of {processProof} - * - * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; @@ -76,8 +70,6 @@ library MerkleProof { * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. - * - * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, @@ -92,8 +84,6 @@ library MerkleProof { * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. - * - * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, @@ -113,8 +103,6 @@ library MerkleProof { * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). - * - * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, @@ -171,8 +159,6 @@ library MerkleProof { * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. - * - * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, diff --git a/contracts/utils/cryptography/SignatureChecker.sol b/contracts/utils/cryptography/SignatureChecker.sol index 5caf7bef9..f2cc2c4ed 100644 --- a/contracts/utils/cryptography/SignatureChecker.sol +++ b/contracts/utils/cryptography/SignatureChecker.sol @@ -10,8 +10,6 @@ import {IERC1271} from "../../interfaces/IERC1271.sol"; * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like * Argent and Safe Wallet (previously Gnosis Safe). - * - * _Available since v4.1._ */ library SignatureChecker { /** diff --git a/contracts/utils/introspection/ERC165Checker.sol b/contracts/utils/introspection/ERC165Checker.sol index d614c6755..86212695a 100644 --- a/contracts/utils/introspection/ERC165Checker.sol +++ b/contracts/utils/introspection/ERC165Checker.sol @@ -45,8 +45,6 @@ library ERC165Checker { * is that some interfaces may not be supported. * * See {IERC165-supportsInterface}. - * - * _Available since v3.4._ */ function getSupportedInterfaces( address account, diff --git a/contracts/utils/math/Math.sol b/contracts/utils/math/Math.sol index d372295d7..f55b69afc 100644 --- a/contracts/utils/math/Math.sol +++ b/contracts/utils/math/Math.sol @@ -20,8 +20,6 @@ library Math { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. - * - * _Available since v5.0._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { @@ -33,8 +31,6 @@ library Math { /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. - * - * _Available since v5.0._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { @@ -45,8 +41,6 @@ library Math { /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. - * - * _Available since v5.0._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { @@ -62,8 +56,6 @@ library Math { /** * @dev Returns the division of two unsigned integers, with a division by zero flag. - * - * _Available since v5.0._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { @@ -74,8 +66,6 @@ library Math { /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. - * - * _Available since v5.0._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { diff --git a/contracts/utils/math/SafeCast.sol b/contracts/utils/math/SafeCast.sol index d3b86b088..64f180cd2 100644 --- a/contracts/utils/math/SafeCast.sol +++ b/contracts/utils/math/SafeCast.sol @@ -46,8 +46,6 @@ library SafeCast { * Requirements: * * - input must fit into 248 bits - * - * _Available since v4.7._ */ function toUint248(uint256 value) internal pure returns (uint248) { if (value > type(uint248).max) { @@ -65,8 +63,6 @@ library SafeCast { * Requirements: * * - input must fit into 240 bits - * - * _Available since v4.7._ */ function toUint240(uint256 value) internal pure returns (uint240) { if (value > type(uint240).max) { @@ -84,8 +80,6 @@ library SafeCast { * Requirements: * * - input must fit into 232 bits - * - * _Available since v4.7._ */ function toUint232(uint256 value) internal pure returns (uint232) { if (value > type(uint232).max) { @@ -103,8 +97,6 @@ library SafeCast { * Requirements: * * - input must fit into 224 bits - * - * _Available since v4.2._ */ function toUint224(uint256 value) internal pure returns (uint224) { if (value > type(uint224).max) { @@ -122,8 +114,6 @@ library SafeCast { * Requirements: * * - input must fit into 216 bits - * - * _Available since v4.7._ */ function toUint216(uint256 value) internal pure returns (uint216) { if (value > type(uint216).max) { @@ -141,8 +131,6 @@ library SafeCast { * Requirements: * * - input must fit into 208 bits - * - * _Available since v4.7._ */ function toUint208(uint256 value) internal pure returns (uint208) { if (value > type(uint208).max) { @@ -160,8 +148,6 @@ library SafeCast { * Requirements: * * - input must fit into 200 bits - * - * _Available since v4.7._ */ function toUint200(uint256 value) internal pure returns (uint200) { if (value > type(uint200).max) { @@ -179,8 +165,6 @@ library SafeCast { * Requirements: * * - input must fit into 192 bits - * - * _Available since v4.7._ */ function toUint192(uint256 value) internal pure returns (uint192) { if (value > type(uint192).max) { @@ -198,8 +182,6 @@ library SafeCast { * Requirements: * * - input must fit into 184 bits - * - * _Available since v4.7._ */ function toUint184(uint256 value) internal pure returns (uint184) { if (value > type(uint184).max) { @@ -217,8 +199,6 @@ library SafeCast { * Requirements: * * - input must fit into 176 bits - * - * _Available since v4.7._ */ function toUint176(uint256 value) internal pure returns (uint176) { if (value > type(uint176).max) { @@ -236,8 +216,6 @@ library SafeCast { * Requirements: * * - input must fit into 168 bits - * - * _Available since v4.7._ */ function toUint168(uint256 value) internal pure returns (uint168) { if (value > type(uint168).max) { @@ -255,8 +233,6 @@ library SafeCast { * Requirements: * * - input must fit into 160 bits - * - * _Available since v4.7._ */ function toUint160(uint256 value) internal pure returns (uint160) { if (value > type(uint160).max) { @@ -274,8 +250,6 @@ library SafeCast { * Requirements: * * - input must fit into 152 bits - * - * _Available since v4.7._ */ function toUint152(uint256 value) internal pure returns (uint152) { if (value > type(uint152).max) { @@ -293,8 +267,6 @@ library SafeCast { * Requirements: * * - input must fit into 144 bits - * - * _Available since v4.7._ */ function toUint144(uint256 value) internal pure returns (uint144) { if (value > type(uint144).max) { @@ -312,8 +284,6 @@ library SafeCast { * Requirements: * * - input must fit into 136 bits - * - * _Available since v4.7._ */ function toUint136(uint256 value) internal pure returns (uint136) { if (value > type(uint136).max) { @@ -331,8 +301,6 @@ library SafeCast { * Requirements: * * - input must fit into 128 bits - * - * _Available since v2.5._ */ function toUint128(uint256 value) internal pure returns (uint128) { if (value > type(uint128).max) { @@ -350,8 +318,6 @@ library SafeCast { * Requirements: * * - input must fit into 120 bits - * - * _Available since v4.7._ */ function toUint120(uint256 value) internal pure returns (uint120) { if (value > type(uint120).max) { @@ -369,8 +335,6 @@ library SafeCast { * Requirements: * * - input must fit into 112 bits - * - * _Available since v4.7._ */ function toUint112(uint256 value) internal pure returns (uint112) { if (value > type(uint112).max) { @@ -388,8 +352,6 @@ library SafeCast { * Requirements: * * - input must fit into 104 bits - * - * _Available since v4.7._ */ function toUint104(uint256 value) internal pure returns (uint104) { if (value > type(uint104).max) { @@ -407,8 +369,6 @@ library SafeCast { * Requirements: * * - input must fit into 96 bits - * - * _Available since v4.2._ */ function toUint96(uint256 value) internal pure returns (uint96) { if (value > type(uint96).max) { @@ -426,8 +386,6 @@ library SafeCast { * Requirements: * * - input must fit into 88 bits - * - * _Available since v4.7._ */ function toUint88(uint256 value) internal pure returns (uint88) { if (value > type(uint88).max) { @@ -445,8 +403,6 @@ library SafeCast { * Requirements: * * - input must fit into 80 bits - * - * _Available since v4.7._ */ function toUint80(uint256 value) internal pure returns (uint80) { if (value > type(uint80).max) { @@ -464,8 +420,6 @@ library SafeCast { * Requirements: * * - input must fit into 72 bits - * - * _Available since v4.7._ */ function toUint72(uint256 value) internal pure returns (uint72) { if (value > type(uint72).max) { @@ -483,8 +437,6 @@ library SafeCast { * Requirements: * * - input must fit into 64 bits - * - * _Available since v2.5._ */ function toUint64(uint256 value) internal pure returns (uint64) { if (value > type(uint64).max) { @@ -502,8 +454,6 @@ library SafeCast { * Requirements: * * - input must fit into 56 bits - * - * _Available since v4.7._ */ function toUint56(uint256 value) internal pure returns (uint56) { if (value > type(uint56).max) { @@ -521,8 +471,6 @@ library SafeCast { * Requirements: * * - input must fit into 48 bits - * - * _Available since v4.7._ */ function toUint48(uint256 value) internal pure returns (uint48) { if (value > type(uint48).max) { @@ -540,8 +488,6 @@ library SafeCast { * Requirements: * * - input must fit into 40 bits - * - * _Available since v4.7._ */ function toUint40(uint256 value) internal pure returns (uint40) { if (value > type(uint40).max) { @@ -559,8 +505,6 @@ library SafeCast { * Requirements: * * - input must fit into 32 bits - * - * _Available since v2.5._ */ function toUint32(uint256 value) internal pure returns (uint32) { if (value > type(uint32).max) { @@ -578,8 +522,6 @@ library SafeCast { * Requirements: * * - input must fit into 24 bits - * - * _Available since v4.7._ */ function toUint24(uint256 value) internal pure returns (uint24) { if (value > type(uint24).max) { @@ -597,8 +539,6 @@ library SafeCast { * Requirements: * * - input must fit into 16 bits - * - * _Available since v2.5._ */ function toUint16(uint256 value) internal pure returns (uint16) { if (value > type(uint16).max) { @@ -616,8 +556,6 @@ library SafeCast { * Requirements: * * - input must fit into 8 bits - * - * _Available since v2.5._ */ function toUint8(uint256 value) internal pure returns (uint8) { if (value > type(uint8).max) { @@ -632,8 +570,6 @@ library SafeCast { * Requirements: * * - input must be greater than or equal to 0. - * - * _Available since v3.0._ */ function toUint256(int256 value) internal pure returns (uint256) { if (value < 0) { @@ -652,8 +588,6 @@ library SafeCast { * Requirements: * * - input must fit into 248 bits - * - * _Available since v4.7._ */ function toInt248(int256 value) internal pure returns (int248 downcasted) { downcasted = int248(value); @@ -672,8 +606,6 @@ library SafeCast { * Requirements: * * - input must fit into 240 bits - * - * _Available since v4.7._ */ function toInt240(int256 value) internal pure returns (int240 downcasted) { downcasted = int240(value); @@ -692,8 +624,6 @@ library SafeCast { * Requirements: * * - input must fit into 232 bits - * - * _Available since v4.7._ */ function toInt232(int256 value) internal pure returns (int232 downcasted) { downcasted = int232(value); @@ -712,8 +642,6 @@ library SafeCast { * Requirements: * * - input must fit into 224 bits - * - * _Available since v4.7._ */ function toInt224(int256 value) internal pure returns (int224 downcasted) { downcasted = int224(value); @@ -732,8 +660,6 @@ library SafeCast { * Requirements: * * - input must fit into 216 bits - * - * _Available since v4.7._ */ function toInt216(int256 value) internal pure returns (int216 downcasted) { downcasted = int216(value); @@ -752,8 +678,6 @@ library SafeCast { * Requirements: * * - input must fit into 208 bits - * - * _Available since v4.7._ */ function toInt208(int256 value) internal pure returns (int208 downcasted) { downcasted = int208(value); @@ -772,8 +696,6 @@ library SafeCast { * Requirements: * * - input must fit into 200 bits - * - * _Available since v4.7._ */ function toInt200(int256 value) internal pure returns (int200 downcasted) { downcasted = int200(value); @@ -792,8 +714,6 @@ library SafeCast { * Requirements: * * - input must fit into 192 bits - * - * _Available since v4.7._ */ function toInt192(int256 value) internal pure returns (int192 downcasted) { downcasted = int192(value); @@ -812,8 +732,6 @@ library SafeCast { * Requirements: * * - input must fit into 184 bits - * - * _Available since v4.7._ */ function toInt184(int256 value) internal pure returns (int184 downcasted) { downcasted = int184(value); @@ -832,8 +750,6 @@ library SafeCast { * Requirements: * * - input must fit into 176 bits - * - * _Available since v4.7._ */ function toInt176(int256 value) internal pure returns (int176 downcasted) { downcasted = int176(value); @@ -852,8 +768,6 @@ library SafeCast { * Requirements: * * - input must fit into 168 bits - * - * _Available since v4.7._ */ function toInt168(int256 value) internal pure returns (int168 downcasted) { downcasted = int168(value); @@ -872,8 +786,6 @@ library SafeCast { * Requirements: * * - input must fit into 160 bits - * - * _Available since v4.7._ */ function toInt160(int256 value) internal pure returns (int160 downcasted) { downcasted = int160(value); @@ -892,8 +804,6 @@ library SafeCast { * Requirements: * * - input must fit into 152 bits - * - * _Available since v4.7._ */ function toInt152(int256 value) internal pure returns (int152 downcasted) { downcasted = int152(value); @@ -912,8 +822,6 @@ library SafeCast { * Requirements: * * - input must fit into 144 bits - * - * _Available since v4.7._ */ function toInt144(int256 value) internal pure returns (int144 downcasted) { downcasted = int144(value); @@ -932,8 +840,6 @@ library SafeCast { * Requirements: * * - input must fit into 136 bits - * - * _Available since v4.7._ */ function toInt136(int256 value) internal pure returns (int136 downcasted) { downcasted = int136(value); @@ -952,8 +858,6 @@ library SafeCast { * Requirements: * * - input must fit into 128 bits - * - * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128 downcasted) { downcasted = int128(value); @@ -972,8 +876,6 @@ library SafeCast { * Requirements: * * - input must fit into 120 bits - * - * _Available since v4.7._ */ function toInt120(int256 value) internal pure returns (int120 downcasted) { downcasted = int120(value); @@ -992,8 +894,6 @@ library SafeCast { * Requirements: * * - input must fit into 112 bits - * - * _Available since v4.7._ */ function toInt112(int256 value) internal pure returns (int112 downcasted) { downcasted = int112(value); @@ -1012,8 +912,6 @@ library SafeCast { * Requirements: * * - input must fit into 104 bits - * - * _Available since v4.7._ */ function toInt104(int256 value) internal pure returns (int104 downcasted) { downcasted = int104(value); @@ -1032,8 +930,6 @@ library SafeCast { * Requirements: * * - input must fit into 96 bits - * - * _Available since v4.7._ */ function toInt96(int256 value) internal pure returns (int96 downcasted) { downcasted = int96(value); @@ -1052,8 +948,6 @@ library SafeCast { * Requirements: * * - input must fit into 88 bits - * - * _Available since v4.7._ */ function toInt88(int256 value) internal pure returns (int88 downcasted) { downcasted = int88(value); @@ -1072,8 +966,6 @@ library SafeCast { * Requirements: * * - input must fit into 80 bits - * - * _Available since v4.7._ */ function toInt80(int256 value) internal pure returns (int80 downcasted) { downcasted = int80(value); @@ -1092,8 +984,6 @@ library SafeCast { * Requirements: * * - input must fit into 72 bits - * - * _Available since v4.7._ */ function toInt72(int256 value) internal pure returns (int72 downcasted) { downcasted = int72(value); @@ -1112,8 +1002,6 @@ library SafeCast { * Requirements: * * - input must fit into 64 bits - * - * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64 downcasted) { downcasted = int64(value); @@ -1132,8 +1020,6 @@ library SafeCast { * Requirements: * * - input must fit into 56 bits - * - * _Available since v4.7._ */ function toInt56(int256 value) internal pure returns (int56 downcasted) { downcasted = int56(value); @@ -1152,8 +1038,6 @@ library SafeCast { * Requirements: * * - input must fit into 48 bits - * - * _Available since v4.7._ */ function toInt48(int256 value) internal pure returns (int48 downcasted) { downcasted = int48(value); @@ -1172,8 +1056,6 @@ library SafeCast { * Requirements: * * - input must fit into 40 bits - * - * _Available since v4.7._ */ function toInt40(int256 value) internal pure returns (int40 downcasted) { downcasted = int40(value); @@ -1192,8 +1074,6 @@ library SafeCast { * Requirements: * * - input must fit into 32 bits - * - * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32 downcasted) { downcasted = int32(value); @@ -1212,8 +1092,6 @@ library SafeCast { * Requirements: * * - input must fit into 24 bits - * - * _Available since v4.7._ */ function toInt24(int256 value) internal pure returns (int24 downcasted) { downcasted = int24(value); @@ -1232,8 +1110,6 @@ library SafeCast { * Requirements: * * - input must fit into 16 bits - * - * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16 downcasted) { downcasted = int16(value); @@ -1252,8 +1128,6 @@ library SafeCast { * Requirements: * * - input must fit into 8 bits - * - * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8 downcasted) { downcasted = int8(value); @@ -1268,8 +1142,6 @@ library SafeCast { * Requirements: * * - input must be less than or equal to maxInt256. - * - * _Available since v3.0._ */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive diff --git a/contracts/utils/structs/Checkpoints.sol b/contracts/utils/structs/Checkpoints.sol index 56b7035b9..6c73a08d8 100644 --- a/contracts/utils/structs/Checkpoints.sol +++ b/contracts/utils/structs/Checkpoints.sol @@ -12,8 +12,6 @@ import {Math} from "../math/Math.sol"; * * To create a history of checkpoints define a variable type `Checkpoints.Trace*` in your contract, and store a new * checkpoint for the current transaction block using the {push} function. - * - * _Available since v4.5._ */ library Checkpoints { /** diff --git a/contracts/utils/structs/DoubleEndedQueue.sol b/contracts/utils/structs/DoubleEndedQueue.sol index 5183bad8c..30d953239 100644 --- a/contracts/utils/structs/DoubleEndedQueue.sol +++ b/contracts/utils/structs/DoubleEndedQueue.sol @@ -15,8 +15,6 @@ import {SafeCast} from "../math/SafeCast.sol"; * ```solidity * DoubleEndedQueue.Bytes32Deque queue; * ``` - * - * _Available since v4.6._ */ library DoubleEndedQueue { /** diff --git a/scripts/generate/templates/Checkpoints.js b/scripts/generate/templates/Checkpoints.js index d635c8462..3bd4589d2 100644 --- a/scripts/generate/templates/Checkpoints.js +++ b/scripts/generate/templates/Checkpoints.js @@ -13,8 +13,6 @@ import {Math} from "../math/Math.sol"; * * To create a history of checkpoints define a variable type \`Checkpoints.Trace*\` in your contract, and store a new * checkpoint for the current transaction block using the {push} function. - * - * _Available since v4.5._ */ `; diff --git a/scripts/generate/templates/SafeCast.js b/scripts/generate/templates/SafeCast.js index 6a4a80c2b..afc31a641 100644 --- a/scripts/generate/templates/SafeCast.js +++ b/scripts/generate/templates/SafeCast.js @@ -1,65 +1,8 @@ -const assert = require('assert'); const format = require('../format-lines'); const { range } = require('../../helpers'); const LENGTHS = range(8, 256, 8).reverse(); // 248 → 8 (in steps of 8) -// Returns the version of OpenZeppelin Contracts in which a particular function was introduced. -// This is used in the docs for each function. -const version = (selector, length) => { - switch (selector) { - case 'toUint(uint)': { - switch (length) { - case 8: - case 16: - case 32: - case 64: - case 128: - return '2.5'; - case 96: - case 224: - return '4.2'; - default: - assert(LENGTHS.includes(length)); - return '4.7'; - } - } - case 'toInt(int)': { - switch (length) { - case 8: - case 16: - case 32: - case 64: - case 128: - return '3.1'; - default: - assert(LENGTHS.includes(length)); - return '4.7'; - } - } - case 'toUint(int)': { - switch (length) { - case 256: - return '3.0'; - default: - assert(false); - return; - } - } - case 'toInt(uint)': { - switch (length) { - case 256: - return '3.0'; - default: - assert(false); - return; - } - } - default: - assert(false); - } -}; - const header = `\ pragma solidity ^0.8.19; @@ -109,8 +52,6 @@ const toUintDownCast = length => `\ * Requirements: * * - input must fit into ${length} bits - * - * _Available since v${version('toUint(uint)', length)}._ */ function toUint${length}(uint256 value) internal pure returns (uint${length}) { if (value > type(uint${length}).max) { @@ -132,8 +73,6 @@ const toIntDownCast = length => `\ * Requirements: * * - input must fit into ${length} bits - * - * _Available since v${version('toInt(int)', length)}._ */ function toInt${length}(int256 value) internal pure returns (int${length} downcasted) { downcasted = int${length}(value); @@ -151,8 +90,6 @@ const toInt = length => `\ * Requirements: * * - input must be less than or equal to maxInt${length}. - * - * _Available since v${version('toInt(uint)', length)}._ */ function toInt${length}(uint${length} value) internal pure returns (int${length}) { // Note: Unsafe cast below is okay because \`type(int${length}).max\` is guaranteed to be positive @@ -170,8 +107,6 @@ const toUint = length => `\ * Requirements: * * - input must be greater than or equal to 0. - * - * _Available since v${version('toUint(int)', length)}._ */ function toUint${length}(int${length} value) internal pure returns (uint${length}) { if (value < 0) { diff --git a/scripts/generate/templates/StorageSlot.js b/scripts/generate/templates/StorageSlot.js index 3e2263a0c..a9fa11fe3 100644 --- a/scripts/generate/templates/StorageSlot.js +++ b/scripts/generate/templates/StorageSlot.js @@ -1,22 +1,15 @@ const format = require('../format-lines'); -const { capitalize, unique } = require('../../helpers'); +const { capitalize } = require('../../helpers'); const TYPES = [ - { type: 'address', isValueType: true, version: '4.1' }, - { type: 'bool', isValueType: true, name: 'Boolean', version: '4.1' }, - { type: 'bytes32', isValueType: true, version: '4.1' }, - { type: 'uint256', isValueType: true, version: '4.1' }, - { type: 'string', isValueType: false, version: '4.9' }, - { type: 'bytes', isValueType: false, version: '4.9' }, + { type: 'address', isValueType: true }, + { type: 'bool', isValueType: true, name: 'Boolean' }, + { type: 'bytes32', isValueType: true }, + { type: 'uint256', isValueType: true }, + { type: 'string', isValueType: false }, + { type: 'bytes', isValueType: false }, ].map(type => Object.assign(type, { struct: (type.name ?? capitalize(type.type)) + 'Slot' })); -const VERSIONS = unique(TYPES.map(t => t.version)).map( - version => - `_Available since v${version} for ${TYPES.filter(t => t.version == version) - .map(t => `\`${t.type}\``) - .join(', ')}._`, -); - const header = `\ pragma solidity ^0.8.19; @@ -43,8 +36,6 @@ pragma solidity ^0.8.19; * } * } * \`\`\` - * -${VERSIONS.map(s => ` * ${s}`).join('\n')} */ `; diff --git a/scripts/upgradeable/upgradeable.patch b/scripts/upgradeable/upgradeable.patch index 8623806f5..ebf3aa4e2 100644 --- a/scripts/upgradeable/upgradeable.patch +++ b/scripts/upgradeable/upgradeable.patch @@ -126,7 +126,7 @@ index df141192..1cf90ad1 100644 "keywords": [ "solidity", diff --git a/contracts/utils/cryptography/EIP712.sol b/contracts/utils/cryptography/EIP712.sol -index d94e956a..b2d3546f 100644 +index ff34e814..a9d08d5c 100644 --- a/contracts/utils/cryptography/EIP712.sol +++ b/contracts/utils/cryptography/EIP712.sol @@ -4,7 +4,6 @@ @@ -137,10 +137,10 @@ index d94e956a..b2d3546f 100644 import {IERC5267} from "../../interfaces/IERC5267.sol"; /** -@@ -29,28 +28,18 @@ import {IERC5267} from "../../interfaces/IERC5267.sol"; +@@ -27,28 +26,18 @@ import {IERC5267} from "../../interfaces/IERC5267.sol"; + * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain + * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the * separator from the immutable values, which is cheaper than accessing a cached version in cold storage. - * - * _Available since v3.4._ - * - * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment */ @@ -170,7 +170,7 @@ index d94e956a..b2d3546f 100644 /** * @dev Initializes the domain separator and parameter caches. -@@ -65,29 +54,23 @@ abstract contract EIP712 is IERC5267 { +@@ -63,29 +52,23 @@ abstract contract EIP712 is IERC5267 { * contract upgrade]. */ constructor(string memory name, string memory version) { @@ -208,7 +208,7 @@ index d94e956a..b2d3546f 100644 } /** -@@ -128,6 +111,10 @@ abstract contract EIP712 is IERC5267 { +@@ -124,6 +107,10 @@ abstract contract EIP712 is IERC5267 { uint256[] memory extensions ) { @@ -219,14 +219,12 @@ index d94e956a..b2d3546f 100644 return ( hex"0f", // 01111 _EIP712Name(), -@@ -142,26 +129,62 @@ abstract contract EIP712 is IERC5267 { +@@ -138,22 +125,62 @@ abstract contract EIP712 is IERC5267 { /** * @dev The name parameter for the EIP712 domain. * - * NOTE: By default this function reads _name which is an immutable value. - * It only reads from storage if necessary (in case the value is too large to fit in a ShortString). -- * -- * _Available since v5.0._ + * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs + * are a concern. */ @@ -244,7 +242,10 @@ index d94e956a..b2d3546f 100644 - * It only reads from storage if necessary (in case the value is too large to fit in a ShortString). + * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs + * are a concern. -+ */ + */ +- // solhint-disable-next-line func-name-mixedcase +- function _EIP712Version() internal view returns (string memory) { +- return _version.toStringWithFallback(_versionFallback); + function _EIP712Version() internal view virtual returns (string memory) { + return _version; + } @@ -272,13 +273,9 @@ index d94e956a..b2d3546f 100644 + + /** + * @dev The hash of the version parameter for the EIP712 domain. - * -- * _Available since v5.0._ ++ * + * NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Version` instead. - */ -- // solhint-disable-next-line func-name-mixedcase -- function _EIP712Version() internal view returns (string memory) { -- return _version.toStringWithFallback(_versionFallback); ++ */ + function _EIP712VersionHash() internal view returns (bytes32) { + string memory version = _EIP712Version(); + if (bytes(version).length > 0) {