ETH Price: $3,253.60 (-0.80%)
 

Overview

ETH Balance

4.653342912341110985 ETH

Eth Value

$15,140.13 (@ $3,253.60/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
204016472024-07-28 1:05:11165 days ago1722128711
0x48fd0ca9...740F7C2dB
0.00061742 ETH
201623092024-06-24 15:02:35199 days ago1719241355
0x48fd0ca9...740F7C2dB
0.00063993 ETH
201622932024-06-24 14:59:23199 days ago1719241163
0x48fd0ca9...740F7C2dB
0.00101208 ETH
201622162024-06-24 14:43:59199 days ago1719240239
0x48fd0ca9...740F7C2dB
0.00103122 ETH
201621892024-06-24 14:38:23199 days ago1719239903
0x48fd0ca9...740F7C2dB
0.00096605 ETH
201475952024-06-22 13:38:35201 days ago1719063515
0x48fd0ca9...740F7C2dB
0.00087854 ETH
201475782024-06-22 13:35:11201 days ago1719063311
0x48fd0ca9...740F7C2dB
0.00113901 ETH
200841592024-06-13 16:41:35210 days ago1718296895
0x48fd0ca9...740F7C2dB
0.00166365 ETH
199875322024-05-31 4:48:59223 days ago1717130939
0x48fd0ca9...740F7C2dB
0.0008097 ETH
199462072024-05-25 10:10:35229 days ago1716631835
0x48fd0ca9...740F7C2dB
0.00095891 ETH
198477962024-05-11 15:51:11243 days ago1715442671
0x48fd0ca9...740F7C2dB
0.00114889 ETH
196378392024-04-12 6:49:11272 days ago1712904551
0x48fd0ca9...740F7C2dB
0.00125035 ETH
196292822024-04-11 2:03:23273 days ago1712801003
0x48fd0ca9...740F7C2dB
0.00221955 ETH
195537762024-03-31 12:08:23284 days ago1711886903
0x48fd0ca9...740F7C2dB
0.00135468 ETH
195426912024-03-29 22:43:11285 days ago1711752191
0x48fd0ca9...740F7C2dB
0.0010656 ETH
195038072024-03-24 10:27:35291 days ago1711276055
0x48fd0ca9...740F7C2dB
0.00102551 ETH
194867552024-03-22 1:00:11293 days ago1711069211
0x48fd0ca9...740F7C2dB
0.00149074 ETH
194857162024-03-21 21:30:47293 days ago1711056647
0x48fd0ca9...740F7C2dB
0.00152463 ETH
194816242024-03-21 7:42:23294 days ago1711006943
0x48fd0ca9...740F7C2dB
0.0014663 ETH
194812602024-03-21 6:28:35294 days ago1711002515
0x48fd0ca9...740F7C2dB
0.00166595 ETH
194806252024-03-21 4:19:35294 days ago1710994775
0x48fd0ca9...740F7C2dB
0.00167434 ETH
194772982024-03-20 17:08:11295 days ago1710954491
0x48fd0ca9...740F7C2dB
0.00149351 ETH
194772872024-03-20 17:05:59295 days ago1710954359
0x48fd0ca9...740F7C2dB
0.00149351 ETH
194772542024-03-20 16:59:23295 days ago1710953963
0x48fd0ca9...740F7C2dB
0.00149351 ETH
194755452024-03-20 11:14:59295 days ago1710933299
0x48fd0ca9...740F7C2dB
0.00023498 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpaceLlamaFund

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 7 : SpaceLlamaFund.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

// Importing required interfaces and contracts
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "v2-periphery/interfaces/IUniswapV2Router02.sol";

/**
 * @title SpaceLlamaFund
 * @dev This contract manages the Space Llama Fund, a fund for the Space Llama project.
 */
contract SpaceLlamaFund is Ownable, IERC20 {
    // Uniswap router for token swaps
    IUniswapV2Router02 uniswapV2Router;

    // Name and symbol for the fund token
    string private _name = "Space Llama Fund";
    string private _symbol = "LLAMAF";

    // Index to keep track of the last processed account
    uint256 public lastProcessedIndex;

    // Total supply of the fund token
    uint256 private _totalSupply;
    // Mapping to store the balance of each account
    mapping(address => uint256) private _balances;

    // Constant to magnify the Ether per share to avoid rounding errors
    uint256 private constant magnitude = 2 ** 128;
    // Minimum token balance required to be eligible for SLF
    uint256 public immutable minTokenBalanceForSLF;
    // Magnified Ether per share
    uint256 private magnifiedEtherPerShare;
    // Total Ether distributed and withdrawn
    uint256 public totalEtherDistributed;
    uint256 public totalEtherWithdrawn;

    // Address of the token
    address public tokenAddress;

    // Mappings to store the state of each account
    mapping(address => bool) public excludedFromSLF;
    mapping(address => int256) private magnifiedEtherCorrections;
    mapping(address => uint256) private withdrawnEther;
    mapping(address => uint256) private lastClaimTimes;

    // Events to log various actions
    event EtherDistributed(address indexed from, uint256 weiAmount);
    event EtherWithdrawn(address indexed to, uint256 weiAmount);
    event ExcludeFromSLF(address indexed account, bool excluded);
    event Claim(address indexed account, uint256 amount);

    /**
     * @dev Struct to store account information.
     */
    struct AccountInfo {
        address account;
        uint256 withdrawableEther;
        uint256 totalSLF;
        uint256 lastClaimTime;
    }

    /**
     * @dev Constructor for the SpaceLlamaFund contract.
     * @param _tokenAddress The address of the token.
     * @param _uniswapRouter The address of the Uniswap router.
     */
    constructor(address _tokenAddress, address _uniswapRouter) Ownable(_tokenAddress) {
        // Set the minimum token balance for SLF
        minTokenBalanceForSLF = 1 * (10 ** 18);
        // Set the token and Uniswap router addresses
        tokenAddress = _tokenAddress;
        uniswapV2Router = IUniswapV2Router02(_uniswapRouter);
    }

    /**
     * @dev Fallback function to distribute SLF when Ether is sent to the contract.
     */
    receive() external payable {
        distributeSLF();
    }

    /**
     * @dev Function to distribute SLF.
     */
    function distributeSLF() public payable {
        // Ensure that the total supply is greater than 0
        require(_totalSupply > 0, "Total supply should be greater than 0");
        // If Ether is sent, distribute it among the token holders
        if (msg.value > 0) {
            magnifiedEtherPerShare = magnifiedEtherPerShare + ((msg.value * magnitude) / _totalSupply);
            emit EtherDistributed(msg.sender, msg.value);
            totalEtherDistributed += msg.value;
        }
    }

    /**
     * @dev Function to set the balance of an account.
     * @param account The address of the account.
     * @param newBalance The new balance of the account.
     */
    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        // If the account is excluded from SLF, do nothing
        if (excludedFromSLF[account]) {
            return;
        }
        // If the new balance is greater than or equal to the minimum token balance for SLF, set the balance
        if (newBalance >= minTokenBalanceForSLF) {
            _setBalance(account, newBalance);
        } else {
            // Otherwise, set the balance to 0
            _setBalance(account, 0);
        }
    }

    /**
     * @dev Function to exclude an account from SLF.
     * @param account The address of the account.
     * @param excluded The boolean value indicating whether the account should be excluded.
     */
    function excludeFromSLF(address account, bool excluded) external onlyOwner {
        // Ensure that the account is not already in the requested state
        require(excludedFromSLF[account] != excluded, "SLF: account already set to requested state");
        // Set the state of the account
        excludedFromSLF[account] = excluded;
        // If the account is excluded, set its balance to 0
        if (excluded) {
            _setBalance(account, 0);
        } else {
            // Otherwise, set its balance to its token balance if it is greater than or equal to the minimum token balance for SLF
            uint256 newBalance = IERC20(tokenAddress).balanceOf(account);
            if (newBalance >= minTokenBalanceForSLF) {
                _setBalance(account, newBalance);
            } else {
                _setBalance(account, 0);
            }
        }
        // Emit an event to log the exclusion
        emit ExcludeFromSLF(account, excluded);
    }

    /**
     * @dev Function to check if an account is excluded from SLF.
     * @param account The address of the account.
     * @return A boolean value indicating whether the account is excluded.
     */
    function isExcludedFromSLF(address account) public view returns (bool) {
        // Return the state of the account
        return excludedFromSLF[account];
    }

    /**
     * @dev Internal function to set the balance of an account.
     * @param account The address of the account.
     * @param newBalance The new balance of the account.
     */
    function _setBalance(address account, uint256 newBalance) internal {
        // Get the current balance of the account
        uint256 currentBalance = _balances[account];
        // If the new balance is greater than the current balance, mint tokens
        if (newBalance > currentBalance) {
            uint256 addAmount = newBalance - currentBalance;
            _mint(account, addAmount);
        } else if (newBalance < currentBalance) {
            // If the new balance is less than the current balance, burn tokens
            uint256 subAmount = currentBalance - newBalance;
            _burn(account, subAmount);
        }
    }

    /**
     * @dev Internal function to mint tokens.
     * @param account The address of the account.
     * @param amount The amount of tokens to mint.
     */
    function _mint(address account, uint256 amount) private {
        // Ensure that the account is not the zero address
        require(account != address(0), "SLF: mint to the zero address");
        // Increase the total supply and the balance of the account
        _totalSupply += amount;
        _balances[account] += amount;
        // Emit a transfer event from the zero address to the account
        emit Transfer(address(0), account, amount);
        // Adjust the magnified Ether correction for the account
        magnifiedEtherCorrections[account] =
            magnifiedEtherCorrections[account] - int256(magnifiedEtherPerShare * amount);
    }

    /**
     * @dev Internal function to burn tokens.
     * @param account The address of the account.
     * @param amount The amount of tokens to burn.
     */
    function _burn(address account, uint256 amount) private {
        // Ensure that the account is not the zero address
        require(account != address(0), "SLF: burn from the zero address");
        // Ensure that the account has enough balance to burn
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "SLF: burn amount exceeds balance");
        // Decrease the balance of the account and the total supply
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        // Emit a transfer event from the account to the zero address
        emit Transfer(account, address(0), amount);
        // Adjust the magnified Ether correction for the account
        magnifiedEtherCorrections[account] =
            magnifiedEtherCorrections[account] + int256(magnifiedEtherPerShare * amount);
    }

    /**
     * @dev Function to process an account.
     * @param account The address of the account.
     * @return A boolean value indicating whether the process was successful.
     */
    function processAccount(address payable account) public onlyOwner returns (bool) {
        // Withdraw the SLF of the user
        uint256 amount = _withdrawSLFOfUser(account);
        // If the amount is greater than 0, update the last claim time and emit a claim event
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount);
            return true;
        }
        // If the amount is 0, return false
        return false;
    }

    /**
     * @dev Internal function to withdraw SLF of a user.
     * @param account The address of the account.
     * @return The amount of SLF withdrawn.
     */
    function _withdrawSLFOfUser(address payable account) private returns (uint256) {
        // Get the withdrawable Ether of the account
        uint256 _withdrawableEther = withdrawableEtherOf(account);
        // If the withdrawable Ether is greater than 0, withdraw it
        if (_withdrawableEther > 0) {
            withdrawnEther[account] += _withdrawableEther;
            totalEtherWithdrawn += _withdrawableEther;
            emit EtherWithdrawn(account, _withdrawableEther);
            // Try to transfer the Ether to the account
            (bool success,) = account.call{value: _withdrawableEther, gas: 3000}("");
            // If the transfer fails, revert the withdrawal
            if (!success) {
                withdrawnEther[account] -= _withdrawableEther;
                totalEtherWithdrawn -= _withdrawableEther;
                return 0;
            }
            return _withdrawableEther;
        }
        // If the withdrawable Ether is 0, return 0
        return 0;
    }

    /**
     * @dev Function to get the withdrawable Ether of an account.
     * @param account The address of the account.
     * @return The amount of withdrawable Ether.
     */
    function withdrawableEtherOf(address account) public view returns (uint256) {
        // Return the difference between the accumulative SLF and the withdrawn Ether of the account
        return accumulativeSLFOf(account) - withdrawnEther[account];
    }

    /**
     * @dev Function to get the withdrawn Ether of an account.
     * @param account The address of the account.
     * @return The amount of withdrawn Ether.
     */
    function withdrawnEtherOf(address account) public view returns (uint256) {
        // Return the withdrawn Ether of the account
        return withdrawnEther[account];
    }

    /**
     * @dev Function to get the accumulative SLF of an account.
     * @param account The address of the account.
     * @return The amount of accumulative SLF.
     */
    function accumulativeSLFOf(address account) public view returns (uint256) {
        // Calculate the accumulative SLF of the account
        int256 a = int256(magnifiedEtherPerShare * balanceOf(account));
        int256 b = magnifiedEtherCorrections[account];
        return uint256(a + b) / magnitude;
    }

    /**
     * @dev Function to get the account information of an account.
     * @param account The address of the account.
     * @return The account information.
     */
    function getAccountInfo(address account) public view returns (address, uint256, uint256, uint256, uint256) {
        // Create a memory struct to store the account information
        AccountInfo memory info;
        info.account = account;
        info.withdrawableEther = withdrawableEtherOf(account);
        info.totalSLF = accumulativeSLFOf(account);
        info.lastClaimTime = lastClaimTimes[account];
        // Return the account information
        return (info.account, info.withdrawableEther, info.totalSLF, info.lastClaimTime, totalEtherWithdrawn);
    }

    /**
     * @dev Function to get the last claim time of an account.
     * @param account The address of the account.
     * @return The last claim time.
     */
    function getLastClaimTime(address account) public view returns (uint256) {
        // Return the last claim time of the account
        return lastClaimTimes[account];
    }

    /**
     * @dev Function to get the name of the token.
     * @return The name of the token.
     */
    function name() public view returns (string memory) {
        // Return the name of the token
        return _name;
    }

    /**
     * @dev Function to get the symbol of the token.
     * @return The symbol of the token.
     */
    function symbol() public view returns (string memory) {
        // Return the symbol of the token
        return _symbol;
    }

    /**
     * @dev Function to get the decimals of the token.
     * @return The decimals of the token.
     */
    function decimals() public pure returns (uint8) {
        // Return the decimals of the token
        return 18;
    }

    /**
     * @dev Function to get the total supply of the token.
     * @return The total supply of the token.
     */
    function totalSupply() public view override returns (uint256) {
        // Return the total supply of the token
        return _totalSupply;
    }

    /**
     * @dev Function to get the balance of an account.
     * @param account The address of the account.
     * @return The balance of the account.
     */
    function balanceOf(address account) public view override returns (uint256) {
        // Return the balance of the account
        return _balances[account];
    }

    /**
     * @dev Function to transfer tokens. This function is not allowed and will always revert.
     */
    function transfer(address, uint256) public pure override returns (bool) {
        // Revert the transaction as this function is not allowed
        revert("Not Allowed");
    }

    /**
     * @dev Function to get the allowance of an account. This function is not allowed and will always revert.
     */
    function allowance(address, address) public pure override returns (uint256) {
        // Revert the transaction as this function is not allowed
        revert("Not Allowed");
    }

    /**
     * @dev Function to approve an account. This function is not allowed and will always revert.
     */
    function approve(address, uint256) public pure override returns (bool) {
        // Revert the transaction as this function is not allowed
        revert("Not Allowed");
    }

    /**
     * @dev Function to transfer tokens from one account to another. This function is not allowed and will always revert.
     */
    function transferFrom(address, address, uint256) public pure override returns (bool) {
        // Revert the transaction as this function is not allowed
        revert("Not Allowed");
    }
}

