Skip to main content
PulseScanner.io

Address

0xcd2828fc4d8e8a0ede91bb38cf64b1a81de65bf6
Current Holdings
$0.00
TXs sent
not counted
First Active
2023-05-13
block 17,254,314
Last Active
230 days ago
block 25,671,024
Funded By
not identified

Net worth historyi

2 snapshots · to block 27,427,935coverage change 26 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Aug
exact matchOddzTokensolc 0.7.4+commit.3f05b770runtime exact · creation exact
// SPDX-License-Identifier: BSD-4-Clause
pragma solidity ^0.7.0;

import { ERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { ERC20Permit } from "@openzeppelin/contracts/drafts/ERC20Permit.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";

/**
 * @title Oddz Token
 * @dev Oddz ERC20 Token
 */
contract OddzToken is ERC20, ERC20Permit, Ownable {
    using SafeERC20 for IERC20;

    event RescueTokens(address indexed token, address indexed destination, uint256 indexed amount);

    constructor(
        string memory name,
        string memory symbol,
        uint256 totalSupply
    ) public ERC20(name, symbol) ERC20Permit(name) {
        _mint(msg.sender, totalSupply * (10**decimals()));
    }

    /**
     * @notice Function to rescue funds
     * Owner is assumed to be governance or Oddz trusted party for helping users
     * Function can be disabled by destroying ownership via `renounceOwnership` function
     * @param token Address of token to be rescued
     * @param destination User address
     * @param amount Amount of tokens
     */
    function rescueTokens(
        address token,
        address destination,
        uint256 amount
    ) external onlyOwner {
        require(token != destination, "Invalid address");
        IERC20(token).safeTransfer(destination, amount);
        emit RescueTokens(token, destination, amount);
    }
}