Contract 0x4734Baf528766ec4C420A6C13f8DBa7bB1920181 1

 
 
Txn Hash
Method
Block
From
To
Value
0xbe0e49c3e11e1a4836c83eb6a13ac6e3c993243cacc4207d123e73e2ff942583Transfer151915462022-07-22 9:28:5319 days 13 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0020843130
0xa3530088e7cd933e37bf6684cf97fc043ce0a069fb122e838ac776c9a2278b6bTransfer151257802022-07-12 4:45:0129 days 17 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0020843130
0x04c33c29c012573f4152fb525d3b3edf0410a64e6f928000c67e4ca617641d59Transfer150754682022-07-04 10:20:5037 days 12 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0020839530
0x876831be3b4adb18437021580d1661a6c8d4b911d2570c35d15eaf8269a99e66Transfer150491362022-06-30 7:01:2941 days 15 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0034129249.12305773
0xf6f62a1f1593bc448d92a7bb2aa7eae11228f1ae3e1e2e45b9da431effbcc25cTransfer150059852022-06-22 5:11:4149 days 17 hrs ago0xcb062de41bb3410c1071d4f38d7e885844d77ffd IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0010768920.56515059
0x2aaa73a2b0bd223ee64c51e114b8519349098c302491685a2d63fc2948b28865Transfer150059762022-06-22 5:09:5349 days 17 hrs ago0x70f38780a081d21e52ecd27dd41c2e0bd6f23d22 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0008755318.40721708
0xfa9ccfa3183a05af5e05adadefe1af76cc0cc99546c9b27d5bb1e11a07077be9Transfer150059612022-06-22 5:05:4249 days 17 hrs ago0x70f38780a081d21e52ecd27dd41c2e0bd6f23d22 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0008862216.92788657
0xf992668b0a99f1675d3228b9209208ef37f95d5bafa43b20d4b0b07d06395127Transfer150059212022-06-22 4:56:2749 days 17 hrs ago0x9eacfb0149e34fca1e7a2c01eef54cfd0cdc3a58 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00110547 15.91412604
0x69ff5fb901998046e0196f89bedf582346b7f7098f0f382aec80175bdc008647Approve150058892022-06-22 4:47:4949 days 17 hrs ago0x9eacfb0149e34fca1e7a2c01eef54cfd0cdc3a58 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00090032 19.27399228
0xf46c75bef7d0caa791416ad00706ff396809da29d39df38b1862626051313194Approve148715372022-05-30 8:22:1372 days 14 hrs ago0xcb062de41bb3410c1071d4f38d7e885844d77ffd IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0010802823.12644254
0xe9383ddcabe1cb3628277e1547f0155ceafd4fe960ace1d212563cd76cd82087Approve147735342022-05-14 12:08:2088 days 10 hrs ago0x73833186eb29acbc307e2ef86d279d9fb9af7dce IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00194486 41.63523072
0xcb359c1edfaedf693f25a37a35df3c7a4a7acab2f4afc6815cd914ea6fbab73eApprove146862922022-04-30 15:05:47102 days 7 hrs ago0xda0b2d9a2a1e38c0ea72e788abc57562c297c6ef IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00376419 80.58298583
0x59da4f7ca1ed9eb5ce02ebc89714b1858ed79b266a068af0bc89bcc4a2acd6a1Approve146862572022-04-30 14:58:01102 days 7 hrs ago0xda0b2d9a2a1e38c0ea72e788abc57562c297c6ef IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00364353 78
0x464fe929900f539cde1e8e4bb4f18b8cd08d95b4fe0f54c267ae2cd74526663dTransfer146862532022-04-30 14:56:53102 days 7 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0058934984.84117782
0x7bd68271809f3ddc72592db9224cd2d81950180b7860db3533709029d674f872Approve146839252022-04-30 6:08:24102 days 16 hrs ago0xd3c8f5abe0f6426d68ade75b56f673967c5cb671 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00132597 28.38614632
0x519aa376a43610146edf1311e91abc28795936ba763e3de8b91f2055492d0a21Approve146838852022-04-30 5:59:06102 days 16 hrs ago0xd3c8f5abe0f6426d68ade75b56f673967c5cb671 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0014480731
0xef81b100474d10c4c2d33a3797148e3f4c6281db15141f98229dcf368d7648d9Transfer146838092022-04-30 5:44:21102 days 16 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0028539541.08483697
0xc1912d0edafd1b7201abb4a520b76aa58d0ebddd592f3020fb950f75d7ba92edTransfer146828292022-04-30 2:04:16102 days 20 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0028406340.89302003
0x69f2a216c6264f9c2d730cf6255f8fb55d52c98e6f425d998b0e458151e72698Approve146127442022-04-19 1:50:23113 days 20 hrs ago0x0695f20706887a6823111c6eb659f67303593355 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00093755 20.07097211
0x98cc08719689f329d067d9011f4654e9b7ca65df0a19df709d04e2c7a1237728Transfer146127412022-04-19 1:49:49113 days 20 hrs agoBittrex IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0020843130
0xbe4fcde5d9fdea0589b312c06f1201f5de7d6b03c17b379000407239390f6492Transfer145799312022-04-13 22:49:55118 days 23 hrs ago0x9eacfb0149e34fca1e7a2c01eef54cfd0cdc3a58 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0022142 42.28398692
0xd21269f6076b6d26398980845dea939ccf6171a54176d6c2b27b08ac8e3ca373Transfer145760352022-04-13 8:16:41119 days 14 hrs ago0x2c6de6e4c2b419c7d68b7ede3ac4030586c7b83e IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.0033345947.99567926
0x43887c6764693f307ebb8a3d75c80f4bafbc2d631405cf433780888011e072deTransfer145736982022-04-12 23:13:42119 days 23 hrs ago0x0695f20706887a6823111c6eb659f67303593355 IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00164847 25.48304001
0xa520a8bcedf7488d48eafe29d9b218a00c55b67ebeb5b4e9e943a8b3e23ebf35Transfer145731362022-04-12 21:12:59120 days 1 hr agoENS Name v0lkan.eth IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00242435 50.95640891
0xc4002aab7caad2420f945fdce142d07d60074ac464640db727e3c64a87db01f4Transfer145730192022-04-12 20:46:22120 days 1 hr agoENS Name v0lkan.eth IN 0x4734baf528766ec4c420a6c13f8dba7bb19201810 Ether0.00380349 58.8075482
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x2e33b801ae548dfd53b5cc249ec0c9e53877f06a6abba4784b473f4d0b98bbe2140755122022-01-25 15:24:05197 days 7 hrs ago 0x4734baf528766ec4c420a6c13f8dba7bb1920181  Contract Creation0 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Elvantis

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : Elvantis.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import './interfaces/IElvantisFeeReceiver.sol';
import './ElvantisFeeReceiver.sol';

