Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x6104e761 | 15143894 | 862 days ago | IN | 0 ETH | 0.00675235 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
IterableMapping
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-14 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; 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 IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); 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; } 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 SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } 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; } } 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 { using SafeMath for uint256; 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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 {} } contract JigsawToken is ERC20, Ownable { using IterableMapping for IterableMapping.Map; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; IterableMapping.Map private tokenHoldersMap; string private constant _name = "JigsawToken"; string private constant _symbol = "JIGSAW"; uint8 private constant _decimals = 18; bool public isTradingEnabled; uint256 private _tradingPausedTimestamp; // initialSupply uint256 constant initialSupply = 1000000000 * (10**18); // max wallet is 2.0% of initialSupply uint256 public maxWalletAmount = initialSupply * 200 / 10000; bool private _swapping; uint256 public minimumTokensBeforeSwap = 25000000 * (10**18); address public liquidityWallet; address public operationsWallet; address public jigsawWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 operationsFeeOnBuy; uint8 operationsFeeOnSell; uint8 jigsawFeeOnBuy; uint8 jigsawFeeOnSell; } CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,2,2,3,3); uint256 private _launchStartTimestamp; uint256 private _launchBlockNumber; uint256 private constant _blockedTimeLimit = 172800; mapping (address => bool) private _isAllowedToTradeWhenDisabled; mapping (address => bool) private _feeOnSelectedWalletTransfers; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isBlocked; mapping (address => bool) public automatedMarketMakerPairs; uint8 private _liquidityFee; uint8 private _operationsFee; uint8 private _jigsawFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 operationsFee, uint8 jigsawFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event BlockedAccountChange(address indexed holder, bool indexed status); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint8 liquidityFee, uint8 operationsFee, uint8 jigsawFee, uint8 totalFee); constructor() ERC20(_name, _symbol) { liquidityWallet = owner(); operationsWallet = owner(); jigsawWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _mint(owner(), initialSupply); } receive() external payable {} // Setters function activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchStartTimestamp == 0) { _launchStartTimestamp = block.timestamp; _launchBlockNumber = block.number; } } function deactivateTrading() external onlyOwner { isTradingEnabled = false; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Jigsaw: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "Jigsaw: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "Jigsaw: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "Jigsaw: Account is already blocked"); require((block.timestamp - _launchStartTimestamp) < _blockedTimeLimit, "Jigsaw: Time to block accounts has expired"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "Jigsaw: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function setWallets(address newLiquidityWallet, address newOperationsWallet, address newJigsawWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "Jigsaw: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(operationsWallet != newOperationsWallet) { require(newOperationsWallet != address(0), "Jigsaw: The operationsWallet cannot be 0"); emit WalletChange('operationsWallet', newOperationsWallet, operationsWallet); operationsWallet = newOperationsWallet; } if(jigsawWallet != newJigsawWallet) { require(newJigsawWallet != address(0), "Jigsaw: The jigsawWallet cannot be 0"); emit WalletChange('jigsawWallet', newJigsawWallet, jigsawWallet); jigsawWallet = newJigsawWallet; } } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "Jigsaw: The selected wallet is already set to the value "); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } // Base Fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _operationsFeeOnBuy, uint8 _jigsawFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _operationsFeeOnBuy, _jigsawFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _operationsFeeOnBuy, _jigsawFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _operationsFeeOnSell, uint8 _jigsawFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _operationsFeeOnSell, _jigsawFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _operationsFeeOnSell, _jigsawFeeOnSell); } function setUniswapRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "Jigsaw: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "Jigsaw: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "Jigsaw: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claimETHOverflow() external onlyOwner { uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function getBaseBuyFees() external view returns (uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.operationsFeeOnBuy, _base.jigsawFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.operationsFeeOnSell, _base.jigsawFeeOnSell); } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function getTokenHolderAtIndex(uint256 accountIndex) external view returns(address) { if(accountIndex >= tokenHoldersMap.keys.length) { accountIndex = 0; } address account = tokenHoldersMap.keys[accountIndex]; return account; } // Main 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(amount == 0) { super._transfer(from, to, 0); return; } bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Jigsaw: Trading is currently disabled."); require(!_isBlocked[to], "Jigsaw: Account is blocked"); require(!_isBlocked[from], "Jigsaw: Account is blocked"); if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "Jigsaw: Expected wallet amount exceeds the maxWalletAmount."); } } _adjustTaxes(isBuyFromLp, isSelltoLp, to, from); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = amount * _totalFee / 100; amount = amount - fee; super._transfer(from, address(this), fee); } super._transfer(from, to, amount); _setBalance(from, balanceOf(from)); _setBalance(to, balanceOf(to)); } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address to, address from) private { _liquidityFee = 0; _operationsFee = 0; _jigsawFee = 0; if (isBuyFromLp) { if (block.number - _launchBlockNumber <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _operationsFee = _base.operationsFeeOnBuy; _jigsawFee = _base.jigsawFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _operationsFee = _base.operationsFeeOnSell; _jigsawFee = _base.jigsawFeeOnSell; } if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) { _liquidityFee = _base.liquidityFeeOnSell; _operationsFee = _base.operationsFeeOnSell; _jigsawFee = _base.jigsawFeeOnSell; } _totalFee = _liquidityFee + _operationsFee + _jigsawFee; emit FeesApplied(_liquidityFee, _operationsFee, _jigsawFee, _totalFee); } function _setBalance(address account, uint256 newBalance) private { if(newBalance > 0) { tokenHoldersMap.set(account, newBalance); } else { tokenHoldersMap.remove(account); } } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _operationsFeeOnSell, uint8 _jigsawFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.operationsFeeOnSell != _operationsFeeOnSell) { emit CustomTaxPeriodChange(_operationsFeeOnSell, map.operationsFeeOnSell, 'operationsFeeOnSell', map.periodName); map.operationsFeeOnSell = _operationsFeeOnSell; } if (map.jigsawFeeOnSell != _jigsawFeeOnSell) { emit CustomTaxPeriodChange(_jigsawFeeOnSell, map.jigsawFeeOnSell, 'jigsawFeeOnSell', map.periodName); map.jigsawFeeOnSell = _jigsawFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _operationsFeeOnBuy, uint8 _jigsawFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.operationsFeeOnBuy != _operationsFeeOnBuy) { emit CustomTaxPeriodChange(_operationsFeeOnBuy, map.operationsFeeOnBuy, 'operationsFeeOnBuy', map.periodName); map.operationsFeeOnBuy = _operationsFeeOnBuy; } if (map.jigsawFeeOnBuy != _jigsawFeeOnBuy) { emit CustomTaxPeriodChange(_jigsawFeeOnBuy, map.jigsawFeeOnBuy, 'jigsawFeeOnBuy', map.periodName); map.jigsawFeeOnBuy = _jigsawFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - (amountToLiquify); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - (_liquidityFee / 2); uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2; uint256 amountETHOperations = ETHBalanceAfterSwap * _operationsFee / totalETHFee; uint256 amountETHJigsaw = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHOperations); payable(operationsWallet).transfer(amountETHOperations); payable(jigsawWallet).transfer(amountETHJigsaw); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify); } _totalFee = totalFeePrior; } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract Creation Code
6104e761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c806317e142d1146100715780634c60db9c14610097578063732a2ccf146100b9578063bc2b405c146100e6578063d1aa9e7e14610106578063deb3d89614610131575b600080fd5b61008461007f3660046103c4565b610143565b6040519081526020015b60405180910390f35b8180156100a357600080fd5b506100b76100b23660046103c4565b610191565b005b6100846100c73660046103c4565b6001600160a01b03166000908152600191909101602052604090205490565b8180156100f257600080fd5b506100b76101013660046103f0565b6102cc565b610119610114366004610425565b610375565b6040516001600160a01b03909116815260200161008e565b61008461013f366004610447565b5490565b6001600160a01b038116600090815260038301602052604081205460ff1661016e575060001961018b565b506001600160a01b03811660009081526002830160205260409020545b92915050565b6001600160a01b038116600090815260038301602052604090205460ff166101b7575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161020191610460565b9050600084600001828154811061021a5761021a610485565b60009182526020808320909101546001600160a01b0390811680845260028901909252604080842087905590871683528220919091558554909150819086908590811061026957610269610485565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806102a3576102a361049b565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b038216600090815260038401602052604090205460ff1615610311576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b600082600001828154811061038c5761038c610485565b6000918252602090912001546001600160a01b03169392505050565b80356001600160a01b03811681146103bf57600080fd5b919050565b600080604083850312156103d757600080fd5b823591506103e7602084016103a8565b90509250929050565b60008060006060848603121561040557600080fd5b83359250610415602085016103a8565b9150604084013590509250925092565b6000806040838503121561043857600080fd5b50508035926020909101359150565b60006020828403121561045957600080fd5b5035919050565b60008282101561048057634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220265a96f7a6f9459f543b40545ca59b6887c7cb71e98c942c62395aa06a7f46e464736f6c634300080f0033
Deployed Bytecode
0x73d1a7de14b92f3dc141b67d979af737f665692615301460806040526004361061006c5760003560e01c806317e142d1146100715780634c60db9c14610097578063732a2ccf146100b9578063bc2b405c146100e6578063d1aa9e7e14610106578063deb3d89614610131575b600080fd5b61008461007f3660046103c4565b610143565b6040519081526020015b60405180910390f35b8180156100a357600080fd5b506100b76100b23660046103c4565b610191565b005b6100846100c73660046103c4565b6001600160a01b03166000908152600191909101602052604090205490565b8180156100f257600080fd5b506100b76101013660046103f0565b6102cc565b610119610114366004610425565b610375565b6040516001600160a01b03909116815260200161008e565b61008461013f366004610447565b5490565b6001600160a01b038116600090815260038301602052604081205460ff1661016e575060001961018b565b506001600160a01b03811660009081526002830160205260409020545b92915050565b6001600160a01b038116600090815260038301602052604090205460ff166101b7575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161020191610460565b9050600084600001828154811061021a5761021a610485565b60009182526020808320909101546001600160a01b0390811680845260028901909252604080842087905590871683528220919091558554909150819086908590811061026957610269610485565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806102a3576102a361049b565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b038216600090815260038401602052604090205460ff1615610311576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b600082600001828154811061038c5761038c610485565b6000918252602090912001546001600160a01b03169392505050565b80356001600160a01b03811681146103bf57600080fd5b919050565b600080604083850312156103d757600080fd5b823591506103e7602084016103a8565b90509250929050565b60008060006060848603121561040557600080fd5b83359250610415602085016103a8565b9150604084013590509250925092565b6000806040838503121561043857600080fd5b50508035926020909101359150565b60006020828403121561045957600080fd5b5035919050565b60008282101561048057634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220265a96f7a6f9459f543b40545ca59b6887c7cb71e98c942c62395aa06a7f46e464736f6c634300080f0033
Deployed Bytecode Sourcemap
3543:1331:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3829:165;;;;;;:::i;:::-;;:::i;:::-;;;624:25:1;;;612:2;597:18;3829:165:0;;;;;;;;4476:395;;;;;;;;;;-1:-1:-1;4476:395:0;;;;;:::i;:::-;;:::i;:::-;;3722:102;;;;;;:::i;:::-;-1:-1:-1;;;;;3804:15:0;3786:4;3804:15;;;:10;;;;;:15;;;;;;;3722:102;4213:258;;;;;;;;;;-1:-1:-1;4213:258:0;;;;;:::i;:::-;;:::i;3999:114::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1644:32:1;;;1626:51;;1614:2;1599:18;3999:114:0;1472:211:1;4118:90:0;;;;;;:::i;:::-;4188:15;;4118:90;3829:165;-1:-1:-1;;;;;3917:17:0;;3903:3;3917:17;;;:12;;;:17;;;;;;;;3913:44;;-1:-1:-1;;;3942:9:0;;3913:44;-1:-1:-1;;;;;;3972:16:0;;;;;;:11;;;:16;;;;;;3829:165;;;;;:::o;4476:395::-;-1:-1:-1;;;;;4539:17:0;;;;;;:12;;;:17;;;;;;;;4534:42;;4476:395;;:::o;4534:42::-;-1:-1:-1;;;;;4589:17:0;;;;;;:12;;;:17;;;;;;;;4582:24;;-1:-1:-1;;4582:24:0;;;;4618:10;;;:15;;;;;4611:22;;;4653:11;;;:16;;;;;;4691:15;;4653:16;;4589:17;4691:19;;;:::i;:::-;4674:36;;4715:15;4733:3;:8;;4742:9;4733:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;4733:19:0;;;4759:20;;;:11;;;:20;;;;;;;:28;;;4799:16;;;;;;;4792:23;;;;4822:15;;4733:19;;-1:-1:-1;4733:19:0;;4759:3;;4782:5;;4822:15;;;;;;:::i;:::-;;;;;;;;;;:25;;-1:-1:-1;;;;;;4822:25:0;-1:-1:-1;;;;;4822:25:0;;;;;;;;;;4852:14;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;4852:14:0;;;;;-1:-1:-1;;;;;;4852:14:0;;;;;;-1:-1:-1;;;;;4476:395:0:o;4213:258::-;-1:-1:-1;;;;;4282:17:0;;;;;;:12;;;:17;;;;;;;;4278:189;;;-1:-1:-1;;;;;4307:15:0;;;;;;:10;;;:15;;;;;:21;;;4213:258;;;:::o;4278:189::-;-1:-1:-1;;;;;4346:17:0;;;;;;:12;;;:17;;;;;;;;:24;;-1:-1:-1;;4346:24:0;4366:4;4346:24;;;;;;4376:10;;;:15;;;;;:21;;;4422:15;;4403:11;;;:16;;;;;:34;;;4443:18;;;;;;;;;;;;-1:-1:-1;;;;;;4443:18:0;;;;;;4213:258;;;:::o;3999:114::-;4072:7;4093:3;:8;;4102:5;4093:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4093:15:0;;3999:114;-1:-1:-1;;;3999:114:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:275::-;281:6;289;342:2;330:9;321:7;317:23;313:32;310:52;;;358:1;355;348:12;310:52;394:9;381:23;371:33;;423:38;457:2;446:9;442:18;423:38;:::i;:::-;413:48;;192:275;;;;;:::o;850:343::-;948:6;956;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1069:9;1056:23;1046:33;;1098:38;1132:2;1121:9;1117:18;1098:38;:::i;:::-;1088:48;;1183:2;1172:9;1168:18;1155:32;1145:42;;850:343;;;;;:::o;1198:269::-;1287:6;1295;1348:2;1336:9;1327:7;1323:23;1319:32;1316:52;;;1364:1;1361;1354:12;1316:52;-1:-1:-1;;1387:23:1;;;1457:2;1442:18;;;1429:32;;-1:-1:-1;1198:269:1:o;1688:201::-;1768:6;1821:2;1809:9;1800:7;1796:23;1792:32;1789:52;;;1837:1;1834;1827:12;1789:52;-1:-1:-1;1860:23:1;;1688:201;-1:-1:-1;1688:201:1:o;1894:222::-;1934:4;1962:1;1959;1956:8;1953:131;;;2006:10;2001:3;1997:20;1994:1;1987:31;2041:4;2038:1;2031:15;2069:4;2066:1;2059:15;1953:131;-1:-1:-1;2101:9:1;;1894:222::o;2121:127::-;2182:10;2177:3;2173:20;2170:1;2163:31;2213:4;2210:1;2203:15;2237:4;2234:1;2227:15;2253:127;2314:10;2309:3;2305:20;2302:1;2295:31;2345:4;2342:1;2335:15;2369:4;2366:1;2359:15
Swarm Source
ipfs://265a96f7a6f9459f543b40545ca59b6887c7cb71e98c942c62395aa06a7f46e4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.