ETH Price: $2,308.68 (+5.74%)

Transaction Decoder

Block:
17536398 at Jun-22-2023 04:39:35 PM +UTC
Transaction Fee:
0.002092736007617307 ETH $4.83
Gas Used:
108,771 Gas / 19.239834217 Gwei

Emitted Events:

26 THOMAS.Transfer( from=[Receiver] 0x7c60bdde696104494dd864a15de2c3bab36189a0, to=[Sender] 0xc07409e1386be829370a4ba48bdb74a07634e69c, value=17072302050732812152358 )
27 0x7c60bdde696104494dd864a15de2c3bab36189a0.0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a( 0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a, 0x000000000000000000000000c07409e1386be829370a4ba48bdb74a07634e69c, 00000000000000000000000000000000000000000000039d7dc90635662a2e26, 00000000000000000000000000000000000000000000039d7dc90635662a2e26 )

Account State Difference:

  Address   Before After State Difference Code
0x678342D2...5EfA8fA17
0x7c60bDde...ab36189A0
0xC07409E1...07634E69C
0.013462641206111223 Eth
Nonce: 63
0.011369905198493916 Eth
Nonce: 64
0.002092736007617307
(Flashbots: Builder)
0.016659478133082177 Eth0.016931405633082177 Eth0.0002719275

Execution Trace

