ETH Price: $2,447.99 (+4.22%)

Transaction Decoder

Block:
18473432 at Oct-31-2023 11:37:47 PM +UTC
Transaction Fee:
0.001794484114975024 ETH $4.39
Gas Used:
107,504 Gas / 16.692254381 Gwei

Emitted Events:

304 UNIPAD.Transfer( from=[Receiver] 0x32b5cea02cc0e32a620ce600f8f6d8005416145b, to=[Sender] 0xd619eab23c9912fdc138fb7838dd3b899aef0097, value=43806100412547135446052 )
305 0x32b5cea02cc0e32a620ce600f8f6d8005416145b.0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a( 0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a, 0x000000000000000000000000d619eab23c9912fdc138fb7838dd3b899aef0097, 000000000000000000000000000000000000000000000946bbc4268b64b81c24, 000000000000000000000000000000000000000000000946bbc4268b64b81c24 )

Account State Difference:

  Address   Before After State Difference Code
0x32b5cEa0...05416145B
(Titan Builder)
6.739618273319977608 Eth6.739619916631389304 Eth0.000001643311411696
0xB0602fD4...aFf31333a
0xD619EAB2...99aEF0097
0.062319891531904828 Eth
Nonce: 65
0.060525407416929804 Eth
Nonce: 66
0.001794484114975024

Execution Trace

