Commit b05440a7 by github-actions

Transpile ff94b777

parent 78f32a18
...@@ -20,23 +20,35 @@ ...@@ -20,23 +20,35 @@
## Unreleased ## Unreleased
* `IERC20Metadata`: add a new extended interface that includes the optional `name()`, `symbol()` and `decimals()` functions. ([#2561](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2561))
* `ERC777`: make reception acquirement optional in `_mint`. ([#2552](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2552))
* `ERC20Permit`: add a `_useNonce` to enable further usage of ERC712 signatures. ([#2565](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2565))
## Unreleased
* Now targeting the 0.8.x line of Solidity compilers. For 0.6.x (resp 0.7.x) support, use version 3.4.0 (resp 3.4.0-solc-0.7) of OpenZeppelin. * Now targeting the 0.8.x line of Solidity compilers. For 0.6.x (resp 0.7.x) support, use version 3.4.0 (resp 3.4.0-solc-0.7) of OpenZeppelin.
* `Context`: making `_msgData` return `bytes calldata` instead of `bytes memory` ([#2492](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2492)) * `Context`: making `_msgData` return `bytes calldata` instead of `bytes memory` ([#2492](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2492))
* `ERC20`: Removed the `_setDecimals` function and the storage slot associated to decimals. ([#2502](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2502)) * `ERC20`: removed the `_setDecimals` function and the storage slot associated to decimals. ([#2502](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2502))
* `Strings`: addition of a `toHexString` function. ([#2504](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2504)) * `Strings`: addition of a `toHexString` function. ([#2504](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2504))
* `EnumerableMap`: change implementation to optimize for `key → value` lookups instead of enumeration. ([#2518](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2518)) * `EnumerableMap`: change implementation to optimize for `key → value` lookups instead of enumeration. ([#2518](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2518))
* `GSN`: Deprecate GSNv1 support in favor of upcomming support for GSNv2. ([#2521](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2521)) * `GSN`: deprecate GSNv1 support in favor of upcoming support for GSNv2. ([#2521](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2521))
* `ERC165`: Remove uses of storage in the base ERC165 implementation. ERC165 based contracts now use storage-less virtual functions. Old behaviour remains available in the `ERC165Storage` extension. ([#2505](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2505)) * `ERC165`: remove uses of storage in the base ERC165 implementation. ERC165 based contracts now use storage-less virtual functions. Old behavior remains available in the `ERC165Storage` extension. ([#2505](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2505))
* `Initializable`: Make initializer check stricter during construction. ([#2531](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2531)) * `Initializable`: make initializer check stricter during construction. ([#2531](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2531))
* `ERC721`: remove enumerability of tokens from the base implementation. This feature is now provided separately through the `ERC721Enumerable` extension. ([#2511](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2511)) * `ERC721`: remove enumerability of tokens from the base implementation. This feature is now provided separately through the `ERC721Enumerable` extension. ([#2511](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2511))
* `AccessControl`: removed enumerability by default for a more lightweight contract. It is now opt-in through `AccessControlEnumerable`. ([#2512](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2512)) * `AccessControl`: removed enumerability by default for a more lightweight contract. It is now opt-in through `AccessControlEnumerable`. ([#2512](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2512))
* Meta Transactions: add `ERC2771Context` and a `MinimalForwarder` for meta-transactions. ([#2508](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2508)) * Meta Transactions: add `ERC2771Context` and a `MinimalForwarder` for meta-transactions. ([#2508](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2508))
* Overall reorganisation of the contract folder to improve clarity and discoverability. ([#2503](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2503)) * Overall reorganization of the contract folder to improve clarity and discoverability. ([#2503](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2503))
* `ERC20Capped`: optimize gas usage of by enforcing te check directly in `_mint`. ([#2524](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2524)) * `ERC20Capped`: optimize gas usage by enforcing the check directly in `_mint`. ([#2524](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2524))
* Rename `UpgradeableProxy` to `ERC1967Proxy`. ([#2547](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2547)) * Rename `UpgradeableProxy` to `ERC1967Proxy`. ([#2547](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2547))
* `ERC777`: Optimize the gas costs of the constructor. ([#2551](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2551)) * `ERC777`: optimize the gas costs of the constructor. ([#2551](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2551))
* `ERC721URIStorage`: Add a new extension that implements the `_setTokenURI` behavior as it was available in 3.4.0. ([#2555](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2555)) * `ERC721URIStorage`: add a new extension that implements the `_setTokenURI` behavior as it was available in 3.4.0. ([#2555](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2555))
* `AccessControl`: Added ERC165 interface detection. ([#2562](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2562)) * `AccessControl`: added ERC165 interface detection. ([#2562](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2562))
* `ERC1155`: make `uri` public so overloading function can call it using super. ([#2576](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2576))
### Bug fixes for beta releases
* `AccessControlEnumerable`: Fixed `renounceRole` not updating enumerable set of addresses for a role. ([#2572](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2572))
### How to upgrade from 3.x ### How to upgrade from 3.x
...@@ -48,6 +60,10 @@ npx openzeppelin-contracts-migrate-imports ...@@ -48,6 +60,10 @@ npx openzeppelin-contracts-migrate-imports
Make sure you're using git or another version control system to be able to recover from any potential error in our script. Make sure you're using git or another version control system to be able to recover from any potential error in our script.
### How to upgrade from 4.0-beta.x
Some further changes have been done between the different beta iterations. Transitions made during this period are configured in the `migrate-imports` script. Consequently, you can upgrade from any previous 4.0-beta.x version using the same script as described in the *How to upgrade from 3.x* section.
## 3.4.0 (2021-02-02) ## 3.4.0 (2021-02-02)
* `BeaconProxy`: added new kind of proxy that allows simultaneous atomic upgrades. ([#2411](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2411)) * `BeaconProxy`: added new kind of proxy that allows simultaneous atomic upgrades. ([#2411](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2411))
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "./AccessControlUpgradeable.sol"; import "./AccessControlUpgradeable.sol";
import "../utils/structs/EnumerableSetUpgradeable.sol"; import "../utils/structs/EnumerableSetUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev External interface of AccessControlEnumerable declared to support ERC165 detection. * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.
...@@ -80,6 +80,14 @@ abstract contract AccessControlEnumerableUpgradeable is Initializable, IAccessCo ...@@ -80,6 +80,14 @@ abstract contract AccessControlEnumerableUpgradeable is Initializable, IAccessCo
} }
/** /**
* @dev Overload {renounceRole} to track enumerable memberships
*/
function renounceRole(bytes32 role, address account) public virtual override {
super.renounceRole(role, account);
_roleMembers[role].remove(account);
}
/**
* @dev Overload {_setupRole} to track enumerable memberships * @dev Overload {_setupRole} to track enumerable memberships
*/ */
function _setupRole(bytes32 role, address account) internal virtual override { function _setupRole(bytes32 role, address account) internal virtual override {
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/introspection/ERC165Upgradeable.sol"; import "../utils/introspection/ERC165Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev External interface of AccessControl declared to support ERC165 detection. * @dev External interface of AccessControl declared to support ERC165 detection.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev Contract module which provides a basic access control mechanism, where * @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to * there is an account (an owner) that can be granted exclusive access to
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "./AddressUpgradeable.sol"; import "../utils/AddressUpgradeable.sol";
import "./ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "./math/SafeMathUpgradeable.sol"; import "../utils/math/SafeMathUpgradeable.sol";
import "./Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title PaymentSplitter * @title PaymentSplitter
......
= Finance
[.readme-notice]
NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/finance
This directory includes primitives for financial systems. We currently only offer the {PaymentSplitter} contract, but we want to grow this directory so we welcome ideas.
== PaymentSplitter
{{PaymentSplitter}}
= Governance = Governance
[.readme-notice] [.readme-notice]
NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/access NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/governance
This directory includes primitives for on-chain governance. We currently only offer the {TimelockController} contract, that can be used as a component in a governance systems to introduce a delay between a proposal and its execution. This directory includes primitives for on-chain governance. We currently only offer the {TimelockController} contract, that can be used as a component in a governance systems to introduce a delay between a proposal and its execution.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../access/AccessControlUpgradeable.sol"; import "../access/AccessControlUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev Contract module which acts as a timelocked controller. When set as the * @dev Contract module which acts as a timelocked controller. When set as the
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/* /*
* @dev Context variant with ERC2771 support. * @dev Context variant with ERC2771 support.
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../utils/cryptography/ECDSAUpgradeable.sol"; import "../utils/cryptography/ECDSAUpgradeable.sol";
import "../utils/cryptography/draft-EIP712Upgradeable.sol"; import "../utils/cryptography/draft-EIP712Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/* /*
* @dev Simple minimal forwarder to be used together with an ERC2771 compatible contract. See {ERC2771Context}. * @dev Simple minimal forwarder to be used together with an ERC2771 compatible contract. See {ERC2771Context}.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../access/AccessControlEnumerableUpgradeable.sol"; import "../access/AccessControlEnumerableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract AccessControlEnumerableMockUpgradeable is Initializable, AccessControlEnumerableUpgradeable { contract AccessControlEnumerableMockUpgradeable is Initializable, AccessControlEnumerableUpgradeable {
function __AccessControlEnumerableMock_init() internal initializer { function __AccessControlEnumerableMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../access/AccessControlUpgradeable.sol"; import "../access/AccessControlUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract AccessControlMockUpgradeable is Initializable, AccessControlUpgradeable { contract AccessControlMockUpgradeable is Initializable, AccessControlUpgradeable {
function __AccessControlMock_init() internal initializer { function __AccessControlMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/AddressUpgradeable.sol"; import "../utils/AddressUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract AddressImplUpgradeable is Initializable { contract AddressImplUpgradeable is Initializable {
function __AddressImpl_init() internal initializer { function __AddressImpl_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/ArraysUpgradeable.sol"; import "../utils/ArraysUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ArraysImplUpgradeable is Initializable { contract ArraysImplUpgradeable is Initializable {
using ArraysUpgradeable for uint256[]; using ArraysUpgradeable for uint256[];
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract BadBeaconNoImplUpgradeable is Initializable { contract BadBeaconNoImplUpgradeable is Initializable {
function __BadBeaconNoImpl_init() internal initializer { function __BadBeaconNoImpl_init() internal initializer {
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract CallReceiverMockUpgradeable is Initializable { contract CallReceiverMockUpgradeable is Initializable {
function __CallReceiverMock_init() internal initializer { function __CallReceiverMock_init() internal initializer {
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../proxy/ClonesUpgradeable.sol"; import "../proxy/ClonesUpgradeable.sol";
import "../utils/AddressUpgradeable.sol"; import "../utils/AddressUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ClonesMockUpgradeable is Initializable { contract ClonesMockUpgradeable is Initializable {
function __ClonesMock_init() internal initializer { function __ClonesMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/escrow/ConditionalEscrowUpgradeable.sol"; import "../utils/escrow/ConditionalEscrowUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// mock class using ConditionalEscrow // mock class using ConditionalEscrow
contract ConditionalEscrowMockUpgradeable is Initializable, ConditionalEscrowUpgradeable { contract ConditionalEscrowMockUpgradeable is Initializable, ConditionalEscrowUpgradeable {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ContextMockUpgradeable is Initializable, ContextUpgradeable { contract ContextMockUpgradeable is Initializable, ContextUpgradeable {
function __ContextMock_init() internal initializer { function __ContextMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/CountersUpgradeable.sol"; import "../utils/CountersUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract CountersImplUpgradeable is Initializable { contract CountersImplUpgradeable is Initializable {
function __CountersImpl_init() internal initializer { function __CountersImpl_init() internal initializer {
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../utils/Create2Upgradeable.sol"; import "../utils/Create2Upgradeable.sol";
import "../utils/introspection/ERC1820ImplementerUpgradeable.sol"; import "../utils/introspection/ERC1820ImplementerUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract Create2ImplUpgradeable is Initializable { contract Create2ImplUpgradeable is Initializable {
function __Create2Impl_init() internal initializer { function __Create2Impl_init() internal initializer {
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
abstract contract ImplUpgradeable is Initializable { abstract contract ImplUpgradeable is Initializable {
function __Impl_init() internal initializer { function __Impl_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/cryptography/ECDSAUpgradeable.sol"; import "../utils/cryptography/ECDSAUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ECDSAMockUpgradeable is Initializable { contract ECDSAMockUpgradeable is Initializable {
function __ECDSAMock_init() internal initializer { function __ECDSAMock_init() internal initializer {
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../utils/cryptography/draft-EIP712Upgradeable.sol"; import "../utils/cryptography/draft-EIP712Upgradeable.sol";
import "../utils/cryptography/ECDSAUpgradeable.sol"; import "../utils/cryptography/ECDSAUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract EIP712ExternalUpgradeable is Initializable, EIP712Upgradeable { contract EIP712ExternalUpgradeable is Initializable, EIP712Upgradeable {
function __EIP712External_init(string memory name, string memory version) internal initializer { function __EIP712External_init(string memory name, string memory version) internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC1155/extensions/ERC1155BurnableUpgradeable.sol"; import "../token/ERC1155/extensions/ERC1155BurnableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC1155BurnableMockUpgradeable is Initializable, ERC1155BurnableUpgradeable { contract ERC1155BurnableMockUpgradeable is Initializable, ERC1155BurnableUpgradeable {
function __ERC1155BurnableMock_init(string memory uri) internal initializer { function __ERC1155BurnableMock_init(string memory uri) internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC1155/ERC1155Upgradeable.sol"; import "../token/ERC1155/ERC1155Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title ERC1155Mock * @title ERC1155Mock
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "./ERC1155MockUpgradeable.sol"; import "./ERC1155MockUpgradeable.sol";
import "../token/ERC1155/extensions/ERC1155PausableUpgradeable.sol"; import "../token/ERC1155/extensions/ERC1155PausableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC1155PausableMockUpgradeable is Initializable, ERC1155MockUpgradeable, ERC1155PausableUpgradeable { contract ERC1155PausableMockUpgradeable is Initializable, ERC1155MockUpgradeable, ERC1155PausableUpgradeable {
function __ERC1155PausableMock_init(string memory uri) internal initializer { function __ERC1155PausableMock_init(string memory uri) internal initializer {
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../token/ERC1155/IERC1155ReceiverUpgradeable.sol"; import "../token/ERC1155/IERC1155ReceiverUpgradeable.sol";
import "../utils/introspection/ERC165Upgradeable.sol"; import "../utils/introspection/ERC165Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC1155ReceiverMockUpgradeable is Initializable, IERC1155ReceiverUpgradeable, ERC165Upgradeable { contract ERC1155ReceiverMockUpgradeable is Initializable, IERC1155ReceiverUpgradeable, ERC165Upgradeable {
bytes4 private _recRetval; bytes4 private _recRetval;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165Upgradeable.sol"; import "../../utils/introspection/IERC165Upgradeable.sol";
import "../../utils/Initializable.sol"; import "../../proxy/utils/Initializable.sol";
/** /**
* https://eips.ethereum.org/EIPS/eip-214#specification * https://eips.ethereum.org/EIPS/eip-214#specification
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../../utils/Initializable.sol"; import "../../proxy/utils/Initializable.sol";
contract ERC165MissingDataUpgradeable is Initializable { contract ERC165MissingDataUpgradeable is Initializable {
function __ERC165MissingData_init() internal initializer { function __ERC165MissingData_init() internal initializer {
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../../utils/Initializable.sol"; import "../../proxy/utils/Initializable.sol";
contract ERC165NotSupportedUpgradeable is Initializable { function __ERC165NotSupported_init() internal initializer { contract ERC165NotSupportedUpgradeable is Initializable { function __ERC165NotSupported_init() internal initializer {
__ERC165NotSupported_init_unchained(); __ERC165NotSupported_init_unchained();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/introspection/ERC165CheckerUpgradeable.sol"; import "../utils/introspection/ERC165CheckerUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC165CheckerMockUpgradeable is Initializable { contract ERC165CheckerMockUpgradeable is Initializable {
function __ERC165CheckerMock_init() internal initializer { function __ERC165CheckerMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/introspection/ERC165Upgradeable.sol"; import "../utils/introspection/ERC165Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC165MockUpgradeable is Initializable, ERC165Upgradeable { contract ERC165MockUpgradeable is Initializable, ERC165Upgradeable {
function __ERC165Mock_init() internal initializer { function __ERC165Mock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/introspection/ERC165StorageUpgradeable.sol"; import "../utils/introspection/ERC165StorageUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC165StorageMockUpgradeable is Initializable, ERC165StorageUpgradeable { contract ERC165StorageMockUpgradeable is Initializable, ERC165StorageUpgradeable {
function __ERC165StorageMock_init() internal initializer { function __ERC165StorageMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/introspection/ERC1820ImplementerUpgradeable.sol"; import "../utils/introspection/ERC1820ImplementerUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC1820ImplementerMockUpgradeable is Initializable, ERC1820ImplementerUpgradeable { contract ERC1820ImplementerMockUpgradeable is Initializable, ERC1820ImplementerUpgradeable {
function __ERC1820ImplementerMock_init() internal initializer { function __ERC1820ImplementerMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC20/extensions/ERC20BurnableUpgradeable.sol"; import "../token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC20BurnableMockUpgradeable is Initializable, ERC20BurnableUpgradeable { contract ERC20BurnableMockUpgradeable is Initializable, ERC20BurnableUpgradeable {
function __ERC20BurnableMock_init( function __ERC20BurnableMock_init(
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC20/extensions/ERC20CappedUpgradeable.sol"; import "../token/ERC20/extensions/ERC20CappedUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC20CappedMockUpgradeable is Initializable, ERC20CappedUpgradeable { contract ERC20CappedMockUpgradeable is Initializable, ERC20CappedUpgradeable {
function __ERC20CappedMock_init(string memory name, string memory symbol, uint256 cap) internal initializer { function __ERC20CappedMock_init(string memory name, string memory symbol, uint256 cap) internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC20/ERC20Upgradeable.sol"; import "../token/ERC20/ERC20Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC20DecimalsMockUpgradeable is Initializable, ERC20Upgradeable { contract ERC20DecimalsMockUpgradeable is Initializable, ERC20Upgradeable {
uint8 private _decimals; uint8 private _decimals;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC20/ERC20Upgradeable.sol"; import "../token/ERC20/ERC20Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// mock class using ERC20 // mock class using ERC20
contract ERC20MockUpgradeable is Initializable, ERC20Upgradeable { contract ERC20MockUpgradeable is Initializable, ERC20Upgradeable {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC20/extensions/ERC20PausableUpgradeable.sol"; import "../token/ERC20/extensions/ERC20PausableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// mock class using ERC20Pausable // mock class using ERC20Pausable
contract ERC20PausableMockUpgradeable is Initializable, ERC20PausableUpgradeable { contract ERC20PausableMockUpgradeable is Initializable, ERC20PausableUpgradeable {
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol"; import "../token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC20PermitMockUpgradeable is Initializable, ERC20PermitUpgradeable { contract ERC20PermitMockUpgradeable is Initializable, ERC20PermitUpgradeable {
function __ERC20PermitMock_init( function __ERC20PermitMock_init(
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC20/extensions/ERC20SnapshotUpgradeable.sol"; import "../token/ERC20/extensions/ERC20SnapshotUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC20SnapshotMockUpgradeable is Initializable, ERC20SnapshotUpgradeable { contract ERC20SnapshotMockUpgradeable is Initializable, ERC20SnapshotUpgradeable {
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "./ContextMockUpgradeable.sol"; import "./ContextMockUpgradeable.sol";
import "../metatx/ERC2771ContextUpgradeable.sol"; import "../metatx/ERC2771ContextUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// By inheriting from ERC2771Context, Context's internal functions are overridden automatically // By inheriting from ERC2771Context, Context's internal functions are overridden automatically
contract ERC2771ContextMockUpgradeable is Initializable, ContextMockUpgradeable, ERC2771ContextUpgradeable { contract ERC2771ContextMockUpgradeable is Initializable, ContextMockUpgradeable, ERC2771ContextUpgradeable {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC721/extensions/ERC721BurnableUpgradeable.sol"; import "../token/ERC721/extensions/ERC721BurnableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC721BurnableMockUpgradeable is Initializable, ERC721BurnableUpgradeable { contract ERC721BurnableMockUpgradeable is Initializable, ERC721BurnableUpgradeable {
function __ERC721BurnableMock_init(string memory name, string memory symbol) internal initializer { function __ERC721BurnableMock_init(string memory name, string memory symbol) internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC721/extensions/ERC721EnumerableUpgradeable.sol"; import "../token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title ERC721Mock * @title ERC721Mock
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC721/ERC721Upgradeable.sol"; import "../token/ERC721/ERC721Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title ERC721Mock * @title ERC721Mock
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC721/extensions/ERC721PausableUpgradeable.sol"; import "../token/ERC721/extensions/ERC721PausableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title ERC721PausableMock * @title ERC721PausableMock
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC721/IERC721ReceiverUpgradeable.sol"; import "../token/ERC721/IERC721ReceiverUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC721ReceiverMockUpgradeable is Initializable, IERC721ReceiverUpgradeable { contract ERC721ReceiverMockUpgradeable is Initializable, IERC721ReceiverUpgradeable {
enum Error { enum Error {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../token/ERC721/extensions/ERC721URIStorageUpgradeable.sol"; import "../token/ERC721/extensions/ERC721URIStorageUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title ERC721Mock * @title ERC721Mock
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../token/ERC777/ERC777Upgradeable.sol"; import "../token/ERC777/ERC777Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC777MockUpgradeable is Initializable, ContextUpgradeable, ERC777Upgradeable { contract ERC777MockUpgradeable is Initializable, ContextUpgradeable, ERC777Upgradeable {
event BeforeTokenTransfer(); event BeforeTokenTransfer();
...@@ -40,6 +40,16 @@ contract ERC777MockUpgradeable is Initializable, ContextUpgradeable, ERC777Upgra ...@@ -40,6 +40,16 @@ contract ERC777MockUpgradeable is Initializable, ContextUpgradeable, ERC777Upgra
_mint(to, amount, userData, operatorData); _mint(to, amount, userData, operatorData);
} }
function mintInternalExtended (
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData,
bool requireReceptionAck
) public {
_mint(to, amount, userData, operatorData, requireReceptionAck);
}
function approveInternal(address holder, address spender, uint256 value) public { function approveInternal(address holder, address spender, uint256 value) public {
_approve(holder, spender, value); _approve(holder, spender, value);
} }
......
...@@ -8,7 +8,7 @@ import "../token/ERC777/IERC777RecipientUpgradeable.sol"; ...@@ -8,7 +8,7 @@ import "../token/ERC777/IERC777RecipientUpgradeable.sol";
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/introspection/IERC1820RegistryUpgradeable.sol"; import "../utils/introspection/IERC1820RegistryUpgradeable.sol";
import "../utils/introspection/ERC1820ImplementerUpgradeable.sol"; import "../utils/introspection/ERC1820ImplementerUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC777SenderRecipientMockUpgradeable is Initializable, ContextUpgradeable, IERC777SenderUpgradeable, IERC777RecipientUpgradeable, ERC1820ImplementerUpgradeable { contract ERC777SenderRecipientMockUpgradeable is Initializable, ContextUpgradeable, IERC777SenderUpgradeable, IERC777RecipientUpgradeable, ERC1820ImplementerUpgradeable {
function __ERC777SenderRecipientMock_init() internal initializer { function __ERC777SenderRecipientMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/structs/EnumerableMapUpgradeable.sol"; import "../utils/structs/EnumerableMapUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract EnumerableMapMockUpgradeable is Initializable { contract EnumerableMapMockUpgradeable is Initializable {
function __EnumerableMapMock_init() internal initializer { function __EnumerableMapMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/structs/EnumerableSetUpgradeable.sol"; import "../utils/structs/EnumerableSetUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// Bytes32Set // Bytes32Set
contract EnumerableBytes32SetMockUpgradeable is Initializable { contract EnumerableBytes32SetMockUpgradeable is Initializable {
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract EtherReceiverMockUpgradeable is Initializable { contract EtherReceiverMockUpgradeable is Initializable {
function __EtherReceiverMock_init() internal initializer { function __EtherReceiverMock_init() internal initializer {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title InitializableMock * @title InitializableMock
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/math/MathUpgradeable.sol"; import "../utils/math/MathUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract MathMockUpgradeable is Initializable { contract MathMockUpgradeable is Initializable {
function __MathMock_init() internal initializer { function __MathMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/cryptography/MerkleProofUpgradeable.sol"; import "../utils/cryptography/MerkleProofUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract MerkleProofWrapperUpgradeable is Initializable { contract MerkleProofWrapperUpgradeable is Initializable {
function __MerkleProofWrapper_init() internal initializer { function __MerkleProofWrapper_init() internal initializer {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// Sample contracts showing upgradeability with multiple inheritance. // Sample contracts showing upgradeability with multiple inheritance.
// Child contract inherits from Father and Mother contracts, and Father extends from Gramps. // Child contract inherits from Father and Mother contracts, and Father extends from Gramps.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../access/OwnableUpgradeable.sol"; import "../access/OwnableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract OwnableMockUpgradeable is Initializable, OwnableUpgradeable { function __OwnableMock_init() internal initializer { contract OwnableMockUpgradeable is Initializable, OwnableUpgradeable { function __OwnableMock_init() internal initializer {
__Context_init_unchained(); __Context_init_unchained();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../security/PausableUpgradeable.sol"; import "../security/PausableUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract PausableMockUpgradeable is Initializable, PausableUpgradeable { contract PausableMockUpgradeable is Initializable, PausableUpgradeable {
bool public drasticMeasureTaken; bool public drasticMeasureTaken;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../security/PullPaymentUpgradeable.sol"; import "../security/PullPaymentUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
// mock class using PullPayment // mock class using PullPayment
contract PullPaymentMockUpgradeable is Initializable, PullPaymentUpgradeable { contract PullPaymentMockUpgradeable is Initializable, PullPaymentUpgradeable {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ReentrancyAttackUpgradeable is Initializable, ContextUpgradeable { contract ReentrancyAttackUpgradeable is Initializable, ContextUpgradeable {
function __ReentrancyAttack_init() internal initializer { function __ReentrancyAttack_init() internal initializer {
__Context_init_unchained(); __Context_init_unchained();
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../security/ReentrancyGuardUpgradeable.sol"; import "../security/ReentrancyGuardUpgradeable.sol";
import "./ReentrancyAttackUpgradeable.sol"; import "./ReentrancyAttackUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ReentrancyMockUpgradeable is Initializable, ReentrancyGuardUpgradeable { contract ReentrancyMockUpgradeable is Initializable, ReentrancyGuardUpgradeable {
uint256 public counter; uint256 public counter;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract Implementation1 is Initializable { contract Implementation1 is Initializable {
uint internal _value; uint internal _value;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/math/SafeCastUpgradeable.sol"; import "../utils/math/SafeCastUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract SafeCastMockUpgradeable is Initializable { contract SafeCastMockUpgradeable is Initializable {
function __SafeCastMock_init() internal initializer { function __SafeCastMock_init() internal initializer {
......
...@@ -5,7 +5,7 @@ pragma solidity ^0.8.0; ...@@ -5,7 +5,7 @@ pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../token/ERC20/IERC20Upgradeable.sol"; import "../token/ERC20/IERC20Upgradeable.sol";
import "../token/ERC20/utils/SafeERC20Upgradeable.sol"; import "../token/ERC20/utils/SafeERC20Upgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract ERC20ReturnFalseMockUpgradeable is Initializable, ContextUpgradeable { contract ERC20ReturnFalseMockUpgradeable is Initializable, ContextUpgradeable {
function __ERC20ReturnFalseMock_init() internal initializer { function __ERC20ReturnFalseMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/math/SafeMathUpgradeable.sol"; import "../utils/math/SafeMathUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract SafeMathMockUpgradeable is Initializable { contract SafeMathMockUpgradeable is Initializable {
function __SafeMathMock_init() internal initializer { function __SafeMathMock_init() internal initializer {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/math/SignedSafeMathUpgradeable.sol"; import "../utils/math/SignedSafeMathUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract SignedSafeMathMockUpgradeable is Initializable { contract SignedSafeMathMockUpgradeable is Initializable {
function __SignedSafeMathMock_init() internal initializer { function __SignedSafeMathMock_init() internal initializer {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @title MigratableMockV1 * @title MigratableMockV1
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/StringsUpgradeable.sol"; import "../utils/StringsUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
contract StringsMockUpgradeable is Initializable { contract StringsMockUpgradeable is Initializable {
function __StringsMock_init() internal initializer { function __StringsMock_init() internal initializer {
......
...@@ -40,3 +40,7 @@ CAUTION: Using upgradeable proxies correctly and securely is a difficult task th ...@@ -40,3 +40,7 @@ CAUTION: Using upgradeable proxies correctly and securely is a difficult task th
== Minimal Clones == Minimal Clones
{{Clones}} {{Clones}}
== Utils
{{Initializable}}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// solhint-disable-next-line compiler-version // solhint-disable-next-line compiler-version
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "./AddressUpgradeable.sol"; import "../../utils/AddressUpgradeable.sol";
/** /**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/ContextUpgradeable.sol"; import "../utils/ContextUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev Contract module which allows children to implement an emergency stop * @dev Contract module which allows children to implement an emergency stop
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/escrow/EscrowUpgradeable.sol"; import "../utils/escrow/EscrowUpgradeable.sol";
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev Simple implementation of a * @dev Simple implementation of a
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../utils/Initializable.sol"; import "../proxy/utils/Initializable.sol";
/** /**
* @dev Contract module that helps prevent reentrant calls to a function. * @dev Contract module that helps prevent reentrant calls to a function.
......
...@@ -8,7 +8,7 @@ import "./extensions/IERC1155MetadataURIUpgradeable.sol"; ...@@ -8,7 +8,7 @@ import "./extensions/IERC1155MetadataURIUpgradeable.sol";
import "../../utils/AddressUpgradeable.sol"; import "../../utils/AddressUpgradeable.sol";
import "../../utils/ContextUpgradeable.sol"; import "../../utils/ContextUpgradeable.sol";
import "../../utils/introspection/ERC165Upgradeable.sol"; import "../../utils/introspection/ERC165Upgradeable.sol";
import "../../utils/Initializable.sol"; import "../../proxy/utils/Initializable.sol";
/** /**
* *
...@@ -62,7 +62,7 @@ contract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradea ...@@ -62,7 +62,7 @@ contract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradea
* Clients calling this function must replace the `\{id\}` substring with the * Clients calling this function must replace the `\{id\}` substring with the
* actual token type ID. * actual token type ID.
*/ */
function uri(uint256) external view virtual override returns (string memory) { function uri(uint256) public view virtual override returns (string memory) {
return _uri; return _uri;
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../ERC1155Upgradeable.sol"; import "../ERC1155Upgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev Extension of {ERC1155} that allows token holders to destroy both their * @dev Extension of {ERC1155} that allows token holders to destroy both their
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../ERC1155Upgradeable.sol"; import "../ERC1155Upgradeable.sol";
import "../../../security/PausableUpgradeable.sol"; import "../../../security/PausableUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev ERC1155 token with pausable token transfers, minting and burning. * @dev ERC1155 token with pausable token transfers, minting and burning.
......
...@@ -7,7 +7,7 @@ import "../extensions/ERC1155BurnableUpgradeable.sol"; ...@@ -7,7 +7,7 @@ import "../extensions/ERC1155BurnableUpgradeable.sol";
import "../extensions/ERC1155PausableUpgradeable.sol"; import "../extensions/ERC1155PausableUpgradeable.sol";
import "../../../access/AccessControlEnumerableUpgradeable.sol"; import "../../../access/AccessControlEnumerableUpgradeable.sol";
import "../../../utils/ContextUpgradeable.sol"; import "../../../utils/ContextUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev {ERC1155} token, including: * @dev {ERC1155} token, including:
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "./ERC1155ReceiverUpgradeable.sol"; import "./ERC1155ReceiverUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev _Available since v3.1._ * @dev _Available since v3.1._
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../IERC1155ReceiverUpgradeable.sol"; import "../IERC1155ReceiverUpgradeable.sol";
import "../../../utils/introspection/ERC165Upgradeable.sol"; import "../../../utils/introspection/ERC165Upgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev _Available since v3.1._ * @dev _Available since v3.1._
......
...@@ -3,8 +3,9 @@ ...@@ -3,8 +3,9 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "./IERC20Upgradeable.sol"; import "./IERC20Upgradeable.sol";
import "./extensions/IERC20MetadataUpgradeable.sol";
import "../../utils/ContextUpgradeable.sol"; import "../../utils/ContextUpgradeable.sol";
import "../../utils/Initializable.sol"; import "../../proxy/utils/Initializable.sol";
/** /**
* @dev Implementation of the {IERC20} interface. * @dev Implementation of the {IERC20} interface.
...@@ -30,7 +31,7 @@ import "../../utils/Initializable.sol"; ...@@ -30,7 +31,7 @@ import "../../utils/Initializable.sol";
* functions have been added to mitigate the well-known issues around setting * functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}. * allowances. See {IERC20-approve}.
*/ */
contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable { contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {
mapping (address => uint256) private _balances; mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances; mapping (address => mapping (address => uint256)) private _allowances;
...@@ -62,7 +63,7 @@ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeabl ...@@ -62,7 +63,7 @@ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeabl
/** /**
* @dev Returns the name of the token. * @dev Returns the name of the token.
*/ */
function name() public view virtual returns (string memory) { function name() public view virtual override returns (string memory) {
return _name; return _name;
} }
...@@ -70,7 +71,7 @@ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeabl ...@@ -70,7 +71,7 @@ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeabl
* @dev Returns the symbol of the token, usually a shorter version of the * @dev Returns the symbol of the token, usually a shorter version of the
* name. * name.
*/ */
function symbol() public view virtual returns (string memory) { function symbol() public view virtual override returns (string memory) {
return _symbol; return _symbol;
} }
...@@ -87,7 +88,7 @@ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeabl ...@@ -87,7 +88,7 @@ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeabl
* no way affects any of the arithmetic of the contract, including * no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}. * {IERC20-balanceOf} and {IERC20-transfer}.
*/ */
function decimals() public view virtual returns (uint8) { function decimals() public view virtual override returns (uint8) {
return 18; return 18;
} }
......
...@@ -10,6 +10,7 @@ TIP: For an overview of ERC20 tokens and a walk through on how to create a token ...@@ -10,6 +10,7 @@ TIP: For an overview of ERC20 tokens and a walk through on how to create a token
There a few core contracts that implement the behavior specified in the EIP: There a few core contracts that implement the behavior specified in the EIP:
* {IERC20}: the interface all ERC20 implementations should conform to. * {IERC20}: the interface all ERC20 implementations should conform to.
* {IERC20Metadata}: the extended ERC20 interface including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> functions.
* {ERC20}: the implementation of the ERC20 interface, including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> optional standard extension to the base interface. * {ERC20}: the implementation of the ERC20 interface, including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> optional standard extension to the base interface.
Additionally there are multiple custom extensions, including: Additionally there are multiple custom extensions, including:
...@@ -36,6 +37,8 @@ NOTE: This core set of contracts is designed to be unopinionated, allowing devel ...@@ -36,6 +37,8 @@ NOTE: This core set of contracts is designed to be unopinionated, allowing devel
{{IERC20}} {{IERC20}}
{{IERC20Metadata}}
{{ERC20}} {{ERC20}}
== Extensions == Extensions
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../ERC20Upgradeable.sol"; import "../ERC20Upgradeable.sol";
import "../../../utils/ContextUpgradeable.sol"; import "../../../utils/ContextUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev Extension of {ERC20} that allows token holders to destroy both their own * @dev Extension of {ERC20} that allows token holders to destroy both their own
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../ERC20Upgradeable.sol"; import "../ERC20Upgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev Extension of {ERC20} that adds a cap to the supply of tokens. * @dev Extension of {ERC20} that adds a cap to the supply of tokens.
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../ERC20Upgradeable.sol"; import "../ERC20Upgradeable.sol";
import "../../../security/PausableUpgradeable.sol"; import "../../../security/PausableUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev ERC20 token with pausable token transfers, minting and burning. * @dev ERC20 token with pausable token transfers, minting and burning.
......
...@@ -5,7 +5,7 @@ pragma solidity ^0.8.0; ...@@ -5,7 +5,7 @@ pragma solidity ^0.8.0;
import "../ERC20Upgradeable.sol"; import "../ERC20Upgradeable.sol";
import "../../../utils/ArraysUpgradeable.sol"; import "../../../utils/ArraysUpgradeable.sol";
import "../../../utils/CountersUpgradeable.sol"; import "../../../utils/CountersUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev This contract extends an ERC20 token with a snapshot mechanism. When a snapshot is created, the balances and * @dev This contract extends an ERC20 token with a snapshot mechanism. When a snapshot is created, the balances and
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../IERC20Upgradeable.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
interface IERC20MetadataUpgradeable is IERC20Upgradeable {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
...@@ -7,7 +7,7 @@ import "../ERC20Upgradeable.sol"; ...@@ -7,7 +7,7 @@ import "../ERC20Upgradeable.sol";
import "../../../utils/cryptography/draft-EIP712Upgradeable.sol"; import "../../../utils/cryptography/draft-EIP712Upgradeable.sol";
import "../../../utils/cryptography/ECDSAUpgradeable.sol"; import "../../../utils/cryptography/ECDSAUpgradeable.sol";
import "../../../utils/CountersUpgradeable.sol"; import "../../../utils/CountersUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
...@@ -55,7 +55,7 @@ abstract contract ERC20PermitUpgradeable is Initializable, ERC20Upgradeable, IER ...@@ -55,7 +55,7 @@ abstract contract ERC20PermitUpgradeable is Initializable, ERC20Upgradeable, IER
owner, owner,
spender, spender,
value, value,
_nonces[owner].current(), _useNonce(owner),
deadline deadline
) )
); );
...@@ -65,14 +65,13 @@ abstract contract ERC20PermitUpgradeable is Initializable, ERC20Upgradeable, IER ...@@ -65,14 +65,13 @@ abstract contract ERC20PermitUpgradeable is Initializable, ERC20Upgradeable, IER
address signer = ECDSAUpgradeable.recover(hash, v, r, s); address signer = ECDSAUpgradeable.recover(hash, v, r, s);
require(signer == owner, "ERC20Permit: invalid signature"); require(signer == owner, "ERC20Permit: invalid signature");
_nonces[owner].increment();
_approve(owner, spender, value); _approve(owner, spender, value);
} }
/** /**
* @dev See {IERC20Permit-nonces}. * @dev See {IERC20Permit-nonces}.
*/ */
function nonces(address owner) public view override returns (uint256) { function nonces(address owner) public view virtual override returns (uint256) {
return _nonces[owner].current(); return _nonces[owner].current();
} }
...@@ -83,5 +82,14 @@ abstract contract ERC20PermitUpgradeable is Initializable, ERC20Upgradeable, IER ...@@ -83,5 +82,14 @@ abstract contract ERC20PermitUpgradeable is Initializable, ERC20Upgradeable, IER
function DOMAIN_SEPARATOR() external view override returns (bytes32) { function DOMAIN_SEPARATOR() external view override returns (bytes32) {
return _domainSeparatorV4(); return _domainSeparatorV4();
} }
/**
* @dev "Consume a nonce": return the current value and increment.
*/
function _useNonce(address owner) internal virtual returns (uint256 current) {
CountersUpgradeable.Counter storage nonce = _nonces[owner];
current = nonce.current();
nonce.increment();
}
uint256[49] private __gap; uint256[49] private __gap;
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../extensions/ERC20BurnableUpgradeable.sol"; import "../extensions/ERC20BurnableUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev {ERC20} token, including: * @dev {ERC20} token, including:
......
...@@ -7,7 +7,7 @@ import "../extensions/ERC20BurnableUpgradeable.sol"; ...@@ -7,7 +7,7 @@ import "../extensions/ERC20BurnableUpgradeable.sol";
import "../extensions/ERC20PausableUpgradeable.sol"; import "../extensions/ERC20PausableUpgradeable.sol";
import "../../../access/AccessControlEnumerableUpgradeable.sol"; import "../../../access/AccessControlEnumerableUpgradeable.sol";
import "../../../utils/ContextUpgradeable.sol"; import "../../../utils/ContextUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev {ERC20} token, including: * @dev {ERC20} token, including:
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "./SafeERC20Upgradeable.sol"; import "./SafeERC20Upgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev A token holder contract that will allow a beneficiary to extract the * @dev A token holder contract that will allow a beneficiary to extract the
......
...@@ -10,7 +10,7 @@ import "../../utils/AddressUpgradeable.sol"; ...@@ -10,7 +10,7 @@ import "../../utils/AddressUpgradeable.sol";
import "../../utils/ContextUpgradeable.sol"; import "../../utils/ContextUpgradeable.sol";
import "../../utils/StringsUpgradeable.sol"; import "../../utils/StringsUpgradeable.sol";
import "../../utils/introspection/ERC165Upgradeable.sol"; import "../../utils/introspection/ERC165Upgradeable.sol";
import "../../utils/Initializable.sol"; import "../../proxy/utils/Initializable.sol";
/** /**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
...@@ -230,7 +230,7 @@ contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeab ...@@ -230,7 +230,7 @@ contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeab
* @dev Safely mints `tokenId` and transfers it to `to`. * @dev Safely mints `tokenId` and transfers it to `to`.
* *
* Requirements: * Requirements:
d* *
* - `tokenId` must not exist. * - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
* *
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../ERC721Upgradeable.sol"; import "../ERC721Upgradeable.sol";
import "../../../utils/ContextUpgradeable.sol"; import "../../../utils/ContextUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @title ERC721 Burnable Token * @title ERC721 Burnable Token
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../ERC721Upgradeable.sol"; import "../ERC721Upgradeable.sol";
import "./IERC721EnumerableUpgradeable.sol"; import "./IERC721EnumerableUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import "../ERC721Upgradeable.sol"; import "../ERC721Upgradeable.sol";
import "../../../security/PausableUpgradeable.sol"; import "../../../security/PausableUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev ERC721 token with pausable token transfers, minting and burning. * @dev ERC721 token with pausable token transfers, minting and burning.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import "../ERC721Upgradeable.sol"; import "../ERC721Upgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev ERC721 token with storage based token uri management. * @dev ERC721 token with storage based token uri management.
......
...@@ -9,7 +9,7 @@ import "../extensions/ERC721PausableUpgradeable.sol"; ...@@ -9,7 +9,7 @@ import "../extensions/ERC721PausableUpgradeable.sol";
import "../../../access/AccessControlEnumerableUpgradeable.sol"; import "../../../access/AccessControlEnumerableUpgradeable.sol";
import "../../../utils/ContextUpgradeable.sol"; import "../../../utils/ContextUpgradeable.sol";
import "../../../utils/CountersUpgradeable.sol"; import "../../../utils/CountersUpgradeable.sol";
import "../../../utils/Initializable.sol"; import "../../../proxy/utils/Initializable.sol";
/** /**
* @dev {ERC721} token, including: * @dev {ERC721} token, including:
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment