Hi, I tried to upgrade the defender sample multisig contract from version 0.6.0 to version 0.8.0 but meeting override problem on mint function. I am using Remix to compile the contract. Thanks for helping!
Environment
Details
TypeError: Function has override specified but does not override anything.
--> contracts/erc20Token.sol:34:62:
|
34 | function mint(address to, uint256 amount) public virtual override (ERC20Capped, ERC20){
| ^^^^^^^^^^^^^^^^^^^^^^^^^
Code to reproduce
/ SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Capped.sol";
contract MyToken is Context, AccessControl, ERC20, ERC20Burnable, ERC20Pausable, ERC20Capped{
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
/**
* @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the
* account.
*
*/
constructor(string memory name, string memory symbol, address account, uint256 cap, uint8 decimals) public ERC20(name, symbol) ERC20Capped(cap * (10**uint256(decimals))) {
_setupRole(DEFAULT_ADMIN_ROLE, account);
_setupRole(MINTER_ROLE, account);
_setupRole(PAUSER_ROLE, account);
}
/**
* @dev Creates `amount` new tokens for `to`.
*
* Requirements:
*
* - the caller must have the `MINTER_ROLE`.
*/
function mint(address to, uint256 amount) public virtual override (ERC20Capped, ERC20){
require(hasRole(MINTER_ROLE, _msgSender()), "MyToken: must have minter role to mint");
_mint(to, amount);
}