false
true
0

Contract Address Details

0x31A4ffe71bFEADBDa769d4a3E03Bf4aE5c28EE31

Token
Blastoise カメックス (Blastoise)
Creator
0xc54f4b–186f55 at 0x1adbb7–bdd6ec
Implementation
HoldFunTokenClone | 0xbce17d7f33824b430424a1760e7db8018788b763
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
1,725 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25892330
Minimal Proxy Contract for 0xbce17d7f33824b430424a1760e7db8018788b763.
EIP-1167 - minimal bytecode implementation that delegates all calls to a known address
Contract name:
HoldFunTokenClone




Optimization enabled
true
Compiler version
v0.8.24+commit.e11b9ed9




Optimization runs
200
Verified at
2024-07-08T18:04:24.171309Z

contracts/v2/HoldFunTokenClones.sol

// SPDX-License-Identifier: UNLICENSED
/* 
---- ** Hold.Fun **----

Trade this token on -> https://hold.fun

https://t.me/HoldFun
https://x.com/HoldDotFun

----------------------
*/
pragma solidity ^0.8.24;

import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";

interface IHoldFunTokenClone is IERC20 {
    function init(
        address _unifactory,
        address _weth,
        string memory name_,
        string memory symbol_,
        uint256 initialSupply_,
        uint256 maxWallet_
    ) external;

    function setmaxWallet(uint256 _maxWallet) external;

    function maxWallet() external view returns (uint256);

    function renounceOwnership() external;
}

contract HoldFunTokenClone is ERC20Upgradeable, OwnableUpgradeable {
    address immutable boundingCurve;

    uint256 public maxWallet;
    address public pairAddress;

    constructor(address _boundingCurve) {
        boundingCurve = _boundingCurve;
    }

    function init(
        address _unifactory,
        address _weth,
        string memory name_,
        string memory symbol_,
        uint256 initialSupply_,
        uint256 maxWallet_
    ) external initializer {
        require(msg.sender == boundingCurve, "HoldDotFunToken: FORBIDDEN");
        __ERC20_init(name_, symbol_);
        __Ownable_init(boundingCurve);
        _mint(msg.sender, initialSupply_);
        maxWallet = maxWallet_;
        pairAddress = IUniswapV2Factory(_unifactory).createPair(
            address(this),
            _weth
        );
    }

    function setmaxWallet(uint256 _maxWallet) external onlyOwner {
        maxWallet = _maxWallet;
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        super._update(from, to, value);

        // if owner is not address 0 means this is not launched
        if (owner() != address(0)) {
            // can't sen tokens to pair before launch
            require(
                // check if to is a contract
                !isContract(to) || from == owner() || to == owner(),
                "HoldDotFunToken: Can't send tokens to contracts before launch"
            );

            // max wallet
            if (maxWallet > 0 && to != owner()) {
                require(
                    balanceOf(to) <= maxWallet,
                    "HoldDotFunToken: Max wallet limit exceeded"
                );
            }
        }
    }

    function isContract(address _addr) private view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }
}
        

Compiler Settings

{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_boundingCurve","internalType":"address"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"allowance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"uint256","name":"balance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"type":"address","name":"approver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"type":"address","name":"sender","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"type":"uint64","name":"version","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"init","inputs":[{"type":"address","name":"_unifactory","internalType":"address"},{"type":"address","name":"_weth","internalType":"address"},{"type":"string","name":"name_","internalType":"string"},{"type":"string","name":"symbol_","internalType":"string"},{"type":"uint256","name":"initialSupply_","internalType":"uint256"},{"type":"uint256","name":"maxWallet_","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pairAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setmaxWallet","inputs":[{"type":"uint256","name":"_maxWallet","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x3d602d80600a3d3981f3363d3d373d3d3d363d73bce17d7f33824b430424a1760e7db8018788b7635af43d82803e903d91602b57fd5bf3

Deployed ByteCode

0x363d3d373d3d3d363d73bce17d7f33824b430424a1760e7db8018788b7635af43d82803e903d91602b57fd5bf3