ETH Price: $2,524.20 (+0.99%)
Gas: 1.1 Gwei

Transaction Decoder

Block:
21167314 at Nov-11-2024 10:05:47 PM +UTC
Transaction Fee:
0.012238555751561237 ETH $30.89
Gas Used:
253,183 Gas / 48.338773739 Gwei

Emitted Events:

278 Forwarder.ForwarderDeposited( from=[Receiver] 0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43, value=49181000000000000, data=0x )
279 0x2b02cdd9a37ecea1d1c5308a4224289642bfa609.0xa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf1( 0xa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf1, 000000000000000000000000a9d1e08c7793af67e9d92fe308d5697fb81d3e43, 00000000000000000000000000000000000000000000000001cb158f69386000 )

Account State Difference:

  Address   Before After State Difference Code
0x0B80c366...82eDcf65d 2.879252216877740357 Eth34.118286216877740357 Eth31.239034
0x1e671e9C...6cC8EA2BE 0.80294507 Eth0.86758252 Eth0.06463745
0x2585ABd1...46753C0f3 0 Eth0.04196333 Eth0.04196333
0x2b02cDd9...642bFa609 0 Eth0.12922072 Eth0.12922072
0x386d31a9...22CCC79CC 0.003788566003572284 Eth0.033530776003572284 Eth0.02974221
0x552D099e...238159122 0.000155143623698359 Eth0.227812333623698359 Eth0.22765719
0x6aDA11c1...24414Ae26 0.03479349819819625 Eth0.44452188819819625 Eth0.40972839
0x6C8Cb9A2...71142B3D2 2.743861525567700052 Eth2.878179905567700052 Eth0.13431838
0x74FA7826...79a3b0D6a 0.005083696564475875 Eth0.014104246564475875 Eth0.00902055
0x7830c87C...31FA86F43
(Coinbase: Deposit)
44.037880527943770688 Eth
Nonce: 1877559
44.025641972192209451 Eth
Nonce: 1877560
0.012238555751561237
0x8144E9f1...A85AF6D6a 0.000897883081824 Eth1.203455123081824 Eth1.20255724
0x8C11a757...3642aa56c 0.000022059900324 Eth0.128868799900324 Eth0.12884674
0x8f32437b...193Da7896 0 Eth0.00885807 Eth0.00885807
(beaverbuild)
7.852910511478290383 Eth7.853163694478290383 Eth0.000253183
0x9Aa935d2...663546bF9 0.000502786015899239 Eth0.188258856015899239 Eth0.18775607
0xA9D1e08C...FB81d3E43
(Coinbase 10)
2,728.010114194298045117 Eth2,692.565296074298045117 Eth35.44481812
0xB8b815A3...bE5B2a04c 1.81156781 Eth1.96189763 Eth0.15032982
0xbB267a5a...69FF60103 0.853449566582886385 Eth2.056636206582886385 Eth1.20318664
0xbe347F5F...2f33d5277 0.000586028318065 Eth0.186349938318065 Eth0.18576391
0xC01E1642...Fb38D19D0 0 Eth0.01498 Eth0.01498
0xCfC0F98f...85e55aB33
(Zero Hash 1)
273.050097709017515794 Eth273.099278709017515794 Eth0.049181
0xDF7d55f1...27a262f06 0.000021433278846 Eth0.014618143278846 Eth0.01459671
0xE846fc94...08c4BF858 0.03198791 Eth0.04542761 Eth0.0134397

Execution Trace