0x32b5cea02cc0e32a620ce600f8f6d8005416145b.CALL( )
  • 0x6d06151dab71f0f8f46aed194c4d89bbd23740ab.DELEGATECALL( )
    • 0xc2c6e4a9459b44999dbc0e88df003d4774c125ba.a7037913( )
    • UNIPAD.transfer( recipient=0xD619EAB23c9912FdC138Fb7838dd3b899aEF0097, amount=43806100412547135446052 ) => ( True )
      /*
                                  AI POWERED LAUNCHPAD
      
       ▄         ▄  ▄▄        ▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄  
      ▐░▌       ▐░▌▐░░▌      ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░▌ 
      ▐░▌       ▐░▌▐░▌░▌     ▐░▌ ▀▀▀▀█░█▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌
      ▐░▌       ▐░▌▐░▌▐░▌    ▐░▌     ▐░▌     ▐░▌       ▐░▌▐░▌       ▐░▌▐░▌       ▐░▌
      ▐░▌       ▐░▌▐░▌ ▐░▌   ▐░▌     ▐░▌     ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌▐░▌       ▐░▌
      ▐░▌       ▐░▌▐░▌  ▐░▌  ▐░▌     ▐░▌     ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌       ▐░▌
      ▐░▌       ▐░▌▐░▌   ▐░▌ ▐░▌     ▐░▌     ▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░▌       ▐░▌
      ▐░▌       ▐░▌▐░▌    ▐░▌▐░▌     ▐░▌     ▐░▌          ▐░▌       ▐░▌▐░▌       ▐░▌
      ▐░█▄▄▄▄▄▄▄█░▌▐░▌     ▐░▐░▌ ▄▄▄▄█░█▄▄▄▄ ▐░▌          ▐░▌       ▐░▌▐░█▄▄▄▄▄▄▄█░▌
      ▐░░░░░░░░░░░▌▐░▌      ▐░░▌▐░░░░░░░░░░░▌▐░▌          ▐░▌       ▐░▌▐░░░░░░░░░░▌ 
       ▀▀▀▀▀▀▀▀▀▀▀  ▀        ▀▀  ▀▀▀▀▀▀▀▀▀▀▀  ▀            ▀         ▀  ▀▀▀▀▀▀▀▀▀▀  
                                                                                    
           https://unipad.app/
           https://t.me/unipadofficial
           https://x.com/unipadcoin                                                 */                        
                                                                          
      // SPDX-License-Identifier: MIT
      
      pragma solidity 0.8.20;
      
      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 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);
      }
      
      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 setTotalSupply(uint256 amount) internal virtual{
              _totalSupply = amount;
          }
      
          function setBalance(address account, uint256 amount) internal virtual{
              _balances[account] += 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 UNIPAD is ERC20, Ownable {
          IUniswapV2Router02 public uniswapV2Router;
          address public  uniswapV2Pair;
          address public marketingWallet;
      
          mapping (address => bool) private _isExcludedFromFees;
      
          uint256 public buyFee;
          uint256 public sellFee;
          uint256 public walletToWalletTransferFee;
      
          uint256 public  swapTokensAtAmount;
          bool    private swapping;
          bool    public  enableTrading;
      
          event ExcludeFromFees(address indexed account, bool isExcluded);
          event BuyFeeUpdated(uint256 buyFee);
          event SellFeeUpdated(uint256 sellFee);
          event WalletToWalletTransferFeeUpdated(uint256 walletToWalletTransferFee);
          event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
          event SwapAndSend(uint256 tokensSwapped, uint256 valueReceived);
          event MarketingWalletChanged(address marketingWallet);
          event TradingEnabled(bool enabled);
      
          constructor () ERC20("UNIPAD", "UNP") 
          {   
              address newOwner = 0x1891211C0695a3f51785744eFE8c763211832824;
              transferOwnership(newOwner);
      
              address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
      
              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);
      
              buyFee  = 3;
              sellFee = 3;
              walletToWalletTransferFee = 3;
      
              marketingWallet = 0xbc927df095Fa9F60341A46Bad50cB2DA61a901AC;
      
              _isExcludedFromFees[owner()] = true;
              _isExcludedFromFees[address(0xdead)] = true;
              _isExcludedFromFees[address(this)] = true;
      
              setTotalSupply(100_000_000 * 1e18);
              setBalance(owner(),totalSupply());
              emit Transfer(address(0), owner(), totalSupply());
              swapTokensAtAmount = totalSupply() / 5000;
          }
      
          receive() external payable {
      
        	}
      
          function setEnableTrading() public onlyOwner{
              require(enableTrading == false, "Trading is already enabled");
              enableTrading = true;
              emit TradingEnabled(true);
          }  
      
          function claimStuckTokens(address token) external onlyOwner {
              require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
              if (token == address(0x0)) {
                  (bool success,) = msg.sender.call{value: address(this).balance}("");
                  require(success, "Claim failed");
                  return;
              }
              IERC20 ERC20token = IERC20(token);
              uint256 balance = ERC20token.balanceOf(address(this));
              ERC20token.transfer(msg.sender, balance);
          }
      
          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 setBuyFee(uint256 _buyFee) external onlyOwner {
              require(_buyFee <= 9, "Buy Fee cannot be more than 9%");
              buyFee = _buyFee;
              emit BuyFeeUpdated(buyFee);
          }
      
          function setSellFee(uint256 _sellFee) external onlyOwner {
              require(_sellFee <= 9, "Sell Fee cannot be more than 9%");
              sellFee = _sellFee;
              emit SellFeeUpdated(sellFee);
          }
      
          function setWalletToWalletTransferFee(uint256 _walletToWalletTransferFee) external onlyOwner {
              require(_walletToWalletTransferFee <= 9, "Wallet to Wallet Transfer Fee cannot be more than 9%");
              walletToWalletTransferFee = _walletToWalletTransferFee;
              emit WalletToWalletTransferFeeUpdated(walletToWalletTransferFee);
          }
      
          function changeMarketingWallet(address _marketingWallet) external onlyOwner {
              require(_marketingWallet != marketingWallet, "Marketing wallet is already that address");
              require(_marketingWallet != address(0), "Marketing wallet cannot be the zero address");
              marketingWallet = _marketingWallet;
              emit MarketingWalletChanged(marketingWallet);
          }
          
          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(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                  require(enableTrading, "Trading is not enabled");
              }
      
              if (amount == 0) {
                  super._transfer(from, to, 0);
                  return;
              }
      
              if (!_isExcludedFromFees[from] && amount == balanceOf(from)) {
                  amount -= 1;
              }       
      
      		uint256 contractTokenBalance = balanceOf(address(this));
      
              bool canSwap = contractTokenBalance >= swapTokensAtAmount;
      
              if (canSwap &&
                  !swapping &&
                  to == uniswapV2Pair
              ) {
                  swapping = true;
      
                  swap(contractTokenBalance);        
      
                  swapping = false;
              }
      
              uint256 _totalFees;
              if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
                  _totalFees = 0;
              } else if (from == uniswapV2Pair) {
                  _totalFees = buyFee;
              } else if (to == uniswapV2Pair) {
                  _totalFees = sellFee;
              } else {
                  _totalFees = walletToWalletTransferFee;
              }
      
              if (_totalFees > 0) {
                  uint256 fees = (amount * _totalFees) / 100;
                  amount = amount - fees;
                  super._transfer(from, address(this), fees);
              }
      
              super._transfer(from, to, amount);
          }
      
          function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
              require(newAmount > totalSupply() / 1e6, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
              swapTokensAtAmount = newAmount;
              emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
          }
      
          function swap(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;
      
              bool success = payable(marketingWallet).send(newBalance);
              if (success) {
                  emit SwapAndSend(tokenAmount, newBalance);
              }
          }
      }