Transaction Hash:
Block:
21043659 at Oct-25-2024 03:55:11 PM +UTC
Transaction Fee:
0.00113237461679716 ETH
$2.78
Gas Used:
57,926 Gas / 19.54864166 Gwei
Emitted Events:
580 |
SpectreAI.Transfer( from=[Sender] 0x8d333aeb650baa7b35a96d3b3fe6851ec490c917, to=0x3e712a0B96B1bDB85479F197f3D60F8291fFDEeb, value=165954712048880128069 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x8d333AEB...EC490c917 |
0.010972133279922763 Eth
Nonce: 5
|
0.009839758663125603 Eth
Nonce: 6
| 0.00113237461679716 | ||
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 10.59068131746680782 Eth | 10.590842019723027534 Eth | 0.000160702256219714 | |
0x9Cf0ED01...1aA14dAd6 |
Execution Trace
SpectreAI.transfer( recipient=0x3e712a0B96B1bDB85479F197f3D60F8291fFDEeb, amount=165954712048880128069 ) => ( True )
transfer[SpectreAI (ln:144)]
_transfer[SpectreAI (ln:149)]
Transfer[SpectreAI (ln:244)]
swapExactTokensForETHSupportingFeeOnTransferTokens[SpectreAI (ln:259)]
Transfer[SpectreAI (ln:281)]
Transfer[SpectreAI (ln:282)]
Transfer[SpectreAI (ln:287)]
_msgSender[SpectreAI (ln:149)]
// SPDX-License-Identifier: MIT pragma solidity 0.8.18; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } 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 ); } contract Ownable is Context { address private _owner; address private _previousOwner; 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 transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); } contract SpectreAI is Context, IERC20, Ownable { uint256 private constant _totalSupply = 10_000_000e18; uint256 private constant onePercent = 100_000e18; uint256 private constant minSwap = 2000e18; uint256 private constant maxWalletAmount = 300_000e18; uint256 private constant _delayBetweenTx = 120; mapping(address => uint256) private _previousTx; uint8 private constant _decimals = 18; IUniswapV2Router02 immutable uniswapV2Router; address immutable uniswapV2Pair; address immutable WETH; address payable immutable marketingWallet; uint256 public buyTax; uint256 public sellTax; uint8 private launch; uint8 private inSwapAndLiquify; uint256 private launchBlock; uint256 public maxTxAmount = 30_000e18; string private constant _name = "SPECTRE AI"; string private constant _symbol = "SPECTRE"; bool public limitsInEffect; mapping(address => uint256) private _balance; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFeeWallet; constructor() { uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); WETH = uniswapV2Router.WETH(); buyTax = 5; sellTax = 5; uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), WETH ); marketingWallet = payable(0x01c972546e1a24AB0f9614D9aDD4f935c227263F); _balance[msg.sender] = _totalSupply; _isExcludedFromFeeWallet[marketingWallet] = true; _isExcludedFromFeeWallet[msg.sender] = true; _isExcludedFromFeeWallet[address(this)] = true; _allowances[address(this)][address(uniswapV2Router)] = type(uint256).max; _allowances[msg.sender][address(uniswapV2Router)] = type(uint256).max; _allowances[marketingWallet][address(uniswapV2Router)] = type(uint256).max; emit Transfer(address(0), _msgSender(), _totalSupply); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balance[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()] - amount ); return true; } function _approve( address owner, address spender, uint256 amount ) private { 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 addExcludedWallet(address wallet) external onlyOwner { _isExcludedFromFeeWallet[wallet] = true; } function openTrading() external onlyOwner { launch = 1; limitsInEffect = true; launchBlock = block.number; } function setLimit(uint256 amountLimit) external onlyOwner { maxTxAmount = amountLimit; } // do it after token is stable function removeAllLimits() external onlyOwner { limitsInEffect = false; maxTxAmount = _totalSupply; } function changeTax(uint256 newBuyTax, uint256 newSellTax) external onlyOwner { buyTax = newBuyTax; sellTax = newSellTax; } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Min transfer amount"); uint256 _tax; if (_isExcludedFromFeeWallet[from] || _isExcludedFromFeeWallet[to]) { _tax = 0; } else { require( launch != 0 && amount <= maxTxAmount, "Launch, max tx amount at exceeded" ); if(limitsInEffect) { // only when buy if (from == uniswapV2Pair) { require(_previousTx[to] + _delayBetweenTx <= block.timestamp, "Protection: 120 sec/tx allowed"); _previousTx[to] = block.timestamp; require(amount + _balance[to] <= maxWalletAmount, "ERC20: maxWalletAmount is exceeded!"); } // sell, tr else { require(_previousTx[from] + _delayBetweenTx <= block.timestamp, "Protection: 120 sec/tx allowed"); _previousTx[from] = block.timestamp; } } if (inSwapAndLiquify == 1) { //No tax transfer _balance[from] -= amount; _balance[to] += amount; emit Transfer(from, to, amount); return; } if (from == uniswapV2Pair) { _tax = buyTax; } else if (to == uniswapV2Pair) { uint256 tokensToSwap = _balance[address(this)]; if (tokensToSwap > minSwap && inSwapAndLiquify == 0) { if (tokensToSwap > onePercent) { tokensToSwap = onePercent; } inSwapAndLiquify = 1; address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uniswapV2Router .swapExactTokensForETHSupportingFeeOnTransferTokens( tokensToSwap, 0, path, marketingWallet, block.timestamp ); inSwapAndLiquify = 0; } _tax = sellTax; } else { _tax = 0; } } if (_tax != 0) { //Tax uint256 taxTokens = (amount * _tax) / 100; uint256 transferAmount = amount - taxTokens; _balance[from] -= amount; _balance[to] += transferAmount; _balance[address(this)] += taxTokens; emit Transfer(from, address(this), taxTokens); emit Transfer(from, to, transferAmount); } else { //No tax _balance[from] -= amount; _balance[to] += amount; emit Transfer(from, to, amount); } } receive() external payable {} }