0x7c60bdde696104494dd864a15de2c3bab36189a0.CALL( )
  • 0x895af0e84ae07e5e2ebb29215608c569186bfdbe.DELEGATECALL( )
    • 0x4acee7cdb26de878294aa1ae40be8809d3274b1b.a7037913( )
    • THOMAS.transfer( recipient=0xC07409E1386BE829370A4BA48bDb74a07634E69C, amount=17072302050732812152358 ) => ( True )
      // SPDX-License-Identifier: No
      
      pragma solidity = 0.8.19;
      
      //--- Context ---//
      abstract contract Context {
          constructor() {
          }
      
          function _msgSender() internal view returns (address payable) {
              return payable(msg.sender);
          }
      
          function _msgData() internal view returns (bytes memory) {
              this;
              return msg.data;
          }
      }
      
      //--- Ownable ---//
      abstract contract Ownable is Context {
          address private _owner;
      
          event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
      
          constructor() {
              _setOwner(_msgSender());
          }
      
          function owner() public view virtual returns (address) {
              return _owner;
          }
      
          modifier onlyOwner() {
              require(owner() == _msgSender(), "Ownable: caller is not the owner");
              _;
          }
      
          function renounceOwnership() public virtual onlyOwner {
              _setOwner(address(0));
          }
      
          function transferOwnership(address newOwner) public virtual onlyOwner {
              require(newOwner != address(0), "Ownable: new owner is the zero address");
              _setOwner(newOwner);
          }
      
          function _setOwner(address newOwner) private {
              address oldOwner = _owner;
              _owner = newOwner;
              emit OwnershipTransferred(oldOwner, newOwner);
          }
      }
      
      interface IFactoryV2 {
          event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
          function getPair(address tokenA, address tokenB) external view returns (address lpPair);
          function createPair(address tokenA, address tokenB) external returns (address lpPair);
      }
      
      interface IV2Pair {
          function factory() external view returns (address);
          function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
          function sync() external;
      }
      
      interface IRouter01 {
          function factory() external pure returns (address);
          function WETH() external pure returns (address);
          function addLiquidityETH(
              address token,
              uint amountTokenDesired,
              uint amountTokenMin,
              uint amountETHMin,
              address to,
              uint deadline
          ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
          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 swapExactETHForTokens(
              uint amountOutMin, 
              address[] calldata path, 
              address to, uint deadline
          ) external payable returns (uint[] memory amounts);
          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 IRouter02 is IRouter01 {
          function swapExactTokensForETHSupportingFeeOnTransferTokens(
              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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
              uint amountIn,
              uint amountOutMin,
              address[] calldata path,
              address to,
              uint deadline
          ) external;
          function swapExactTokensForTokens(
              uint amountIn,
              uint amountOutMin,
              address[] calldata path,
              address to,
              uint deadline
          ) external returns (uint[] memory amounts);
      }
      
      
      
      //--- Interface for ERC20 ---//
      interface IERC20 {
          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);
      }
      
      //--- Contract v2 ---//
      contract THOMAS is Context, Ownable, IERC20 {
      
          function totalSupply() external view override returns (uint256) { if (_totalSupply == 0) { revert(); } return _totalSupply - balanceOf(address(DEAD)); }
          function decimals() external pure override returns (uint8) { if (_totalSupply == 0) { revert(); } 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 allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
          function balanceOf(address account) public view override returns (uint256) {
              return balance[account];
          }
      
      
          mapping (address => mapping (address => uint256)) private _allowances;
          mapping (address => bool) private _noFee;
          mapping (address => bool) private liquidityAdd;
          mapping (address => bool) private isLpPair;
          mapping (address => bool) private isPresaleAddress;
          mapping (address => uint256) private balance;
          mapping (address => bool) private excludedFromCooldown;
          mapping (address => bool) private cannotExcludeFromCooldown;
          mapping (address => uint256) private lastTrade;
      
      
          uint256 constant public _totalSupply = 420_000_000_000_000 * 10**9;
          uint256 constant public swapThreshold = _totalSupply / 7_000;
          uint256 constant public buyfee = 0;
          uint256 constant public sellfee = 0;
          uint256 constant public transferfee = 0;
          uint256 constant public fee_denominator = 1_000;
          bool private canSwapFees = true;
          address payable private marketingAddress = payable(0x70cFca536267BDFAA44985F4ed82E9739129bc61);
      
      
          IRouter02 public swapRouter;
          string constant private _name = "THOMAS";
          string constant private _symbol = "$THOMAS";
          uint8 constant private _decimals = 9;
          address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
          address public lpPair;
          bool public isTradingEnabled = false;
          bool private inSwap;
      
              modifier inSwapFlag {
              inSwap = true;
              _;
              inSwap = false;
          }
      
      
          event _enableTrading();
          event _setPresaleAddress(address account, bool enabled);
          event _toggleCanSwapFees(bool enabled);
          event _changePair(address newLpPair);
          event _changeWallets(address marketing);
      
      
          constructor () {
              _noFee[msg.sender] = true;
      
              if (block.chainid == 56) {
                  swapRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
              } else if (block.chainid == 97) {
                  swapRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
              } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
                  swapRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
              } else if (block.chainid == 43114) {
                  swapRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
              } else if (block.chainid == 250) {
                  swapRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
              } else {
                  revert("Chain not valid");
              }
              liquidityAdd[msg.sender] = true;
              balance[msg.sender] = _totalSupply;
              emit Transfer(address(0), msg.sender, _totalSupply);
      
              lpPair = IFactoryV2(swapRouter.factory()).createPair(swapRouter.WETH(), address(this));
              isLpPair[lpPair] = true;
              _approve(msg.sender, address(swapRouter), type(uint256).max);
              _approve(address(this), address(swapRouter), type(uint256).max);
          }
          
          receive() external payable {}
      
              function transfer(address recipient, uint256 amount) public override returns (bool) {
              _transfer(msg.sender, recipient, amount);
              return true;
          }
      
              function approve(address spender, uint256 amount) external override returns (bool) {
              _approve(msg.sender, spender, amount);
              return true;
          }
      
              function _approve(address sender, address spender, uint256 amount) internal {
              require(sender != address(0), "ERC20: Zero Address");
              require(spender != address(0), "ERC20: Zero Address");
      
              _allowances[sender][spender] = 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] -= amount;
              }
      
              return _transfer(sender, recipient, amount);
          }
          function isNoFeeWallet(address account) external view returns(bool) {
              return _noFee[account];
          }
      
          function setNoFeeWallet(address account, bool enabled) public onlyOwner {
              _noFee[account] = enabled;
          }
      
          function isLimitedAddress(address ins, address out) internal view returns (bool) {
      
              bool isLimited = ins != owner()
                  && out != owner() && msg.sender != owner()
                  && !liquidityAdd[ins]  && !liquidityAdd[out] && out != DEAD && out != address(0) && out != address(this);
                  return isLimited;
          }
      
          function is_buy(address ins, address out) internal view returns (bool) {
              bool _is_buy = !isLpPair[out] && isLpPair[ins];
              return _is_buy;
          }
      
          function is_sell(address ins, address out) internal view returns (bool) { 
              bool _is_sell = isLpPair[out] && !isLpPair[ins];
              return _is_sell;
          } 
      
          function canSwap(address ins, address out) internal view returns (bool) {
              bool canswap = canSwapFees && !isPresaleAddress[ins] && !isPresaleAddress[out];
      
              return canswap;
          }
      
          function changeLpPair(address newPair) external onlyOwner {
              isLpPair[newPair] = true;
              emit _changePair(newPair);
          }
      
          function toggleCanSwapFees(bool yesno) external onlyOwner {
              require(canSwapFees != yesno,"Bool is the same");
              canSwapFees = yesno;
              emit _toggleCanSwapFees(yesno);
          }
      
          function _transfer(address from, address to, uint256 amount) internal returns  (bool) {
              bool takeFee = true;
              require(to != address(0), "ERC20: transfer to the zero address");
              require(from != address(0), "ERC20: transfer from the zero address");
              require(amount > 0, "Transfer amount must be greater than zero");
      
              if (isLimitedAddress(from,to)) {
                  require(isTradingEnabled,"Trading is not enabled");
              }
      
      
              if(is_sell(from, to) &&  !inSwap && canSwap(from, to)) {
                  uint256 contractTokenBalance = balanceOf(address(this));
                  if(contractTokenBalance >= swapThreshold) { internalSwap(contractTokenBalance); }
              }
      
              if (_noFee[from] || _noFee[to]){
                  takeFee = false;
              }
      
              balance[from] -= amount; uint256 amountAfterFee = (takeFee) ? takeTaxes(from, is_buy(from, to), is_sell(from, to), amount) : amount;
              balance[to] += amountAfterFee; emit Transfer(from, to, amountAfterFee);
      
              return true;
      
          }
      
          function changeWallets(address marketing) external onlyOwner {
              marketingAddress = payable(marketing);
              emit _changeWallets(marketing);
          }
      
      
          function takeTaxes(address from, bool isbuy, bool issell, uint256 amount) internal returns (uint256) {
              uint256 fee;
              if (isbuy)  fee = buyfee;  else if (issell)  fee = sellfee;  else  fee = transferfee; 
              if (fee == 0)  return amount;
              uint256 feeAmount = amount * fee / fee_denominator;
              if (feeAmount > 0) {
      
                  balance[address(this)] += feeAmount;
                  emit Transfer(from, address(this), feeAmount);
                  
              }
              return amount - feeAmount;
          }
      
          function internalSwap(uint256 contractTokenBalance) internal inSwapFlag {
              
              address[] memory path = new address[](2);
              path[0] = address(this);
              path[1] = swapRouter.WETH();
      
              if (_allowances[address(this)][address(swapRouter)] != type(uint256).max) {
                  _allowances[address(this)][address(swapRouter)] = type(uint256).max;
              }
      
              try swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                  contractTokenBalance,
                  0,
                  path,
                  address(this),
                  block.timestamp
              ) {} catch {
                  return;
              }
              bool success;
      
              if(address(this).balance > 0) {(success,) = marketingAddress.call{value: address(this).balance, gas: 35000}("");}
      
          }
      
              function setPresaleAddress(address presale, bool yesno) external onlyOwner {
                  require(isPresaleAddress[presale] != yesno,"Same bool");
                  isPresaleAddress[presale] = yesno;
                  _noFee[presale] = yesno;
                  liquidityAdd[presale] = yesno;
                  emit _setPresaleAddress(presale, yesno);
              }
      
              function enableTrading() external onlyOwner {
                  require(!isTradingEnabled, "Trading already enabled");
                  isTradingEnabled = true;
                  emit _enableTrading();
              }
          
      }