Transaction Hash:
Block:
20601136 at Aug-24-2024 09:27:35 PM +UTC
Transaction Fee:
0.000042041809221426 ETH
$0.11
Gas Used:
46,242 Gas / 0.909169353 Gwei
Emitted Events:
449 |
Pug.Approval( owner=[Sender] 0x28ee3ef7949643bbd76e46b50e841c658cd912d8, spender=0x11111112...73A960582, value=126884275051731 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x28Ee3EF7...58cd912d8 |
0.000704560842384369 Eth
Nonce: 26
|
0.000662519033162943 Eth
Nonce: 27
| 0.000042041809221426 | ||
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 14.208513329718117481 Eth | 14.208513375960117481 Eth | 0.000000046242 | |
0xeBe8b87b...8a147cAF0 |
Execution Trace
Pug.approve( spender=0x1111111254EEB25477B68fb85Ed929f73A960582, amount=126884275051731 ) => ( True )
approve[Pug (ln:299)]
Approval[Pug (ln:301)]
/* TG https://t.me/pugethtoken Twitter https://twitter.com/PugETHToken Website https://pugeth.com/ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣠⢤⣀⣀⡀⠀⠀⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⣠⠖⠉⠙⡖⢊⢉⡴⢀⠜⠁⡔⠀⡀⠈⣉⢍⠁⠀⠈⠙⠲⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣠⢾⣷⡤⠀⣰⠟⣫⠋⢀⠊⢀⠀⠳⡀⢣⡀⢹⡈⢧⣴⣶⡄⠘⢦⡀⠙⠲⢤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⣠⠔⢋⣠⣾⡟⠤⠚⠡⠚⠁⠀⢸⠀⢸⡀⠙⠻⠄⠑⠆⠑⢌⠻⣿⣿⣄⠀⠹⣆⢰⣄⠈⢹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢀⠞⢁⡴⣻⣿⡟⠀⠀⠤⠤⠤⣀⠀⢸⠄⢨⣀⣠⠤⣄⡀⠀⠀⠀⠀⠙⠻⣿⣆⠀⢹⣿⣿⣦⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢾⣠⡾⣽⣿⡟⢀⣠⣤⡶⠀⢳⡈⠃⠀⠀⠘⠉⡴⠀⣬⣉⠙⠲⢄⠀⠀⠀⠈⢻⣆⢸⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠈⢻⢳⣿⣿⡀⠀⠾⢿⣿⣆⡾⠗⠒⠛⠓⠶⣾⡇⢰⣶⣿⣿⣦⣀⡀⠀⠀⠀⣰⣿⣆⢻⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⣼⣿⣿⣿⣿⣿⣿⣿⠿⠋⣀⣴⣶⣶⣶⣤⡈⠻⣾⣟⡥⣛⣿⣷⣝⢶⡄⢰⣿⣿⣿⣦⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⣿⣿⠟⠘⣷⣙⠛⢃⣤⣾⣿⣃⡄⢠⣤⢹⣿⣦⡀⠉⠈⣿⣿⠿⢛⣼⢣⠈⢿⢻⡇⢻⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣿⣿⠇⢘⣫⣿⣤⢉⣹⠀⣋⠉⣈⠉⢿⣦⣈⣿⣿⣿⣿⠃⢸⠄⢸⢸⡇⠀⢻⣆⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠸⣿⠀⢀⣀⣻⠁⠀⣸⠈⠁⣴⣮⢍⠛⠿⣧⠘⣿⡟⠋⢀⠎⠀⠉⣸⠀⠀⠀⢹⡿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣷⠴⢋⣍⣠⡴⠚⠛⠳⢤⣈⠑⠦⣀⠀⠘⢷⡝⠷⢀⠞⢀⢤⣰⠃⠀⠀⢠⣿⠃⡏⠙⢲⣄⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠸⣶⣿⣿⠟⠀⠀⢠⡀⠀⠙⠷⣦⣌⡉⠀⢀⡷⠀⢀⡴⢁⠞⠁⠀⢀⣴⡟⠁⠀⠁⠀⢀⣿⣆⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠈⠻⡟⠳⣤⡼⠟⠻⠦⣀⣦⡀⠙⣿⣿⣿⢟⡠⢊⡠⠋⠀⣠⣶⠟⠁⠀⠀⢀⣠⣶⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢳⣶⣖⣢⡤⢖⣀⣀⠤⠛⢉⣀⡥⠖⢉⣠⣴⠟⠋⠀⠀⠀⣠⣴⣿⣿⠿⠟⣻⣿⣿⣿⣷⣦⣀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⡟⠛⠟⢋⣩⣴⠶⠚⠉⠁⣠⡶⠟⠉⠀⠀⠀⢀⣤⣾⡿⠟⠉⠀⣠⣾⣿⠿⠿⠿⠿⢿⣿⣦⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣇⡀⠐⠟⠋⠁⠀⢀⡴⠛⠁⠀⠀⠀⠀⢀⣴⣿⠟⠉⠀⠀⢀⡾⠛⠉⠀⠀⠀⠀⠀⠀⠀⠉⠃ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠔⠋⠀⠀⠀⠀⠀⠔⠁⠀⠀⠀⠀⠀⠀⣠⡿⠋⠀⠀⠀⠀⡰⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡆⠀⣀⠴⠂⠀⠀⠀⠀⠀⠀⠀⠀⢠⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣧⣀⠀⠀⠀⠀⠀⠀⢀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⡀⠀⠀⣀⣤⠾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.20; interface ERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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); } 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) { 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; return c; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } contract Ownable is Context { address public _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; authorizations[_owner] = true; emit OwnershipTransferred(address(0), msgSender); } mapping (address => bool) internal authorizations; 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 IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { 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 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 InterfaceLP { function sync() external; } contract Pug is Ownable, ERC20 { using SafeMath for uint256; address WETH; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; string constant _name = "Pug"; string constant _symbol = "PUG "; uint8 constant _decimals = 9; uint256 _totalSupply = 1 * 10**9 * 10**_decimals; uint256 public _maxTxAmount = _totalSupply.mul(1).div(100); uint256 public _maxWalletToken = _totalSupply.mul(1).div(100); mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeexempt; mapping (address => bool) isTxLimitexempt; uint256 private liquidityFee = 1; uint256 private marketingFee = 3; uint256 private devFee = 0; uint256 private teamFee = 1; uint256 private burnFee = 0; uint256 public totalFee = teamFee + marketingFee + liquidityFee + devFee + burnFee; uint256 private feeDenominator = 100; uint256 sellmultiplier = 800; uint256 buymultiplier = 500; uint256 transfertax = 800; address private autoLiquidityReceiver; address private marketingFeeReceiver; address private devFeeReceiver; address private teamFeeReceiver; address private burnFeeReceiver; uint256 targetLiquidity = 30; uint256 targetLiquidityDenominator = 100; IDEXRouter public router; InterfaceLP private pairContract; address public pair; bool public TradingOpen = false; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply * 60 / 1000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () { router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); WETH = router.WETH(); pair = IDEXFactory(router.factory()).createPair(WETH, address(this)); pairContract = InterfaceLP(pair); _allowances[address(this)][address(router)] = type(uint256).max; isFeeexempt[msg.sender] = true; isFeeexempt[devFeeReceiver] = true; isTxLimitexempt[msg.sender] = true; isTxLimitexempt[pair] = true; isTxLimitexempt[devFeeReceiver] = true; isTxLimitexempt[marketingFeeReceiver] = true; isTxLimitexempt[address(this)] = true; autoLiquidityReceiver = msg.sender; marketingFeeReceiver = 0x9D8FBeC2aA1EF4cFB322aF7d96496555086f6027; devFeeReceiver = msg.sender; teamFeeReceiver = msg.sender; burnFeeReceiver = DEAD; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) {return owner();} function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function removelimits () external onlyOwner { _maxTxAmount = _totalSupply; _maxWalletToken = _totalSupply; } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } if(!authorizations[sender] && !authorizations[recipient]){ require(TradingOpen,"Trading not open yet"); } if (!authorizations[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != burnFeeReceiver && recipient != marketingFeeReceiver && !isTxLimitexempt[recipient]){ uint256 heldTokens = balanceOf(recipient); require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");} checkTxLimit(sender, amount); if(shouldSwapBack()){ swapBack(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = (isFeeexempt[sender] || isFeeexempt[recipient]) ? amount : takeFee(sender, amount, recipient); _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitexempt[sender], "TX Limit Exceeded"); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeexempt[sender]; } function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) { uint256 percent = transfertax; if(recipient == pair) { percent = sellmultiplier; } else if(sender == pair) { percent = buymultiplier; } uint256 feeAmount = amount.mul(totalFee).mul(percent).div(feeDenominator * 100); uint256 burnTokens = feeAmount.mul(burnFee).div(totalFee); uint256 contractTokens = feeAmount.sub(burnTokens); _balances[address(this)] = _balances[address(this)].add(contractTokens); _balances[burnFeeReceiver] = _balances[burnFeeReceiver].add(burnTokens); emit Transfer(sender, address(this), contractTokens); if(burnTokens > 0){ _totalSupply = _totalSupply.sub(burnTokens); emit Transfer(sender, ZERO, burnTokens); } return amount.sub(feeAmount); } function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function manualSend() external { payable(autoLiquidityReceiver).transfer(address(this).balance); } function clearForeignToken(address tokenAddress, uint256 tokens) public returns (bool) { if(tokens == 0){ tokens = ERC20(tokenAddress).balanceOf(address(this)); } return ERC20(tokenAddress).transfer(autoLiquidityReceiver, tokens); } function setMultipliers(uint256 _issell, uint256 _isbuy, uint256 _wallet) external onlyOwner { sellmultiplier = _issell; buymultiplier = _isbuy; transfertax = _wallet; } function setMaxHolding(uint256 maxWallPercent) external onlyOwner { require(maxWallPercent >= 1); _maxWalletToken = (_totalSupply * maxWallPercent ) / 1000; } function setMaxTransaction(uint256 maxTXPercent) external onlyOwner { require(maxTXPercent >= 1); _maxTxAmount = (_totalSupply * maxTXPercent ) / 1000; } function openTrading() public onlyOwner { TradingOpen = true; } function setBacking(uint256 _target, uint256 _denominator) external onlyOwner { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee; uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2); uint256 amountToSwap = swapThreshold.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2); uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee); uint256 amountETHteam = amountETH.mul(teamFee).div(totalETHFee); uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee); (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}(""); (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHdev}(""); (tmpSuccess,) = payable(teamFeeReceiver).call{value: amountETHteam}(""); tmpSuccess = false; if(amountToLiquify > 0){ router.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountETHLiquidity, amountToLiquify); } } function setFees(uint256 _liquidityFee, uint256 _teamFee, uint256 _marketingFee, uint256 _devFee, uint256 _burnFee, uint256 _feeDenominator) external onlyOwner { liquidityFee = _liquidityFee; teamFee = _teamFee; marketingFee = _marketingFee; devFee = _devFee; burnFee = _burnFee; totalFee = _liquidityFee.add(_teamFee).add(_marketingFee).add(_devFee).add(_burnFee); feeDenominator = _feeDenominator; require(totalFee < feeDenominator / 5, "Fees can not be more than 20%"); } function updateWallets(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver, address _burnFeeReceiver, address _teamFeeReceiver) external onlyOwner { autoLiquidityReceiver = _autoLiquidityReceiver; marketingFeeReceiver = _marketingFeeReceiver; devFeeReceiver = _devFeeReceiver; burnFeeReceiver = _burnFeeReceiver; teamFeeReceiver = _teamFeeReceiver; } function configSwapback(bool _enabled, uint256 _amount) external onlyOwner { swapEnabled = _enabled; swapThreshold = _amount; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } event AutoLiquify(uint256 amountETH, uint256 amountTokens); }