Hi
I am trying to deploy a contract from the OpenZeppelin Wizard.
I downloaded the zip and then today unzipped it and loaded it into remix.
I am getting the following error when trying to compile it.
TypeError: Contract "gToken" should be marked as abstract.
--> gToken.sol:13:1:
|
13 | contract gToken is Initializable, E ... VotesUpgradeable, UUPSUpgradeable {
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Missing implementation:
--> @openzeppelin/contracts-upgradeable@4.2.0/proxy/utils/UUPSUpgradeable.sol:63:5:
|
63 | function _authorizeUpgrade(address newImplementation) internal virtual;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The dependancies are loaded
Code to reproduce
// SPDX-License-Identifier: abstract
pragma solidity ^0.8.2;
import "@openzeppelin/contracts-upgradeable@4.2.0/token/ERC20/ERC20Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable@4.2.0/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable@4.2.0/security/PausableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable@4.2.0/access/AccessControlUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable@4.2.0/token/ERC20/extensions/ERC20VotesUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable@4.2.0/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable@4.2.0/proxy/utils/UUPSUpgradeable.sol";
contract gToken is Initializable, ERC20Upgradeable, ERC20BurnableUpgradeable, PausableUpgradeable, AccessControlUpgradeable, ERC20VotesUpgradeable, UUPSUpgradeable {
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
function initialize() initializer public {
__ERC20_init("GOOGLIETH_DAO", "dGGL");
__ERC20Burnable_init();
__Pausable_init();
__AccessControl_init();
__ERC20Permit_init("GOOGLIETH_DAO");
__UUPSUpgradeable_init();
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
_setupRole(PAUSER_ROLE, msg.sender);
_mint(msg.sender, 1000 * 10 ** decimals());
_setupRole(MINTER_ROLE, msg.sender);
}
function pause() public onlyRole(PAUSER_ROLE) {
_pause();
}
function unpause() public onlyRole(PAUSER_ROLE) {
_unpause();
}
function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {
_mint(to, amount);
}
function _beforeTokenTransfer(address from, address to, uint256 amount)
internal
whenNotPaused
override
{
super._beforeTokenTransfer(from, to, amount);
}
function _afterTokenTransfer(address from, address to, uint256 amount)
internal
override(ERC20Upgradeable, ERC20VotesUpgradeable)
{
super._afterTokenTransfer(from, to, amount);
}
function _mint(address to, uint256 amount)
internal
override(ERC20Upgradeable, ERC20VotesUpgradeable)
{
super._mint(to, amount);
}
function _burn(address account, uint256 amount)
internal
override(ERC20Upgradeable, ERC20VotesUpgradeable)
{
super._burn(account, amount);
}
}
Environment
Remix on Windows10 64, OpenZeppelin wizard, deploying to Matic Mumbai.
Any and all help is appreciated.
Have a good day.