Transaction Hash:
Block:
18941785 at Jan-05-2024 02:53:11 PM +UTC
Transaction Fee:
0.00158171088351696 ETH
$3.98
Gas Used:
46,302 Gas / 34.16074648 Gwei
Emitted Events:
225 |
Intellix.Approval( owner=[Sender] 0x6d0f32a80f26f72d57591e8af889a261dabe5cf0, spender=0x00000000...43aC78BA3, value=1511158028992959235523913 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x1f9090aa...8e676c326
Miner
| 5.744661916949623218 Eth | 5.744666547149623218 Eth | 0.0000046302 | ||
0x23D894fb...D1F3894b2 | |||||
0x6D0f32A8...1DAbE5cF0 |
8.016328272355401865 Eth
Nonce: 3651
|
8.014746561471884905 Eth
Nonce: 3652
| 0.00158171088351696 |
Execution Trace
Intellix.approve( spender=0x000000000022D473030F116dDEE9F6B43aC78BA3, amount=1511158028992959235523913 ) => ( True )
approve[ERC20 (ln:322)]
_approve[ERC20 (ln:323)]
Approval[ERC20 (ln:420)]
_msgSender[ERC20 (ln:323)]
/* SPDX-License-Identifier: MIT */ pragma solidity 0.8.19; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); 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); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } 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); } library Address { function sendValue(address payable recipient, uint256 amount) internal returns(bool){ require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); return success; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } 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; } } 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) { uint256 currentAllowance = _allowances[sender][_msgSender()]; if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } } _transfer(sender, recipient, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } 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; } 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); } 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); } 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); } 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 _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract Intellix is ERC20, Ownable { using Address for address payable; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping (address => bool) private _isExcludedFromFees; mapping (address => uint256) public _tierOneTimestamp; uint256 public basicThreshold; mapping (address => uint256) public _tierTwoTimestamp; uint256 public bronzeThreshold; mapping (address => uint256) public _tierThreeTimestamp; uint256 public silverThreshold; mapping (address => uint256) public _tierFourTimestamp; uint256 public goldThreshold; mapping (address => uint256) public _tierFiveTimestamp; uint256 public platinumThreshold; uint256 public daysToHold; uint256 public ITXVaultFeeOnBuy; uint256 public ITXVaultFeeOnSell; uint256 public ITXRevFeeOnBuy; uint256 public ITXRevFeeOnSell; uint256 public totalBuyFee; uint256 public totalSellFee; address public ITXVaultWallet; address public ITXRevWallet; uint256 public swapTokensAtAmount; bool private swapping; bool public swapEnabled; event ExcludeFromFees(address indexed account, bool isExcluded); event ITXVaultWalletChanged(address ITXVaultWallet); event ITXRevWalletChanged(address ITXRevWallet); event UpdateFees(uint256 ITXVaultFeeOnBuy, uint256 ITXVaultFeeOnSell, uint256 ITXRevFeeOnBuy, uint256 ITXRevFeeOnSell); event SwapAndSendITXVault(uint256 tokensSwapped, uint256 bnbSend); event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount); event TradingEnabled(bool tradingEnabled); constructor () ERC20("Intellix", "ITX") { address router; address pinkLock; if (block.chainid == 56) { router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router pinkLock = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE; // BSC PinkLock } else if (block.chainid == 97) { router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router pinkLock = 0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5; // BSC Testnet PinkLock } else if (block.chainid == 1 || block.chainid == 5) { router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet pinkLock = 0x71B5759d73262FBb223956913ecF4ecC51057641; // ETH PinkLock } else { revert(); } IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _approve(address(this), address(uniswapV2Router), type(uint256).max); ITXVaultFeeOnBuy = 3; ITXVaultFeeOnSell = 3; ITXRevFeeOnBuy = 2; ITXRevFeeOnSell = 2; totalBuyFee = ITXVaultFeeOnBuy + ITXRevFeeOnBuy; totalSellFee = ITXVaultFeeOnSell + ITXRevFeeOnSell; ITXVaultWallet = 0x4602254ABC766D31267F1501aF5f88c094A0402e; ITXRevWallet = 0x1287E0A24F2Fb3E832993e3484E14Af63fE5C5f4; maxWalletLimitEnabled = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[ITXVaultWallet] = true; _isExcludedFromMaxWalletLimit[ITXRevWallet] = true; _isExcludedFromMaxWalletLimit[pinkLock] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[pinkLock] = true; _isExcludedFromFees[ITXVaultWallet] = true; _isExcludedFromFees[ITXRevWallet] = true; _mint(owner(), 1e9 * (10 ** decimals())); swapTokensAtAmount = totalSupply() / 5_000; maxWalletAmount = totalSupply() * 20 / 1000; basicThreshold = 100_000; bronzeThreshold = 500_000; silverThreshold = 1_000_000; goldThreshold = 5_000_000; platinumThreshold = 10_000_000; daysToHold = 30 days; tradingEnabled = false; swapEnabled = false; } receive() external payable {} function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim contract's balance of its own tokens"); if (token == address(0x0)) { payable(msg.sender).sendValue(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function setTierSettings(uint256 _basicThreshold, uint256 _bronzeThreshold, uint256 _silverThreshold, uint256 _goldThreshold, uint256 _platinumThreshold, uint256 _daysToHold) external onlyOwner { basicThreshold = _basicThreshold; bronzeThreshold = _bronzeThreshold; silverThreshold = _silverThreshold; goldThreshold = _goldThreshold; platinumThreshold = _platinumThreshold; daysToHold = _daysToHold; require(_daysToHold >= 1 days && _daysToHold <= 40 days, "Wrong format"); require(_basicThreshold <= 1e9, "Wrong format"); require(_bronzeThreshold <= 1e9, "Wrong format"); require(_silverThreshold <= 1e9, "Wrong format"); require(_goldThreshold <= 1e9, "Wrong format"); require(_platinumThreshold <= 1e9, "Wrong format"); } function setTiers(address account) internal { if (balanceOf(account) >= basicThreshold * (10 ** decimals()) && _tierOneTimestamp[account] == 0){ _tierOneTimestamp[account] = block.timestamp; } else if (balanceOf(account) < basicThreshold * (10 ** decimals())) { _tierOneTimestamp[account] = 0; } if (balanceOf(account) >= bronzeThreshold * (10 ** decimals()) && _tierTwoTimestamp[account] == 0){ _tierTwoTimestamp[account] = block.timestamp; } else if (balanceOf(account) < bronzeThreshold * (10 ** decimals())) { _tierTwoTimestamp[account] = 0; } if (balanceOf(account) >= silverThreshold * (10 ** decimals()) && _tierThreeTimestamp[account] == 0){ _tierThreeTimestamp[account] = block.timestamp; } else if (balanceOf(account) < silverThreshold * (10 ** decimals())) { _tierThreeTimestamp[account] = 0; } if (balanceOf(account) >= goldThreshold * (10 ** decimals()) && _tierFourTimestamp[account] == 0){ _tierFourTimestamp[account] = block.timestamp; } else if (balanceOf(account) < goldThreshold * (10 ** decimals())) { _tierFourTimestamp[account] = 0; } if (balanceOf(account) >= platinumThreshold * (10 ** decimals()) && _tierFiveTimestamp[account] == 0){ _tierFiveTimestamp[account] = block.timestamp; } else if (balanceOf(account) < platinumThreshold * (10 ** decimals())) { _tierFiveTimestamp[account] = 0; } } function getTier(address account) public view returns (string memory) { if (block.timestamp > _tierFiveTimestamp[account] + daysToHold && _tierFiveTimestamp[account] != 0 && balanceOf(account) >= platinumThreshold) { return "Platinum Tier"; } if (block.timestamp > _tierFourTimestamp[account] + daysToHold && _tierFourTimestamp[account] != 0 && balanceOf(account) >= goldThreshold) { return "Gold Tier"; } if (block.timestamp > _tierThreeTimestamp[account] + daysToHold && _tierThreeTimestamp[account] != 0 && balanceOf(account) >= silverThreshold) { return "Silver Tier"; } if (block.timestamp > _tierTwoTimestamp[account] + daysToHold && _tierTwoTimestamp[account] != 0 && balanceOf(account) >= bronzeThreshold) { return "Bronze Tier"; } if (block.timestamp > _tierOneTimestamp[account] + daysToHold && _tierOneTimestamp[account] != 0 && balanceOf(account) >= basicThreshold) { return "Basic Tier"; } return "Entry Level"; } function excludeFromFees(address account, bool excluded) external onlyOwner{ require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function updateFees(uint256 _ITXVaultFeeOnBuy, uint256 _ITXVaultFeeOnSell, uint256 _ITXRevFeeOnBuy, uint256 _ITXRevFeeOnSell) external onlyOwner { ITXVaultFeeOnSell = _ITXVaultFeeOnSell; ITXVaultFeeOnBuy = _ITXVaultFeeOnBuy; ITXRevFeeOnBuy = _ITXRevFeeOnBuy; ITXRevFeeOnSell = _ITXRevFeeOnSell; totalBuyFee = ITXVaultFeeOnBuy + ITXRevFeeOnBuy; totalSellFee = ITXVaultFeeOnSell + ITXRevFeeOnSell; require(totalBuyFee <= 5, "Total Fees cannot exceed the maximum"); require(totalSellFee <= 5, "Total Fees cannot exceed the maximum"); emit UpdateFees(ITXVaultFeeOnSell, ITXVaultFeeOnBuy, ITXRevFeeOnBuy, ITXRevFeeOnSell); } function changeITXVaultWallet(address _ITXVaultWallet) external onlyOwner{ require(_ITXVaultWallet != ITXVaultWallet,"ITXVault wallet is already that address"); require(_ITXVaultWallet != address(0),"ITXVault wallet cannot be the zero address"); ITXVaultWallet = _ITXVaultWallet; emit ITXVaultWalletChanged(ITXVaultWallet); } function changeITXRevtWallet(address _ITXRevWallet) external onlyOwner{ require(_ITXRevWallet != ITXRevWallet,"ITXRev wallet is already that address"); require(_ITXRevWallet != address(0),"ITXRev wallet cannot be the zero address"); ITXRevWallet = _ITXRevWallet; emit ITXRevWalletChanged(ITXRevWallet); } bool public tradingEnabled; uint256 tradingBlock; uint256 tradingTime; function enableTrading() external onlyOwner{ require(!tradingEnabled, "Trading already enabled."); tradingEnabled = true; swapEnabled = true; tradingBlock = block.number; tradingTime = block.timestamp; emit TradingEnabled(tradingEnabled); } 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"); require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!"); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !swapping && to == uniswapV2Pair && totalBuyFee + totalSellFee > 0 && swapEnabled ) { swapping = true; swapAndSendITX(contractTokenBalance); swapping = false; } uint256 _totalFees; if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) { _totalFees = 0; } else if (block.number <= tradingBlock + 1){ _totalFees = 99; } else if (block.timestamp <= tradingTime + 2 hours) { if (from == uniswapV2Pair) { _totalFees = 5; } else if (to == uniswapV2Pair) { _totalFees = 20; } } else if (from == uniswapV2Pair) { _totalFees = totalBuyFee; } else if (to == uniswapV2Pair) { _totalFees = totalSellFee; } else { _totalFees = 0; } if (_totalFees > 0) { uint256 fees = (amount * _totalFees) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } if (maxWalletLimitEnabled) { if (!_isExcludedFromMaxWalletLimit[from] && !_isExcludedFromMaxWalletLimit[to] && to != uniswapV2Pair ) { uint256 balance = balanceOf(to); require( balance + amount <= maxWalletAmount, "MaxWallet: Recipient exceeds the maxWalletAmount" ); } } super._transfer(from, to, amount); setTiers(from); setTiers(to); } function setSwapEnabled(bool _enabled) external onlyOwner{ require(swapEnabled != _enabled, "swapEnabled already at this state."); swapEnabled = _enabled; } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{ require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply"); swapTokensAtAmount = newAmount; emit SwapTokensAtAmountUpdated(swapTokensAtAmount); } function swapAndSendITX(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; // (totalBuyFee + totalSellFee) always greater than 0, checked in transfer func. uint256 vaultBalance = (ITXVaultFeeOnBuy + ITXVaultFeeOnSell) * newBalance / (totalBuyFee + totalSellFee); if (vaultBalance > 0){ payable(ITXVaultWallet).sendValue(vaultBalance); } if (newBalance - vaultBalance > 0) { payable(ITXRevWallet).sendValue(newBalance - vaultBalance); } emit SwapAndSendITXVault(tokenAmount, newBalance); } mapping(address => bool) private _isExcludedFromMaxWalletLimit; bool public maxWalletLimitEnabled; uint256 public maxWalletAmount; event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded); event MaxWalletLimitStateChanged(bool maxWalletLimit); event MaxWalletLimitAmountChanged(uint256 maxWalletAmount); function setEnableMaxWalletLimit(bool enable) external onlyOwner { require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state"); maxWalletLimitEnabled = enable; emit MaxWalletLimitStateChanged(maxWalletLimitEnabled); } function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner { require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%"); maxWalletAmount = _maxWalletAmount * (10 ** decimals()); emit MaxWalletLimitAmountChanged(maxWalletAmount); } function excludeFromMaxWallet(address account, bool exclude) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state"); require(account != address(this), "Can't set this address."); _isExcludedFromMaxWalletLimit[account] = exclude; emit ExcludedFromMaxWalletLimit(account, exclude); } function isExcludedFromMaxWalletLimit(address account) public view returns(bool) { return _isExcludedFromMaxWalletLimit[account]; } }