contract EVEExchangeERC20 is
    ERC20,
    AccessControlMixin,
    NativeMetaTransaction,
    ContextMixin,
    IMintableERC20
{
    bytes32 public constant PREDICATE_ROLE = keccak256("PREDICATE_ROLE");

    constructor()
        public
        ERC20("EVE Exchange", "EVE")
    {
        _setupContractId("EVEExchangeERC20");
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        // Polygon Bridge authorized to mint
        // https://docs.polygon.technology/docs/develop/ethereum-polygon/mintable-assets/#contract-to-be-deployed-on-ethereum
        _setupRole(PREDICATE_ROLE, 0x9923263fA127b3d1484cFD649df8f1831c2A74e4);

        _mint(_msgSender(), 100000000 * (10**18));
        _initializeEIP712("EVE Exchange");
    }

    /**
     * @dev See {IMintableERC20-mint}.
     */
    function mint(address user, uint256 amount) external override only(PREDICATE_ROLE) {
        _mint(user, amount);
    }

    function _msgSender()
        internal
        override
        view
        returns (address payable sender)
    {
        return ContextMixin.msgSender();
    }
}
function mint(address user, uint256 amount) external override only(PREDICATE_ROLE) {
    _mint(user, amount);
}

/**
 * @dev See {IMintableERC20-mint}.
 */