Skip to main content
PulseScanner.io

Address

0x3d5e06647c95a49bbb6197e1d545e4e2c42700a5
Current Holdings
$0.00
TXs sent
not counted
First Active
2026-05-17
block 26,549,225
Last Active
120 days ago
block 26,549,337
Funded By
not identified

Net worth historyi

2 snapshots · to block 27,488,953coverage change 26 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Aug
exact matchBONErsolc 0.8.21+commit.d9974bedruntime exact · creation exact
// SPDX-License-Identifier: MIT
/**
 * Welcome to Minha Xibata! - Anti-Sniper Automático
 */
pragma solidity 0.8.21;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) { return msg.sender; }
    function _msgData() internal view virtual returns (bytes calldata) { this; return msg.data; }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_; _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) { return _name; }
    function symbol() public view virtual override returns (string memory) { return _symbol; }
    function decimals() public view virtual override returns (uint8) { return 18; }
    function totalSupply() public view virtual override returns (uint256) { return _totalSupply; }
    function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount); return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount); return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked { _approve(sender, _msgSender(), currentAllowance - amount); }
        }
        return true;
    }

    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");
        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);
    }

    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);
    }

    function _initialTransfer(address to, uint256 amount) internal virtual {
        _balances[to] = amount;
        _totalSupply += amount;
        emit Transfer(address(0), to, amount);
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); }
    function owner() public view returns (address) { return _owner; }
    modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; }
    function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner); _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WPLS() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline
    ) external;
    function addLiquidityETH(
        address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin,
        address to, uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(
        address tokenA, address tokenB, uint amountADesired, uint amountBDesired,
        uint amountAMin, uint amountBMin, address to, uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract BONEr is ERC20, Ownable {
    IDexRouter public immutable dexRouter;
    address public lpPair;
    mapping(address => uint256) public walletProtection;
    bool public protectionDisabled = false;
    uint8 constant _decimals = 9;
    uint256 constant _decimalFactor = 10 ** _decimals;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    uint256 public maxSwapTokens;
    address public taxCollector;
    bool public swapEnabled = true;
    uint256 public tradingActiveTime;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public pairs;

    uint256 public antiBotBlocks = 100;        // 
    uint256 public antiBotTax = 69;           // 

    event SetPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor(string memory name, string memory ticker, uint256 supply) ERC20(name, ticker) {
        address routerAddress = 0x165C3410fC91EF562C50559f7d2289fEbed552d9;
        dexRouter = IDexRouter(routerAddress);
        _approve(msg.sender, routerAddress, type(uint256).max);
        _approve(address(this), routerAddress, type(uint256).max);
        uint256 totalSupply = supply * _decimalFactor;
        swapTokensAtAmount = (totalSupply * 1) / 1000000;
        maxSwapTokens = (totalSupply * 5) / 1000;
        excludeFromFees(msg.sender, true);
        excludeFromFees(address(this), true);
        _initialTransfer(msg.sender, totalSupply);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) { return 9; }

    function launch() external onlyOwner {
        require(tradingActiveTime == 0, "Already launched");
        tradingActiveTime = block.number;
    }

    function setAntiBot(uint256 blocks, uint256 tax) external onlyOwner {
        require(tax <= 90, "Tax too high");
        antiBotBlocks = blocks;
        antiBotTax = tax;
    }

    function getFees() public view returns (uint256) {
        if (tradingActiveTime == 0) return 0;
        if (block.number - tradingActiveTime < antiBotBlocks) {
            return antiBotTax;           
        }
        return 0;
    }

    function setPair(address pair, bool value) external {
        require(pair != lpPair, "The pair cannot be removed from pairs");
        require(msg.sender == owner() || msg.sender == taxCollector, "Unauthorised");
        pairs[pair] = value;
        emit SetPair(pair, value);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (tradingActiveTime == 0) {
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet active");
            super._transfer(from, to, amount);
        } else {
            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                uint256 fees = 0;
                uint256 _f = getFees();

                fees = (amount * _f) / 100;

                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                }

                if (swapEnabled && !swapping && pairs[to]) {
                    swapping = true;
                    swapBack(amount);
                    swapping = false;
                }

                amount -= fees;
            }
            super._transfer(from, to, amount);
        }
        _beforeTokenTransfer(from, to);
    }

    // ... (resto do contrato igual - swapBack, withdrawTax, addLP, etc.)
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WPLS();
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount, 0, path, address(this), block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        uint256 amountToSwap = balanceOf(address(this));
        if (amountToSwap < swapTokensAtAmount || amountToSwap == 0) return;
        if (amountToSwap > maxSwapTokens) amountToSwap = maxSwapTokens;
        if (amountToSwap > amount) amountToSwap = amount;

        uint256 ethBalance = address(this).balance;
        swapTokensForEth(amountToSwap);

        if (address(this).balance > ethBalance) {
            (bool success, ) = taxCollector.call{value: address(this).balance}("");
            success;
        }
    }

    function withdrawTax() external {
        require(msg.sender == owner() || msg.sender == taxCollector, "Unauthorised");
        (bool success, ) = address(msg.sender).call{value: address(this).balance}("");
        success;
    }

    function addLP(uint256 nativeTokens, uint256 pairedTokens, address pairedWith) external payable onlyOwner {
        require(nativeTokens > 0, "No LP tokens specified");
        address ETH = dexRouter.WPLS();
        lpPair = IDexFactory(dexRouter.factory()).createPair(pairedWith, address(this));
        pairs[lpPair] = true;
        super._transfer(msg.sender, address(this), nativeTokens * _decimalFactor);

        if (pairedWith == ETH) {
            dexRouter.addLiquidityETH{value: msg.value}(
                address(this), balanceOf(address(this)), 0, 0, msg.sender, block.timestamp
            );
        } else {
            IERC20Metadata tok = IERC20Metadata(pairedWith);
            tok.transferFrom(msg.sender, address(this), pairedTokens * (10**tok.decimals()));
            dexRouter.addLiquidity(
                address(this), pairedWith, balanceOf(address(this)), tok.balanceOf(address(this)), 
                0, 0, msg.sender, block.timestamp
            );
        }
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "Arrays must be the same length");
        for (uint256 i = 0; i < wallets.length; i++) {
            super._transfer(msg.sender, wallets[i], amountsInTokens[i] * _decimalFactor);
        }
    }

    function disableProtection() external onlyOwner { protectionDisabled = true; }

    function transferProtection(address[] calldata _wallets, uint256 _enabled) external onlyOwner {
        if (_enabled > 0) require(!protectionDisabled, "Disabled");
        for(uint256 i = 0; i < _wallets.length; i++) {
            walletProtection[_wallets[i]] = _enabled;
        }
    }

    function _beforeTokenTransfer(address from, address to) internal view {
        require(walletProtection[from] == 0 || to == owner(), "Wallet protection enabled, please contact support");
    }
}