contract Elvantis is Context, Ownable, ERC20 {
    address public minter;
    IElvantisFeeReceiver public feeReceiver;
    address public pair;

    mapping(address => bool) public taxless;
    mapping(address => uint256) public unlocksAt;

    uint256 public buyFee;
    uint256 public sellFee;
    uint256 public burnFee;

    event MinterUpdated(address indexed minter);
    event FeeReceiverUpdated(address indexed feeReceiver);
    event PairUpdated(address indexed pair);
    event FeeUpdated(uint256 indexed buyFee, uint256 indexed sellFee, uint256 indexed burnFee);

    uint256 constant public FEE_DENOMINATOR = 10000;

    modifier onlyMinter() {
        require(minter == _msgSender(), "Elvantis: Only minter!");
        _;
    }

    constructor(address _minter, address _router) ERC20('Elvantis', 'ELV') {
        require(_minter != address(0) && _router != address(0), "Elvantis: zero address");

        minter = _minter;
        feeReceiver = new ElvantisFeeReceiver(address(this), _router, msg.sender);

        taxless[address(feeReceiver)] = true;
        taxless[_minter] = true;
        taxless[address(this)] = true;
        taxless[msg.sender] = true;

        emit MinterUpdated(_minter);
        emit FeeReceiverUpdated(address(feeReceiver));
    }

    function mint(address account, uint256 amount) onlyMinter external {
        _mint(account, amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        uint256 amountToTransfer = amount;

        require(unlocksAt[sender] < block.timestamp, "Elvantis: Tokens are locked!");

        if(!taxless[sender] && !taxless[recipient]) {
            if(address(feeReceiver) != address(0) && pair != address(0)) {
                uint256 fee;
                if(buyFee != 0 && sender == pair) {
                    fee = amount * buyFee / FEE_DENOMINATOR;
                } else if (sellFee != 0 && recipient == pair) {
                    fee = amount * sellFee / FEE_DENOMINATOR;
                }
                if(fee != 0){
                    amountToTransfer -= fee;
                    super._transfer(sender, address(this), fee);
                    super._approve(address(this), address(feeReceiver), fee);
                    feeReceiver.onFeeReceived(address(this), fee);
                }
            }
            
            if (burnFee != 0) {
                uint256 _burnFee = amount * burnFee / FEE_DENOMINATOR;
                amountToTransfer -= _burnFee;
                super._burn(sender, _burnFee);
            }
        }

        super._transfer(sender, recipient, amountToTransfer);
    }

    function setPair(address _pair) onlyOwner external {
        require(_pair != address(0), "Elvantis: _pair is a zero address");
        pair = _pair;
        emit PairUpdated(_pair);
    }

    function setMinter(address _minter) onlyOwner external {
        require(_minter != address(0), "Elvantis: _minter is a zero address");
        minter = _minter;
        emit MinterUpdated(minter);
    }

    function setFee(uint256 _buyFee, uint256 _sellFee, uint256 _burnFee) onlyOwner external {
        require(_buyFee <= 1000 && _sellFee <= 1000 && _burnFee <= 1000, "Elvantis: Fee out of range!");
        buyFee = _buyFee;
        sellFee = _sellFee;
        burnFee = _burnFee;

        emit FeeUpdated(buyFee, sellFee, burnFee);
    }

    function setFeeReciever(IElvantisFeeReceiver _feeRecipient) onlyOwner external {
        require(address(_feeRecipient) != address(0), "Elvantis: _feeRecipient is a zero address");
        feeReceiver = _feeRecipient;
        emit FeeReceiverUpdated(address(_feeRecipient));
    }

    function setTaxless(address account, bool hasTax) onlyOwner external {
        require(account != address(0), "Elvantis: account is a zero address");
        taxless[account] = hasTax;
    }

    // Locking tokens of wallet can be used to pay employees in token, 
    // developement or marketing team and unlock at a certain time
    function setWalletLock(address account, uint256 unlockTimestamp) onlyOwner external {
        require(account != address(0), "Elvantis: account is a zero address");
        unlocksAt[account] = unlockTimestamp;
    }
}

File 2 of 9 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 9 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 5 of 9 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 6 of 9 : IElvantisFeeReceiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IElvantisFeeReceiver {
    function onFeeReceived(address token, uint256 amount) external;
}

File 7 of 9 : ElvantisFeeReceiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import './interfaces/IElvantisFeeReceiver.sol';
import './interfaces/IDEXRouter.sol';

// This contract will only be used for Elvantis Token
contract ElvantisFeeReceiver is Ownable, IElvantisFeeReceiver {
    IERC20 public elvantis;
    IDEXRouter public router;
    address public feeRecipient;

    bool public swapEnabled = true;
    uint256 public swapThreshold = 1 ether;
    
    event FeeRecipientUpdated(address indexed feeRecipient);
    event RouterUpdated(address indexed router);
    event SwapUpdated(bool indexed enabled);
    event SwapThresholdUpdated(uint256 indexed threshold);

    modifier onlyElvantis {
        require(msg.sender == address(elvantis), "ElvantisFeeReceiver: Only Elvantis!");
        _;
    }

    constructor(address _elvantis, address _router, address _owner) {
        require(_elvantis != address(0) && _router != address(0) && _owner != address(0), "ElvantisFeeReceiver: zero address");

        elvantis = IERC20(_elvantis);
        router = IDEXRouter(_router);
        transferOwnership(_owner);
    }

    function onFeeReceived(address token, uint256 amount) external override onlyElvantis {
        if(token != address(0)) {
            address recipient = swapEnabled ? address(this) : feeRecipient;
            elvantis.transferFrom(address(elvantis), recipient, amount);
            _swapTokensForETH();
        }
    }

    function _swapTokensForETH() private {
        uint256 amount = elvantis.balanceOf(address(this));
        if(amount > swapThreshold) {
            address[] memory path = new address[](2);
            path[0] = address(elvantis);
            path[1] = router.WETH();

            elvantis.approve(address(router), amount);
            
            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                amount,
                0,
                path,
                feeRecipient,
                block.timestamp
            );
        }
    }
    
    function setFeeRecipient(address _feeRecipient) onlyOwner external {
        require(_feeRecipient != address(0), "ElvantisFeeReceiver: _feeRecipient is a zero address");
        feeRecipient = _feeRecipient;
        emit FeeRecipientUpdated(_feeRecipient);
    }

    function setRouter(IDEXRouter _router) onlyOwner external {
        require(address(_router) != address(0), "ElvantisFeeReceiver: _router is a zero address");
        router = _router;
        emit RouterUpdated(address(_router));
    }

    function setSwapEnabled(bool _enabled) onlyOwner external {
        swapEnabled = _enabled;
        emit SwapUpdated(_enabled);
    }

    function setSwapThreshold(uint256 _threshold) onlyOwner external {
        swapThreshold = _threshold;
        emit SwapThresholdUpdated(_threshold);
    }

    function drainAccidentallySentTokens(IERC20 token, address recipient, uint256 amount) onlyOwner external {
        token.transfer(recipient, amount);
    }
}

