瀏覽代碼

Remove "available since" comments (#4424)

Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com>
Francisco 2 年之前
父節點
當前提交
6bf68a41d1
共有 68 個文件被更改,包括 26 次插入407 次删除
  1. 0 4
      contracts/access/AccessControl.sol
  2. 0 2
      contracts/access/AccessControlDefaultAdminRules.sol
  3. 0 2
      contracts/access/IAccessControl.sol
  4. 0 2
      contracts/access/IAccessControlDefaultAdminRules.sol
  5. 0 2
      contracts/governance/Governor.sol
  6. 0 2
      contracts/governance/IGovernor.sol
  7. 0 2
      contracts/governance/TimelockController.sol
  8. 0 2
      contracts/governance/compatibility/GovernorCompatibilityBravo.sol
  9. 0 2
      contracts/governance/compatibility/IGovernorCompatibilityBravo.sol
  10. 0 2
      contracts/governance/extensions/GovernorCountingSimple.sol
  11. 0 2
      contracts/governance/extensions/GovernorPreventLateQuorum.sol
  12. 0 2
      contracts/governance/extensions/GovernorSettings.sol
  13. 0 2
      contracts/governance/extensions/GovernorTimelockCompound.sol
  14. 0 2
      contracts/governance/extensions/GovernorTimelockControl.sol
  15. 0 2
      contracts/governance/extensions/GovernorVotes.sol
  16. 0 2
      contracts/governance/extensions/GovernorVotesQuorumFraction.sol
  17. 0 2
      contracts/governance/extensions/IGovernorTimelock.sol
  18. 0 2
      contracts/governance/utils/IVotes.sol
  19. 0 2
      contracts/governance/utils/Votes.sol
  20. 0 2
      contracts/interfaces/IERC1271.sol
  21. 0 2
      contracts/interfaces/IERC1967.sol
  22. 0 2
      contracts/interfaces/IERC2309.sol
  23. 0 2
      contracts/interfaces/IERC2981.sol
  24. 0 2
      contracts/interfaces/IERC3156FlashBorrower.sol
  25. 0 2
      contracts/interfaces/IERC3156FlashLender.sol
  26. 0 2
      contracts/interfaces/IERC4626.sol
  27. 0 2
      contracts/interfaces/IERC5313.sol
  28. 0 2
      contracts/proxy/Clones.sol
  29. 0 2
      contracts/proxy/ERC1967/ERC1967Utils.sol
  30. 0 2
      contracts/proxy/beacon/BeaconProxy.sol
  31. 0 2
      contracts/proxy/utils/UUPSUpgradeable.sol
  32. 0 2
      contracts/token/ERC1155/ERC1155.sol
  33. 0 2
      contracts/token/ERC1155/IERC1155.sol
  34. 2 1
      contracts/token/ERC1155/IERC1155Receiver.sol
  35. 0 2
      contracts/token/ERC1155/extensions/ERC1155Burnable.sol
  36. 0 2
      contracts/token/ERC1155/extensions/ERC1155Pausable.sol
  37. 0 2
      contracts/token/ERC1155/extensions/ERC1155URIStorage.sol
  38. 0 2
      contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol
  39. 1 3
      contracts/token/ERC1155/utils/ERC1155Holder.sol
  40. 3 1
      contracts/token/ERC1155/utils/ERC1155Receiver.sol
  41. 0 2
      contracts/token/ERC20/extensions/ERC20FlashMint.sol
  42. 0 2
      contracts/token/ERC20/extensions/ERC20Permit.sol
  43. 0 2
      contracts/token/ERC20/extensions/ERC20Votes.sol
  44. 0 2
      contracts/token/ERC20/extensions/ERC20Wrapper.sol
  45. 0 2
      contracts/token/ERC20/extensions/ERC4626.sol
  46. 0 2
      contracts/token/ERC20/extensions/IERC20Metadata.sol
  47. 0 2
      contracts/token/ERC721/extensions/ERC721Consecutive.sol
  48. 0 2
      contracts/token/ERC721/extensions/ERC721Royalty.sol
  49. 0 2
      contracts/token/ERC721/extensions/ERC721Votes.sol
  50. 0 2
      contracts/token/ERC721/extensions/ERC721Wrapper.sol
  51. 0 2
      contracts/token/common/ERC2981.sol
  52. 0 22
      contracts/utils/Address.sol
  53. 0 2
      contracts/utils/Base64.sol
  54. 0 2
      contracts/utils/Multicall.sol
  55. 0 3
      contracts/utils/StorageSlot.sol
  56. 0 8
      contracts/utils/cryptography/ECDSA.sol
  57. 0 8
      contracts/utils/cryptography/EIP712.sol
  58. 0 14
      contracts/utils/cryptography/MerkleProof.sol
  59. 0 2
      contracts/utils/cryptography/SignatureChecker.sol
  60. 0 2
      contracts/utils/introspection/ERC165Checker.sol
  61. 0 10
      contracts/utils/math/Math.sol
  62. 0 128
      contracts/utils/math/SafeCast.sol
  63. 0 2
      contracts/utils/structs/Checkpoints.sol
  64. 0 2
      contracts/utils/structs/DoubleEndedQueue.sol
  65. 0 2
      scripts/generate/templates/Checkpoints.js
  66. 0 65
      scripts/generate/templates/SafeCast.js
  67. 7 16
      scripts/generate/templates/StorageSlot.js
  68. 13 16
      scripts/upgradeable/upgradeable.patch

+ 0 - 4
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());

+ 0 - 2
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

+ 0 - 2
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);
 

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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 {

+ 0 - 2
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");

+ 0 - 2
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 {

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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

+ 0 - 2
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;

+ 0 - 2
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;

+ 0 - 2
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;

+ 0 - 2
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;

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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);

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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.

+ 0 - 2
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 {
     /**

+ 0 - 2
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

+ 0 - 2
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[];

+ 0 - 2
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 {
     /**

+ 2 - 1
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 {
     /**

+ 0 - 2
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 {

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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 {
     /**

+ 1 - 3
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(

+ 3 - 1
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 {
     /**

+ 0 - 2
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");

+ 0 - 2
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

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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;

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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;

+ 0 - 2
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 {

+ 0 - 22
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,

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 3
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 {

+ 0 - 8
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,

+ 0 - 8
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) {

+ 0 - 14
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,

+ 0 - 2
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 {
     /**

+ 0 - 2
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,

+ 0 - 10
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 {

+ 0 - 128
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

+ 0 - 2
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 {
     /**

+ 0 - 2
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 {
     /**

+ 0 - 2
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._
  */
 `;
 

+ 0 - 65
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) {

+ 7 - 16
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')}
  */
 `;
 

+ 13 - 16
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) {