File 2 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../token/ERC20/IERC20.sol";

File 3 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 4 of 7 : IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import "./IUniswapV2Router01.sol";

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

File 5 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

File 6 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 7 of 7 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        payable
        returns (uint256[] memory amounts);
    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline)
        external
        payable
        returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);
    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut)
        external
        pure
        returns (uint256 amountOut);
    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut)
        external
        pure
        returns (uint256 amountIn);
    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "v2-periphery/=lib/v2-periphery/contracts/",
    "v2-core/=lib/v2-core/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"EtherDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"EtherWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludeFromSLF","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accumulativeSLFOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributeSLF","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromSLF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromSLF","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromSLF","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenBalanceForSLF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address payable","name":"account","type":"address"}],"name":"processAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEtherDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEtherWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableEtherOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawnEtherOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052601060a09081526f14dc1858d948131b185b5848119d5b9960821b60c05260029062000031908262000200565b50604080518082019091526006815265262620a6a0a360d11b60208201526003906200005e908262000200565b503480156200006c57600080fd5b506040516200168e3803806200168e8339810160408190526200008f91620002e9565b816001600160a01b038116620000bf57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ca8162000109565b50670de0b6b3a7640000608052600a80546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905562000321565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018457607f821691505b602082108103620001a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001fb576000816000526020600020601f850160051c81016020861015620001d65750805b601f850160051c820191505b81811015620001f757828155600101620001e2565b5050505b505050565b81516001600160401b038111156200021c576200021c62000159565b62000234816200022d84546200016f565b84620001ab565b602080601f8311600181146200026c5760008415620002535750858301515b600019600386901b1c1916600185901b178555620001f7565b600085815260208120601f198616915b828110156200029d578886015182559484019460019091019084016200027c565b5085821015620002bc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620002e457600080fd5b919050565b60008060408385031215620002fd57600080fd5b6200030883620002cc565b91506200031860208401620002cc565b90509250929050565b6080516113436200034b600039600081816101e1015281816109020152610b3501526113436000f3fe6080604052600436106101bb5760003560e01c80637b510fe8116100ec578063a5f169cd1161008a578063cbba6a3211610064578063cbba6a3214610527578063dd62ed3e14610557578063e30443bc14610572578063f2fde38b1461059257600080fd5b8063a5f169cd146104e9578063a680e0bc146104f1578063a9059cbb1461023857600080fd5b80638da5cb5b116100c65780638da5cb5b1461044c57806395d89b411461047e5780639d76ea5814610493578063a4eba0ce146104b357600080fd5b80637b510fe8146103ba578063807ab4f71461040c5780638a28a1d71461042c57600080fd5b80632e3702d511610159578063461c339b11610133578063461c339b146103165780634ab0e2841461034f57806370a082311461036f578063715018a6146103a557600080fd5b80632e3702d5146102ce5780633009a609146102e4578063313ce567146102fa57600080fd5b80630eff2803116101955780630eff28031461026857806318160ddd14610288578063225c3c3b1461029d57806323b872dd146102b357600080fd5b8063061fe88a146101cf57806306fdde0314610216578063095ea7b31461023857600080fd5b366101ca576101c86105b2565b005b600080fd5b3480156101db57600080fd5b506102037f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561022257600080fd5b5061022b610697565b60405161020d919061109c565b34801561024457600080fd5b50610258610253366004611100565b610729565b604051901515815260200161020d565b34801561027457600080fd5b5061020361028336600461112c565b610762565b34801561029457600080fd5b50600554610203565b3480156102a957600080fd5b5061020360095481565b3480156102bf57600080fd5b50610258610253366004611150565b3480156102da57600080fd5b5061020360085481565b3480156102f057600080fd5b5061020360045481565b34801561030657600080fd5b506040516012815260200161020d565b34801561032257600080fd5b5061025861033136600461112c565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561035b57600080fd5b506101c861036a366004611191565b6107c6565b34801561037b57600080fd5b5061020361038a36600461112c565b6001600160a01b031660009081526006602052604090205490565b3480156103b157600080fd5b506101c861098c565b3480156103c657600080fd5b506103da6103d536600461112c565b61099e565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161020d565b34801561041857600080fd5b5061025861042736600461112c565b610a46565b34801561043857600080fd5b5061020361044736600461112c565b610aca565b34801561045857600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161020d565b34801561048a57600080fd5b5061022b610afc565b34801561049f57600080fd5b50600a54610466906001600160a01b031681565b3480156104bf57600080fd5b506102036104ce36600461112c565b6001600160a01b03166000908152600d602052604090205490565b6101c86105b2565b3480156104fd57600080fd5b5061020361050c36600461112c565b6001600160a01b03166000908152600e602052604090205490565b34801561053357600080fd5b5061025861054236600461112c565b600b6020526000908152604090205460ff1681565b34801561056357600080fd5b506102036102533660046111cf565b34801561057e57600080fd5b506101c861058d366004611100565b610b0b565b34801561059e57600080fd5b506101c86105ad36600461112c565b610b73565b6000600554116106175760405162461bcd60e51b815260206004820152602560248201527f546f74616c20737570706c792073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084015b60405180910390fd5b34156106955760055461062e600160801b34611213565b610638919061122a565b600754610645919061124c565b60075560405134815233907f2aaa7923c74576791f293c17c5b1617a0c94ad8beb3c351bef807fd8784268439060200160405180910390a2346008600082825461068f919061124c565b90915550505b565b6060600280546106a69061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546106d29061125f565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b60405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b604482015260009060640161060e565b6001600160a01b038116600090815260066020526040812054600754829161078991611213565b6001600160a01b0384166000908152600c6020526040902054909150600160801b6107b48284611299565b6107be919061122a565b949350505050565b6107ce610bb1565b6001600160a01b0382166000908152600b602052604090205481151560ff9091161515036108525760405162461bcd60e51b815260206004820152602b60248201527f534c463a206163636f756e7420616c72656164792073657420746f207265717560448201526a657374656420737461746560a81b606482015260840161060e565b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915561088f5761088a826000610bde565b610943565b600a546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe91906112c1565b90507f00000000000000000000000000000000000000000000000000000000000000008110610936576109318382610bde565b610941565b610941836000610bde565b505b816001600160a01b03167f33218abbde111755fb3b31a63cbc24ff52313fd28dd8b84b2fafd2233d697d8a82604051610980911515815260200190565b60405180910390a25050565b610994610bb1565b6106956000610c42565b60008060008060006109da604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6001600160a01b03871681526109ef87610aca565b60208201526109fd87610762565b60408281019182526001600160a01b03989098166000908152600e6020908152989020546060830181905282519890920151905160095498999198909750919550909350915050565b6000610a50610bb1565b6000610a5b83610c92565b90508015610ac1576001600160a01b0383166000818152600e602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610ab09084815260200190565b60405180910390a250600192915050565b50600092915050565b6001600160a01b0381166000908152600d6020526040812054610aec83610762565b610af691906112da565b92915050565b6060600380546106a69061125f565b610b13610bb1565b6001600160a01b0382166000908152600b602052604090205460ff16610b64577f00000000000000000000000000000000000000000000000000000000000000008110610b6857610b648282610bde565b5050565b610b64826000610bde565b610b7b610bb1565b6001600160a01b038116610ba557604051631e4fbdf760e01b81526000600482015260240161060e565b610bae81610c42565b50565b6000546001600160a01b031633146106955760405163118cdaa760e01b815233600482015260240161060e565b6001600160a01b03821660009081526006602052604090205480821115610c1d576000610c0b82846112da565b9050610c178482610de1565b50505050565b80821015610c3d576000610c3183836112da565b9050610c178482610f0d565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080610c9e83610aca565b90508015610ac1576001600160a01b0383166000908152600d602052604081208054839290610cce90849061124c565b925050819055508060096000828254610ce7919061124c565b90915550506040518181526001600160a01b038416907f06097061aeda806b5e9cb4133d9899f332ff0913956567fc0f7ea15e3d19947c9060200160405180910390a26000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d8060008114610d7c576040519150601f19603f3d011682016040523d82523d6000602084013e610d81565b606091505b5050905080610dda576001600160a01b0384166000908152600d602052604081208054849290610db29084906112da565b925050819055508160096000828254610dcb91906112da565b90915550600095945050505050565b5092915050565b6001600160a01b038216610e375760405162461bcd60e51b815260206004820152601d60248201527f534c463a206d696e7420746f20746865207a65726f2061646472657373000000604482015260640161060e565b8060056000828254610e49919061124c565b90915550506001600160a01b03821660009081526006602052604081208054839290610e7690849061124c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a380600754610eca9190611213565b6001600160a01b0383166000908152600c6020526040902054610eed91906112ed565b6001600160a01b039092166000908152600c602052604090209190915550565b6001600160a01b038216610f635760405162461bcd60e51b815260206004820152601f60248201527f534c463a206275726e2066726f6d20746865207a65726f206164647265737300604482015260640161060e565b6001600160a01b03821660009081526006602052604090205481811015610fcc5760405162461bcd60e51b815260206004820181905260248201527f534c463a206275726e20616d6f756e7420657863656564732062616c616e6365604482015260640161060e565b610fd682826112da565b6001600160a01b038416600090815260066020526040812091909155600580548492906110049084906112da565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3816007546110589190611213565b6001600160a01b0384166000908152600c602052604090205461107b9190611299565b6001600160a01b039093166000908152600c60205260409020929092555050565b60006020808352835180602085015260005b818110156110ca578581018301518582016040015282016110ae565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bae57600080fd5b6000806040838503121561111357600080fd5b823561111e816110eb565b946020939093013593505050565b60006020828403121561113e57600080fd5b8135611149816110eb565b9392505050565b60008060006060848603121561116557600080fd5b8335611170816110eb565b92506020840135611180816110eb565b929592945050506040919091013590565b600080604083850312156111a457600080fd5b82356111af816110eb565b9150602083013580151581146111c457600080fd5b809150509250929050565b600080604083850312156111e257600080fd5b82356111ed816110eb565b915060208301356111c4816110eb565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610af657610af66111fd565b60008261124757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610af657610af66111fd565b600181811c9082168061127357607f821691505b60208210810361129357634e487b7160e01b600052602260045260246000fd5b50919050565b80820182811260008312801582168215821617156112b9576112b96111fd565b505092915050565b6000602082840312156112d357600080fd5b5051919050565b81810381811115610af657610af66111fd565b8181036000831280158383131683831282161715610dda57610dda6111fd56fea2646970667358221220bc32da2748ae8f1a2dea0e0b58d40c356c731fd16fc9632c52222b5fe8c7cbb664736f6c6343000818003300000000000000000000000000000000e4327a1b658c56b49cede3ded3309f480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80637b510fe8116100ec578063a5f169cd1161008a578063cbba6a3211610064578063cbba6a3214610527578063dd62ed3e14610557578063e30443bc14610572578063f2fde38b1461059257600080fd5b8063a5f169cd146104e9578063a680e0bc146104f1578063a9059cbb1461023857600080fd5b80638da5cb5b116100c65780638da5cb5b1461044c57806395d89b411461047e5780639d76ea5814610493578063a4eba0ce146104b357600080fd5b80637b510fe8146103ba578063807ab4f71461040c5780638a28a1d71461042c57600080fd5b80632e3702d511610159578063461c339b11610133578063461c339b146103165780634ab0e2841461034f57806370a082311461036f578063715018a6146103a557600080fd5b80632e3702d5146102ce5780633009a609146102e4578063313ce567146102fa57600080fd5b80630eff2803116101955780630eff28031461026857806318160ddd14610288578063225c3c3b1461029d57806323b872dd146102b357600080fd5b8063061fe88a146101cf57806306fdde0314610216578063095ea7b31461023857600080fd5b366101ca576101c86105b2565b005b600080fd5b3480156101db57600080fd5b506102037f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b6040519081526020015b60405180910390f35b34801561022257600080fd5b5061022b610697565b60405161020d919061109c565b34801561024457600080fd5b50610258610253366004611100565b610729565b604051901515815260200161020d565b34801561027457600080fd5b5061020361028336600461112c565b610762565b34801561029457600080fd5b50600554610203565b3480156102a957600080fd5b5061020360095481565b3480156102bf57600080fd5b50610258610253366004611150565b3480156102da57600080fd5b5061020360085481565b3480156102f057600080fd5b5061020360045481565b34801561030657600080fd5b506040516012815260200161020d565b34801561032257600080fd5b5061025861033136600461112c565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561035b57600080fd5b506101c861036a366004611191565b6107c6565b34801561037b57600080fd5b5061020361038a36600461112c565b6001600160a01b031660009081526006602052604090205490565b3480156103b157600080fd5b506101c861098c565b3480156103c657600080fd5b506103da6103d536600461112c565b61099e565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161020d565b34801561041857600080fd5b5061025861042736600461112c565b610a46565b34801561043857600080fd5b5061020361044736600461112c565b610aca565b34801561045857600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161020d565b34801561048a57600080fd5b5061022b610afc565b34801561049f57600080fd5b50600a54610466906001600160a01b031681565b3480156104bf57600080fd5b506102036104ce36600461112c565b6001600160a01b03166000908152600d602052604090205490565b6101c86105b2565b3480156104fd57600080fd5b5061020361050c36600461112c565b6001600160a01b03166000908152600e602052604090205490565b34801561053357600080fd5b5061025861054236600461112c565b600b6020526000908152604090205460ff1681565b34801561056357600080fd5b506102036102533660046111cf565b34801561057e57600080fd5b506101c861058d366004611100565b610b0b565b34801561059e57600080fd5b506101c86105ad36600461112c565b610b73565b6000600554116106175760405162461bcd60e51b815260206004820152602560248201527f546f74616c20737570706c792073686f756c6420626520677265617465722074604482015264068616e20360dc1b60648201526084015b60405180910390fd5b34156106955760055461062e600160801b34611213565b610638919061122a565b600754610645919061124c565b60075560405134815233907f2aaa7923c74576791f293c17c5b1617a0c94ad8beb3c351bef807fd8784268439060200160405180910390a2346008600082825461068f919061124c565b90915550505b565b6060600280546106a69061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546106d29061125f565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b60405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b604482015260009060640161060e565b6001600160a01b038116600090815260066020526040812054600754829161078991611213565b6001600160a01b0384166000908152600c6020526040902054909150600160801b6107b48284611299565b6107be919061122a565b949350505050565b6107ce610bb1565b6001600160a01b0382166000908152600b602052604090205481151560ff9091161515036108525760405162461bcd60e51b815260206004820152602b60248201527f534c463a206163636f756e7420616c72656164792073657420746f207265717560448201526a657374656420737461746560a81b606482015260840161060e565b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915561088f5761088a826000610bde565b610943565b600a546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe91906112c1565b90507f0000000000000000000000000000000000000000000000000de0b6b3a76400008110610936576109318382610bde565b610941565b610941836000610bde565b505b816001600160a01b03167f33218abbde111755fb3b31a63cbc24ff52313fd28dd8b84b2fafd2233d697d8a82604051610980911515815260200190565b60405180910390a25050565b610994610bb1565b6106956000610c42565b60008060008060006109da604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6001600160a01b03871681526109ef87610aca565b60208201526109fd87610762565b60408281019182526001600160a01b03989098166000908152600e6020908152989020546060830181905282519890920151905160095498999198909750919550909350915050565b6000610a50610bb1565b6000610a5b83610c92565b90508015610ac1576001600160a01b0383166000818152600e602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610ab09084815260200190565b60405180910390a250600192915050565b50600092915050565b6001600160a01b0381166000908152600d6020526040812054610aec83610762565b610af691906112da565b92915050565b6060600380546106a69061125f565b610b13610bb1565b6001600160a01b0382166000908152600b602052604090205460ff16610b64577f0000000000000000000000000000000000000000000000000de0b6b3a76400008110610b6857610b648282610bde565b5050565b610b64826000610bde565b610b7b610bb1565b6001600160a01b038116610ba557604051631e4fbdf760e01b81526000600482015260240161060e565b610bae81610c42565b50565b6000546001600160a01b031633146106955760405163118cdaa760e01b815233600482015260240161060e565b6001600160a01b03821660009081526006602052604090205480821115610c1d576000610c0b82846112da565b9050610c178482610de1565b50505050565b80821015610c3d576000610c3183836112da565b9050610c178482610f0d565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080610c9e83610aca565b90508015610ac1576001600160a01b0383166000908152600d602052604081208054839290610cce90849061124c565b925050819055508060096000828254610ce7919061124c565b90915550506040518181526001600160a01b038416907f06097061aeda806b5e9cb4133d9899f332ff0913956567fc0f7ea15e3d19947c9060200160405180910390a26000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d8060008114610d7c576040519150601f19603f3d011682016040523d82523d6000602084013e610d81565b606091505b5050905080610dda576001600160a01b0384166000908152600d602052604081208054849290610db29084906112da565b925050819055508160096000828254610dcb91906112da565b90915550600095945050505050565b5092915050565b6001600160a01b038216610e375760405162461bcd60e51b815260206004820152601d60248201527f534c463a206d696e7420746f20746865207a65726f2061646472657373000000604482015260640161060e565b8060056000828254610e49919061124c565b90915550506001600160a01b03821660009081526006602052604081208054839290610e7690849061124c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a380600754610eca9190611213565b6001600160a01b0383166000908152600c6020526040902054610eed91906112ed565b6001600160a01b039092166000908152600c602052604090209190915550565b6001600160a01b038216610f635760405162461bcd60e51b815260206004820152601f60248201527f534c463a206275726e2066726f6d20746865207a65726f206164647265737300604482015260640161060e565b6001600160a01b03821660009081526006602052604090205481811015610fcc5760405162461bcd60e51b815260206004820181905260248201527f534c463a206275726e20616d6f756e7420657863656564732062616c616e6365604482015260640161060e565b610fd682826112da565b6001600160a01b038416600090815260066020526040812091909155600580548492906110049084906112da565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3816007546110589190611213565b6001600160a01b0384166000908152600c602052604090205461107b9190611299565b6001600160a01b039093166000908152600c60205260409020929092555050565b60006020808352835180602085015260005b818110156110ca578581018301518582016040015282016110ae565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bae57600080fd5b6000806040838503121561111357600080fd5b823561111e816110eb565b946020939093013593505050565b60006020828403121561113e57600080fd5b8135611149816110eb565b9392505050565b60008060006060848603121561116557600080fd5b8335611170816110eb565b92506020840135611180816110eb565b929592945050506040919091013590565b600080604083850312156111a457600080fd5b82356111af816110eb565b9150602083013580151581146111c457600080fd5b809150509250929050565b600080604083850312156111e257600080fd5b82356111ed816110eb565b915060208301356111c4816110eb565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610af657610af66111fd565b60008261124757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610af657610af66111fd565b600181811c9082168061127357607f821691505b60208210810361129357634e487b7160e01b600052602260045260246000fd5b50919050565b80820182811260008312801582168215821617156112b9576112b96111fd565b505092915050565b6000602082840312156112d357600080fd5b5051919050565b81810381811115610af657610af66111fd565b8181036000831280158383131683831282161715610dda57610dda6111fd56fea2646970667358221220bc32da2748ae8f1a2dea0e0b58d40c356c731fd16fc9632c52222b5fe8c7cbb664736f6c63430008180033

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

00000000000000000000000000000000e4327a1b658c56b49cede3ded3309f480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x00000000E4327A1b658C56b49cede3DEd3309f48
Arg [1] : _uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000e4327a1b658c56b49cede3ded3309f48
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.