File 8 of 9 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 9 of 9 : IDEXRouter.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IDEXRouter {
    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeReceiver","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"MinterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"contract IElvantisFeeReceiver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IElvantisFeeReceiver","name":"_feeRecipient","type":"address"}],"name":"setFeeReciever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"hasTax","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"unlockTimestamp","type":"uint256"}],"name":"setWalletLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxless","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unlocksAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162002e3338038062002e33833981016040819052620000349162000356565b60405180604001604052806008815260200167456c76616e74697360c01b8152506040518060400160405280600381526020016222a62b60e91b8152506200008b620000856200023160201b60201c565b62000235565b8151620000a090600490602085019062000285565b508051620000b690600590602084019062000285565b5050506001600160a01b03821615801590620000da57506001600160a01b03811615155b620001025760405162461bcd60e51b8152600401620000f990620003b0565b60405180910390fd5b600680546001600160a01b0319166001600160a01b038416179055604051309082903390620001319062000314565b6200013f939291906200038d565b604051809103906000f0801580156200015c573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b0392831617908190558116600090815260096020526040808220805460ff199081166001908117909255938616808452828420805486168317905530845282842080548616831790553384528284208054909516909117909355517fad0f299ec81a386c98df0ac27dae11dd020ed1b56963c53a7292e7a3a314539a9190a26007546040516001600160a01b03909116907f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee90600090a2505062000424565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200029390620003e7565b90600052602060002090601f016020900481019282620002b7576000855562000302565b82601f10620002d257805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000302578251825591602001919060010190620002e5565b506200031092915062000322565b5090565b6110ab8062001d8883390190565b5b8082111562000310576000815560010162000323565b80516001600160a01b03811681146200035157600080fd5b919050565b6000806040838503121562000369578182fd5b620003748362000339565b9150620003846020840162000339565b90509250929050565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60208082526016908201527f456c76616e7469733a207a65726f206164647265737300000000000000000000604082015260600190565b600281046001821680620003fc57607f821691505b602082108114156200041e57634e487b7160e01b600052602260045260246000fd5b50919050565b61195480620004346000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638da5cb5b11610104578063b3f00674116100a2578063dd62ed3e11610071578063dd62ed3e14610395578063f2fde38b146103a8578063fca3b5aa146103bb578063fce589d8146103ce576101da565b8063b3f006741461035f578063cf5fd66814610367578063d436d0ef1461037a578063d73792a91461038d576101da565b8063a457c2d7116100de578063a457c2d71461031e578063a6f7e0fa14610331578063a8aa1b3114610344578063a9059cbb1461034c576101da565b80638da5cb5b146102fb57806395d89b41146103035780639847a0c61461030b576101da565b8063395093511161017c5780635b65b9ab1161014b5780635b65b9ab146102ba57806370a08231146102cd578063715018a6146102e05780638187f516146102e8576101da565b8063395093511461027757806340c10f191461028a578063470624021461029f57806347f2dc5b146102a7576101da565b806318160ddd116101b857806318160ddd1461023257806323b872dd146102475780632b14ca561461025a578063313ce56714610262576101da565b806306fdde03146101df57806307546172146101fd578063095ea7b314610212575b600080fd5b6101e76103d6565b6040516101f4919061131c565b60405180910390f35b610205610468565b6040516101f491906112e4565b61022561022036600461128e565b610477565b6040516101f49190611311565b61023a610494565b6040516101f49190611833565b61022561025536600461121d565b61049a565b61023a610533565b61026a610539565b6040516101f4919061183c565b61022561028536600461128e565b61053e565b61029d61029836600461128e565b610592565b005b61023a6105d5565b61029d6102b536600461125d565b6105db565b61029d6102c83660046112b9565b61066b565b61023a6102db3660046111c2565b61072b565b61029d610746565b61029d6102f63660046111c2565b610791565b610205610840565b6101e761084f565b61023a6103193660046111c2565b61085e565b61022561032c36600461128e565b610870565b61022561033f3660046111c2565b6108e9565b6102056108fe565b61022561035a36600461128e565b61090d565b610205610921565b61029d61037536600461128e565b610930565b61029d6103883660046111c2565b6109b1565b61023a610a60565b61023a6103a33660046111e5565b610a66565b61029d6103b63660046111c2565b610a91565b61029d6103c93660046111c2565b610b02565b61023a610bb7565b6060600480546103e5906118b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610411906118b8565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b6006546001600160a01b031681565b600061048b610484610bbd565b8484610bc1565b50600192915050565b60035490565b60006104a7848484610c75565b6001600160a01b0384166000908152600260205260408120816104c8610bbd565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156105145760405162461bcd60e51b815260040161050b906115a9565b60405180910390fd5b61052885610520610bbd565b858403610bc1565b506001949350505050565b600c5481565b601290565b600061048b61054b610bbd565b848460026000610559610bbd565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461058d919061184a565b610bc1565b61059a610bbd565b6006546001600160a01b039081169116146105c75760405162461bcd60e51b815260040161050b906114b3565b6105d18282610e94565b5050565b600b5481565b6105e3610bbd565b6001600160a01b03166105f4610840565b6001600160a01b03161461061a5760405162461bcd60e51b815260040161050b906115f1565b6001600160a01b0382166106405760405162461bcd60e51b815260040161050b90611626565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b610673610bbd565b6001600160a01b0316610684610840565b6001600160a01b0316146106aa5760405162461bcd60e51b815260040161050b906115f1565b6103e883111580156106be57506103e88211155b80156106cc57506103e88111155b6106e85760405162461bcd60e51b815260040161050b90611529565b600b839055600c829055600d8190556040518190839085907f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e0990600090a4505050565b6001600160a01b031660009081526001602052604090205490565b61074e610bbd565b6001600160a01b031661075f610840565b6001600160a01b0316146107855760405162461bcd60e51b815260040161050b906115f1565b61078f6000610f5c565b565b610799610bbd565b6001600160a01b03166107aa610840565b6001600160a01b0316146107d05760405162461bcd60e51b815260040161050b906115f1565b6001600160a01b0381166107f65760405162461bcd60e51b815260040161050b90611733565b600880546001600160a01b0319166001600160a01b0383169081179091556040517f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90600090a250565b6000546001600160a01b031690565b6060600580546103e5906118b8565b600a6020526000908152604090205481565b6000806002600061087f610bbd565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156108cb5760405162461bcd60e51b815260040161050b90611774565b6108df6108d6610bbd565b85858403610bc1565b5060019392505050565b60096020526000908152604090205460ff1681565b6008546001600160a01b031681565b600061048b61091a610bbd565b8484610c75565b6007546001600160a01b031681565b610938610bbd565b6001600160a01b0316610949610840565b6001600160a01b03161461096f5760405162461bcd60e51b815260040161050b906115f1565b6001600160a01b0382166109955760405162461bcd60e51b815260040161050b90611626565b6001600160a01b039091166000908152600a6020526040902055565b6109b9610bbd565b6001600160a01b03166109ca610840565b6001600160a01b0316146109f05760405162461bcd60e51b815260040161050b906115f1565b6001600160a01b038116610a165760405162461bcd60e51b815260040161050b90611560565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee90600090a250565b61271081565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610a99610bbd565b6001600160a01b0316610aaa610840565b6001600160a01b031614610ad05760405162461bcd60e51b815260040161050b906115f1565b6001600160a01b038116610af65760405162461bcd60e51b815260040161050b9061142b565b610aff81610f5c565b50565b610b0a610bbd565b6001600160a01b0316610b1b610840565b6001600160a01b031614610b415760405162461bcd60e51b815260040161050b906115f1565b6001600160a01b038116610b675760405162461bcd60e51b815260040161050b906117f0565b600680546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fad0f299ec81a386c98df0ac27dae11dd020ed1b56963c53a7292e7a3a314539a90600090a250565b600d5481565b3390565b6001600160a01b038316610be75760405162461bcd60e51b815260040161050b906116ef565b6001600160a01b038216610c0d5760405162461bcd60e51b815260040161050b90611471565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c68908590611833565b60405180910390a3505050565b6001600160a01b0383166000908152600a602052604090205481904211610cae5760405162461bcd60e51b815260040161050b906113f4565b6001600160a01b03841660009081526009602052604090205460ff16158015610cf057506001600160a01b03831660009081526009602052604090205460ff16155b15610e83576007546001600160a01b031615801590610d1957506008546001600160a01b031615155b15610e44576000600b54600014158015610d4057506008546001600160a01b038681169116145b15610d6757612710600b5484610d569190611882565b610d609190611862565b9050610da8565b600c5415801590610d8557506008546001600160a01b038581169116145b15610da857612710600c5484610d9b9190611882565b610da59190611862565b90505b8015610e4257610db881836118a1565b9150610dc5853083610fac565b600754610ddd9030906001600160a01b031683610bc1565b600754604051631a78cc3b60e21b81526001600160a01b03909116906369e330ec90610e0f90309085906004016112f8565b600060405180830381600087803b158015610e2957600080fd5b505af1158015610e3d573d6000803e3d6000fd5b505050505b505b600d5415610e83576000612710600d5484610e5f9190611882565b610e699190611862565b9050610e7581836118a1565b9150610e8185826110d0565b505b610e8e848483610fac565b50505050565b6001600160a01b038216610eba5760405162461bcd60e51b815260040161050b906117b9565b610ec6600083836111bd565b8060036000828254610ed8919061184a565b90915550506001600160a01b03821660009081526001602052604081208054839290610f0590849061184a565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f48908590611833565b60405180910390a36105d1600083836111bd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316610fd25760405162461bcd60e51b815260040161050b906116aa565b6001600160a01b038216610ff85760405162461bcd60e51b815260040161050b9061136f565b6110038383836111bd565b6001600160a01b0383166000908152600160205260409020548181101561103c5760405162461bcd60e51b815260040161050b906114e3565b6001600160a01b0380851660009081526001602052604080822085850390559185168152908120805484929061107390849061184a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110bd9190611833565b60405180910390a3610e8e8484846111bd565b6001600160a01b0382166110f65760405162461bcd60e51b815260040161050b90611669565b611102826000836111bd565b6001600160a01b0382166000908152600160205260409020548181101561113b5760405162461bcd60e51b815260040161050b906113b2565b6001600160a01b038316600090815260016020526040812083830390556003805484929061116a9084906118a1565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111ad908690611833565b60405180910390a36111bd836000845b505050565b6000602082840312156111d3578081fd5b81356111de81611909565b9392505050565b600080604083850312156111f7578081fd5b823561120281611909565b9150602083013561121281611909565b809150509250929050565b600080600060608486031215611231578081fd5b833561123c81611909565b9250602084013561124c81611909565b929592945050506040919091013590565b6000806040838503121561126f578182fd5b823561127a81611909565b915060208301358015158114611212578182fd5b600080604083850312156112a0578182fd5b82356112ab81611909565b946020939093013593505050565b6000806000606084860312156112cd578283fd5b505081359360208301359350604090920135919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156113485785810183015185820160400152820161132c565b818111156113595783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b6020808252601c908201527f456c76616e7469733a20546f6b656e7320617265206c6f636b65642100000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b602080825260169082015275456c76616e7469733a204f6e6c79206d696e7465722160501b604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252601b908201527f456c76616e7469733a20466565206f7574206f662072616e6765210000000000604082015260600190565b60208082526029908201527f456c76616e7469733a205f666565526563697069656e742069732061207a65726040820152686f206164647265737360b81b606082015260800190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f456c76616e7469733a206163636f756e742069732061207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526021908201527f456c76616e7469733a205f706169722069732061207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b60208082526023908201527f456c76616e7469733a205f6d696e7465722069732061207a65726f206164647260408201526265737360e81b606082015260800190565b90815260200190565b60ff91909116815260200190565b6000821982111561185d5761185d6118f3565b500190565b60008261187d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561189c5761189c6118f3565b500290565b6000828210156118b3576118b36118f3565b500390565b6002810460018216806118cc57607f821691505b602082108114156118ed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610aff57600080fdfea2646970667358221220b017cf5b4cae052bed9ff83eeeaa347169a9c030062690d8ed785e8ab7055e4264736f6c6343000800003360806040526003805460ff60a01b1916600160a01b179055670de0b6b3a76400006004553480156200003057600080fd5b50604051620010ab380380620010ab833981016040819052620000539162000206565b620000676200006162000109565b6200010d565b6001600160a01b038316158015906200008857506001600160a01b03821615155b80156200009d57506001600160a01b03811615155b620000c55760405162461bcd60e51b8152600401620000bc9062000295565b60405180910390fd5b600180546001600160a01b038086166001600160a01b031992831617909255600280549285169290911691909117905562000100816200015d565b5050506200030b565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200016762000109565b6001600160a01b03166200017a620001da565b6001600160a01b031614620001a35760405162461bcd60e51b8152600401620000bc90620002d6565b6001600160a01b038116620001cc5760405162461bcd60e51b8152600401620000bc906200024f565b620001d7816200010d565b50565b6000546001600160a01b031690565b80516001600160a01b03811681146200020157600080fd5b919050565b6000806000606084860312156200021b578283fd5b6200022684620001e9565b92506200023660208501620001e9565b91506200024660408501620001e9565b90509250925092565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526021908201527f456c76616e74697346656552656365697665723a207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b610d90806200031b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639d0014b11161008c578063e4fe4e8a11610066578063e4fe4e8a1461019d578063e74b981b146101b0578063f2fde38b146101c3578063f887ea40146101d6576100ea565b80639d0014b114610164578063c0d7865514610177578063e01af92c1461018a576100ea565b806369e330ec116100c857806369e330ec1461012a5780636ddd17131461013f578063715018a6146101545780638da5cb5b1461015c576100ea565b80630445b667146100ef578063263420b11461010d5780634690484014610122575b600080fd5b6100f76101de565b6040516101049190610cbe565b60405180910390f35b6101156101e4565b6040516101049190610b02565b6101156101f3565b61013d610138366004610a2f565b610202565b005b610147610301565b6040516101049190610b53565b61013d610311565b61011561035c565b61013d610172366004610ad2565b61036b565b61013d6101853660046109f0565b6103dd565b61013d610198366004610a5a565b61048c565b61013d6101ab366004610a92565b610514565b61013d6101be3660046109f0565b6105d9565b61013d6101d13660046109f0565b610688565b6101156106f9565b60045481565b6001546001600160a01b031681565b6003546001600160a01b031681565b6001546001600160a01b031633146102355760405162461bcd60e51b815260040161022c90610c7b565b60405180910390fd5b6001600160a01b038216156102fd57600354600090600160a01b900460ff16610269576003546001600160a01b031661026b565b305b6001546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd906102a090839085908790600401610b16565b602060405180830381600087803b1580156102ba57600080fd5b505af11580156102ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f29190610a76565b506102fb610708565b505b5050565b600354600160a01b900460ff1681565b61031961099c565b6001600160a01b031661032a61035c565b6001600160a01b0316146103505760405162461bcd60e51b815260040161022c90610bf8565b61035a60006109a0565b565b6000546001600160a01b031690565b61037361099c565b6001600160a01b031661038461035c565b6001600160a01b0316146103aa5760405162461bcd60e51b815260040161022c90610bf8565b600481905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b6103e561099c565b6001600160a01b03166103f661035c565b6001600160a01b03161461041c5760405162461bcd60e51b815260040161022c90610bf8565b6001600160a01b0381166104425760405162461bcd60e51b815260040161022c90610c2d565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8090600090a250565b61049461099c565b6001600160a01b03166104a561035c565b6001600160a01b0316146104cb5760405162461bcd60e51b815260040161022c90610bf8565b6003805460ff60a01b1916600160a01b831515908102919091179091556040517fd2b6af97bbcf94796ee3844c1f0948ba30b3f2d496875e5e1587309eb210aac590600090a250565b61051c61099c565b6001600160a01b031661052d61035c565b6001600160a01b0316146105535760405162461bcd60e51b815260040161022c90610bf8565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906105819085908590600401610b3a565b602060405180830381600087803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d39190610a76565b50505050565b6105e161099c565b6001600160a01b03166105f261035c565b6001600160a01b0316146106185760405162461bcd60e51b815260040161022c90610bf8565b6001600160a01b03811661063e5760405162461bcd60e51b815260040161022c90610b5e565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc290600090a250565b61069061099c565b6001600160a01b03166106a161035c565b6001600160a01b0316146106c75760405162461bcd60e51b815260040161022c90610bf8565b6001600160a01b0381166106ed5760405162461bcd60e51b815260040161022c90610bb2565b6106f6816109a0565b50565b6002546001600160a01b031681565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610739903090600401610b02565b60206040518083038186803b15801561075157600080fd5b505afa158015610765573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107899190610aea565b90506004548111156106f657604080516002808252606082018352600092602083019080368337505060015482519293506001600160a01b0316918391506000906107e457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561083857600080fd5b505afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190610a13565b8160018151811061089157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260015460025460405163095ea7b360e01b81529183169263095ea7b3926108d692909116908690600401610b3a565b602060405180830381600087803b1580156108f057600080fd5b505af1158015610904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190610a76565b5060025460035460405163791ac94760e01b81526001600160a01b039283169263791ac9479261096692879260009288929116904290600401610cc7565b600060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b505050505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610a01578081fd5b8135610a0c81610d37565b9392505050565b600060208284031215610a24578081fd5b8151610a0c81610d37565b60008060408385031215610a41578081fd5b8235610a4c81610d37565b946020939093013593505050565b600060208284031215610a6b578081fd5b8135610a0c81610d4c565b600060208284031215610a87578081fd5b8151610a0c81610d4c565b600080600060608486031215610aa6578081fd5b8335610ab181610d37565b92506020840135610ac181610d37565b929592945050506040919091013590565b600060208284031215610ae3578081fd5b5035919050565b600060208284031215610afb578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60208082526034908201527f456c76616e74697346656552656365697665723a205f666565526563697069656040820152736e742069732061207a65726f206164647265737360601b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f456c76616e74697346656552656365697665723a205f726f757465722069732060408201526d61207a65726f206164647265737360901b606082015260800190565b60208082526023908201527f456c76616e74697346656552656365697665723a204f6e6c7920456c76616e7460408201526269732160e81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015610d165784516001600160a01b031683529383019391830191600101610cf1565b50506001600160a01b03969096166060850152505050608001529392505050565b6001600160a01b03811681146106f657600080fd5b80151581146106f657600080fdfea26469706673582212200e40f2f0414ba8215e36f3afe367b85683db70128157d02cd394bc0e20750a7c64736f6c634300080000330000000000000000000000002477035e406828ce23e14c15f8382e8c3e9842bc0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002477035e406828ce23e14c15f8382e8c3e9842bc0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _minter (address): 0x2477035e406828ce23e14c15f8382e8c3e9842bc
Arg [1] : _router (address): 0x7a250d5630b4cf539739df2c5dacb4c659f2488d

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002477035e406828ce23e14c15f8382e8c3e9842bc
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.