-
Notifications
You must be signed in to change notification settings - Fork 12.3k
Open
Description
Using the wizard, create a contract ERC20 with UUPS.
The resulting code is:
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.5.0
pragma solidity ^0.8.27;
import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
/// @custom:oz-upgrades-unsafe-allow constructor
constructor() {
_disableInitializers();
}
function initialize(address initialOwner) public initializer {
__ERC20_init("MyToken", "MTK");
__Ownable_init(initialOwner);
}
function _authorizeUpgrade(address newImplementation)
internal
override
onlyOwner
{}
}
Using Remix IDE, compile the code.
The result is these errors:
TypeError: Derived contract must override function "_checkInitializing". Two or more base classes define function with same name and parameter types.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:178:5:
|
178 | function _checkInitializing() internal view virtual {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:178:5:
|
178 | function _checkInitializing() internal view virtual {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override function "_disableInitializers". Two or more base classes define function with same name and parameter types.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:192:5:
|
192 | function _disableInitializers() internal virtual {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:192:5:
|
192 | function _disableInitializers() internal virtual {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override function "_getInitializableStorage". Two or more base classes define function with same name and parameter types.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:232:5:
|
232 | function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:232:5:
|
232 | function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override function "_getInitializedVersion". Two or more base classes define function with same name and parameter types.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:208:5:
|
208 | function _getInitializedVersion() internal view returns (uint64) {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:208:5:
|
208 | function _getInitializedVersion() internal view returns (uint64) {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override function "_initializableStorageSlot". Two or more base classes define function with same name and parameter types.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:224:5:
|
224 | function _initializableStorageSlot() internal pure virtual returns (bytes32) {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:224:5:
|
224 | function _initializableStorageSlot() internal pure virtual returns (bytes32) {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override function "_isInitializing". Two or more base classes define function with same name and parameter types.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:215:5:
|
215 | function _isInitializing() internal view returns (bool) {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:215:5:
|
215 | function _isInitializing() internal view returns (bool) {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override modifier "initializer". Two or more base classes define modifier with same name.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:104:5:
|
104 | modifier initializer() {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:104:5:
|
104 | modifier initializer() {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override modifier "onlyInitializing". Two or more base classes define modifier with same name.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:170:5:
|
170 | modifier onlyInitializing() {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:170:5:
|
170 | modifier onlyInitializing() {
| ^ (Relevant source part starts here and spans across multiple lines).
TypeError: Derived contract must override modifier "reinitializer". Two or more base classes define modifier with same name.
--> src/test.sol:10:1:
|
10 | contract MyToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:152:5:
|
152 | modifier reinitializer(uint64 version) {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Definition in "Initializable":
--> @openzeppelin/contracts/proxy/utils/Initializable.sol:152:5:
|
152 | modifier reinitializer(uint64 version) {
| ^ (Relevant source part starts here and spans across multiple lines).
Metadata
Metadata
Assignees
Labels
No labels