Coinbase 10.1a1da075( )
  • ETH 0.13431838 0x6c8cb9a2fa7ecef232adadd521c30b371142b3d2.CALL( )
  • ETH 0.18775607 0x9aa935d26025af85a09741da58a6922663546bf9.CALL( )
  • ETH 0.01498 0xc01e16421797f2093094f15b2c965edfb38d19d0.CALL( )
  • ETH 0.12884674 0x8c11a757eec27e4eafba0b965297eb63642aa56c.CALL( )
  • ETH 0.0134397 0xe846fc949d3abf1be5b7d86946faac808c4bf858.CALL( )
  • ETH 0.40972839 0x6ada11c13b1a6c71837c1dd9cb4a6b324414ae26.CALL( )
  • ETH 1.20255724 0x8144e9f1d69aa4eca079707254bd39ea85af6d6a.CALL( )
  • ETH 0.04196333 0x2585abd158f602110446ba4f4c2b4d346753c0f3.CALL( )
  • ETH 0.00902055 0x74fa782644c0abfeb48ad674ba99db879a3b0d6a.CALL( )
  • ETH 0.22765719 0x552d099e6f68e810429e17d7a5cc31a238159122.CALL( )
  • ETH 0.049181 Forwarder.CALL( )
    • ETH 0.049181 Forwarder.DELEGATECALL( )
      • ETH 0.049181 Zero Hash 1.CALL( )
      • ETH 0.01459671 0xdf7d55f188ecb2f451a07de4c2a9b4c27a262f06.CALL( )
      • ETH 0.06463745 0x1e671e9cf7e75cbe3f76ecdd3ca09a36cc8ea2be.CALL( )
      • ETH 0.15032982 0xb8b815a33967c53794e72d49a5aab92be5b2a04c.CALL( )
      • ETH 0.12922072 0x2b02cdd9a37ecea1d1c5308a4224289642bfa609.CALL( )
        • ETH 0.12922072 0x39778bc77bd7a9456655b19fd4c5d0bf2071104e.DELEGATECALL( )
        • ETH 31.239034 0x0b80c366d3d92fcd4de0d4a3d596ced82edcf65d.CALL( )
        • ETH 0.02974221 0x386d31a9804570088de22756cbe4d5722ccc79cc.CALL( )
        • ETH 0.18576391 0xbe347f5f7329bdf5942bd1ef8c8415e2f33d5277.CALL( )
        • ETH 1.20318664 0xbb267a5a5a0d4028ebab8ae79817dbe69ff60103.CALL( )
        • ETH 0.00885807 0x8f32437b05adab65a95245df2f17c23193da7896.CALL( )
          File 1 of 2: Forwarder
          // File: @uniswap/lib/contracts/libraries/TransferHelper.sol
          
          
          
          pragma solidity >=0.6.0;
          
          // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
          library TransferHelper {
              function safeApprove(
                  address token,
                  address to,
                  uint256 value
              ) internal {
                  // bytes4(keccak256(bytes('approve(address,uint256)')));
                  (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
                  require(
                      success && (data.length == 0 || abi.decode(data, (bool))),
                      'TransferHelper::safeApprove: approve failed'
                  );
              }
          
              function safeTransfer(
                  address token,
                  address to,
                  uint256 value
              ) internal {
                  // bytes4(keccak256(bytes('transfer(address,uint256)')));
                  (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
                  require(
                      success && (data.length == 0 || abi.decode(data, (bool))),
                      'TransferHelper::safeTransfer: transfer failed'
                  );
              }
          
              function safeTransferFrom(
                  address token,
                  address from,
                  address to,
                  uint256 value
              ) internal {
                  // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
                  (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
                  require(
                      success && (data.length == 0 || abi.decode(data, (bool))),
                      'TransferHelper::transferFrom: transferFrom failed'
                  );
              }
          
              function safeTransferETH(address to, uint256 value) internal {
                  (bool success, ) = to.call{value: value}(new bytes(0));
                  require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
              }
          }
          
          // File: ManualForwarder/ERC20Interface.sol
          
          
          pragma solidity ^0.8.0;
          
          /**
           * Contract that exposes the needed erc20 token functions
           */
          
          abstract contract ERC20Interface {
            // Send _value amount of tokens to address _to
            function transfer(address _to, uint256 _value)
              public
              virtual
              returns (bool success);
          
            // Get the account balance of another account with address _owner
            function balanceOf(address _owner)
              public
              virtual
              view
              returns (uint256 balance);
          }
          
          // File: ManualForwarder/Forwarder.sol
          
          
          
           pragma solidity ^0.8.19;
          
          
          
           contract Forwarder {
              address private parentAddress;
              address private owner;
          
              event ForwarderDeposited(address from, uint256 value, bytes data);
          
              function initialize(address _owner, address initAddress) public onlyUninitialized {
                  require(initAddress != address(0), "Invalid parent address");
                  require(_owner != address(0), "Invalid owner address");
                  owner = _owner;
                  parentAddress = initAddress;
              }
          
              modifier onlyUninitialized {
                  require(parentAddress == address(0x0), "Already initialized");
                  _;
              }
          
              modifier onlyOwner {
                  require(msg.sender == owner, "Only Owner");
                  _;
              }
          
              function getParentAddress() public view onlyOwner returns (address) {
                  return parentAddress;
              }
          
              function getOwner() public view onlyOwner returns (address) {
                  return owner;
              }
          
              fallback() external payable {
                  flush();
              }
          
              receive() external payable {
                  flush();
              }
          
              function setParentAddress(address newAddress) public onlyOwner {
                  require(newAddress != address(0), "Invalid parent address");
                  parentAddress = newAddress;
              }
          
              function flush() private {
                  uint256 value = payable(address(this)).balance;
          
                  if (value == 0) {
                      return;
                  }
          
                  (bool success, ) = parentAddress.call{ value: value }("");
                  require(success, "Flush failed");
                  emit ForwarderDeposited(msg.sender, value, msg.data);
              }
          
              function getERC20Balance(
                  address tokenContractAddress
              ) public view returns (uint256) {
                  ERC20Interface instance = ERC20Interface(tokenContractAddress);
                  address forwarderAddress = address(this);
                  uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
                  if (forwarderBalance == 0) {
                      return 0;
                  }
                  return forwarderBalance;
              }
          
              function flushTokens(address tokenContractAddress) external onlyOwner {
                  ERC20Interface instance = ERC20Interface(tokenContractAddress);
                  address forwarderAddress = address(this);
                  uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
                  if (forwarderBalance == 0) {
                      return;
                  }
          
                  TransferHelper.safeTransfer(
                      tokenContractAddress,
                      parentAddress,
                      forwarderBalance
                  );
              }
          }

          File 2 of 2: Forwarder
          // File: @uniswap/lib/contracts/libraries/TransferHelper.sol
          
          
          
          pragma solidity >=0.6.0;
          
          // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
          library TransferHelper {
              function safeApprove(
                  address token,
                  address to,
                  uint256 value
              ) internal {
                  // bytes4(keccak256(bytes('approve(address,uint256)')));
                  (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
                  require(
                      success && (data.length == 0 || abi.decode(data, (bool))),
                      'TransferHelper::safeApprove: approve failed'
                  );
              }
          
              function safeTransfer(
                  address token,
                  address to,
                  uint256 value
              ) internal {
                  // bytes4(keccak256(bytes('transfer(address,uint256)')));
                  (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
                  require(
                      success && (data.length == 0 || abi.decode(data, (bool))),
                      'TransferHelper::safeTransfer: transfer failed'
                  );
              }
          
              function safeTransferFrom(
                  address token,
                  address from,
                  address to,
                  uint256 value
              ) internal {
                  // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
                  (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
                  require(
                      success && (data.length == 0 || abi.decode(data, (bool))),
                      'TransferHelper::transferFrom: transferFrom failed'
                  );
              }
          
              function safeTransferETH(address to, uint256 value) internal {
                  (bool success, ) = to.call{value: value}(new bytes(0));
                  require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
              }
          }
          
          // File: ManualForwarder/ERC20Interface.sol
          
          
          pragma solidity ^0.8.0;
          
          /**
           * Contract that exposes the needed erc20 token functions
           */
          
          abstract contract ERC20Interface {
            // Send _value amount of tokens to address _to
            function transfer(address _to, uint256 _value)
              public
              virtual
              returns (bool success);
          
            // Get the account balance of another account with address _owner
            function balanceOf(address _owner)
              public
              virtual
              view
              returns (uint256 balance);
          }
          
          // File: ManualForwarder/Forwarder.sol
          
          
          
           pragma solidity ^0.8.19;
          
          
          
           contract Forwarder {
              address private parentAddress;
              address private owner;
          
              event ForwarderDeposited(address from, uint256 value, bytes data);
          
              function initialize(address _owner, address initAddress) public onlyUninitialized {
                  require(initAddress != address(0), "Invalid parent address");
                  require(_owner != address(0), "Invalid owner address");
                  owner = _owner;
                  parentAddress = initAddress;
              }
          
              modifier onlyUninitialized {
                  require(parentAddress == address(0x0), "Already initialized");
                  _;
              }
          
              modifier onlyOwner {
                  require(msg.sender == owner, "Only Owner");
                  _;
              }
          
              function getParentAddress() public view onlyOwner returns (address) {
                  return parentAddress;
              }
          
              function getOwner() public view onlyOwner returns (address) {
                  return owner;
              }
          
              fallback() external payable {
                  flush();
              }
          
              receive() external payable {
                  flush();
              }
          
              function setParentAddress(address newAddress) public onlyOwner {
                  require(newAddress != address(0), "Invalid parent address");
                  parentAddress = newAddress;
              }
          
              function flush() private {
                  uint256 value = payable(address(this)).balance;
          
                  if (value == 0) {
                      return;
                  }
          
                  (bool success, ) = parentAddress.call{ value: value }("");
                  require(success, "Flush failed");
                  emit ForwarderDeposited(msg.sender, value, msg.data);
              }
          
              function getERC20Balance(
                  address tokenContractAddress
              ) public view returns (uint256) {
                  ERC20Interface instance = ERC20Interface(tokenContractAddress);
                  address forwarderAddress = address(this);
                  uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
                  if (forwarderBalance == 0) {
                      return 0;
                  }
                  return forwarderBalance;
              }
          
              function flushTokens(address tokenContractAddress) external onlyOwner {
                  ERC20Interface instance = ERC20Interface(tokenContractAddress);
                  address forwarderAddress = address(this);
                  uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
                  if (forwarderBalance == 0) {
                      return;
                  }
          
                  TransferHelper.safeTransfer(
                      tokenContractAddress,
                      parentAddress,
                      forwarderBalance
                  );
              }
          }