contract RankerDAOToken is Ownable, ERC20 {
  uint256 constant MILLION = 1_000_000 * 10**uint256(18);

  constructor() ERC20('RankerDAO', 'RANKER') {
    _mint(msg.sender, 300 * MILLION);
  }


  /**
   * Allows the owner of the contract to release tokens that were erronously sent to this  
   * ERC20 smart contract. This covers any mistakes from the end-user side
   * @param token the token that we want to withdraw
   * @param recipient the address that will receive the tokens
   * @param amount the amount of tokens
   */
  function tokenRescue(
    IERC20 token,
    address recipient,
    uint256 amount
  ) onlyOwner external {
    token.transfer(recipient, amount);
  }
}
function tokenRescue(
  IERC20 token,
  address recipient,
  uint256 amount
) onlyOwner external {
  token.transfer(recipient, amount);
}

/**
 * Allows the owner of the contract to release tokens that were erronously sent to this  
 * ERC20 smart contract. This covers any mistakes from the end-user side
 * @param token the token that we want to withdraw
 * @param recipient the address that will receive the tokens
 * @param amount the amount of tokens
 */