ETH Price: $2,143.56 (+4.31%)

Contract

0xe0Eea1Caa8043bB9D6E2A23AA62e2FfA50b1552a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer151452812022-07-15 5:04:061329 days ago1657861446IN
0xe0Eea1Ca...A50b1552a
0.03921014 ETH0.000488712.39135947
Transfer143510462022-03-09 6:34:221457 days ago1646807662IN
0xe0Eea1Ca...A50b1552a
0.03849658 ETH0.0011199428.396801
Transfer143284992022-03-05 18:31:031460 days ago1646505063IN
0xe0Eea1Ca...A50b1552a
0.19890585 ETH0.001252831.76571565
Transfer142482262022-02-21 8:05:531473 days ago1645430753IN
0xe0Eea1Ca...A50b1552a
0.19808805 ETH0.0031179979.05876787
Transfer141750052022-02-10 0:04:171484 days ago1644451457IN
0xe0Eea1Ca...A50b1552a
0.19709866 ETH0.00635647161.17220915
Transfer141109722022-01-31 2:30:281494 days ago1643596228IN
0xe0Eea1Ca...A50b1552a
0.20774001 ETH0.0031076478.79620362
Transfer140356432022-01-19 11:12:311506 days ago1642590751IN
0xe0Eea1Ca...A50b1552a
0.31035407 ETH0.0033293684.41815251
Transfer139179972022-01-01 6:53:411524 days ago1641020021IN
0xe0Eea1Ca...A50b1552a
0.19717518 ETH0.0024368461.78766185
Transfer138385282021-12-19 23:25:251536 days ago1639956325IN
0xe0Eea1Ca...A50b1552a
0.19739122 ETH0.0029516974.8421197
Transfer137622132021-12-08 2:34:371548 days ago1638930877IN
0xe0Eea1Ca...A50b1552a
0.1980427 ETH0.0026047266.04446914
Transfer136904832021-11-26 15:09:241559 days ago1637939364IN
0xe0Eea1Ca...A50b1552a
0.20003017 ETH0.0032256981.78953575
Transfer136199062021-11-15 10:50:451571 days ago1636973445IN
0xe0Eea1Ca...A50b1552a
0.20284177 ETH0.0038434997.45408309
Transfer135484962021-11-04 5:53:511582 days ago1636005231IN
0xe0Eea1Ca...A50b1552a
0.21996301 ETH0.0034646187.84750879
Transfer134810602021-10-24 15:45:461592 days ago1635090346IN
0xe0Eea1Ca...A50b1552a
0.19751162 ETH0.002842672.07596675
Transfer134224672021-10-15 11:50:321601 days ago1634298632IN
0xe0Eea1Ca...A50b1552a
0.19849341 ETH0.00343687.12199253
Transfer133646672021-10-06 9:45:301611 days ago1633513530IN
0xe0Eea1Ca...A50b1552a
0.10080424 ETH0.0033889885.92967699
Transfer133259802021-09-30 8:18:251617 days ago1632989905IN
0xe0Eea1Ca...A50b1552a
0.10904983 ETH0.0033315484.47326362
Transfer132872262021-09-24 7:46:201623 days ago1632469580IN
0xe0Eea1Ca...A50b1552a
0.10844549 ETH0.0023036658.41081113
Transfer132548242021-09-19 7:33:421628 days ago1632036822IN
0xe0Eea1Ca...A50b1552a
0.11243703 ETH0.0013324733.78562683
Transfer132162902021-09-13 8:33:131634 days ago1631521993IN
0xe0Eea1Ca...A50b1552a
0.10090313 ETH0.0023898660.59641061
Transfer131782432021-09-07 10:59:281640 days ago1631012368IN
0xe0Eea1Ca...A50b1552a
0.10928809 ETH0.0030192876.55569678
Transfer131458792021-09-02 11:04:391645 days ago1630580679IN
0xe0Eea1Ca...A50b1552a
0.11541256 ETH0.0025920765.72376026
Transfer131126172021-08-28 7:46:381650 days ago1630136798IN
0xe0Eea1Ca...A50b1552a
0.11195639 ETH0.0022185556.252947
Transfer130810162021-08-23 10:28:571655 days ago1629714537IN
0xe0Eea1Ca...A50b1552a
0.10569455 ETH0.0012931932.78975843
Transfer130522882021-08-18 23:58:101659 days ago1629331090IN
0xe0Eea1Ca...A50b1552a
0.02116008 ETH0.0011152828.27867701
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer151452812022-07-15 5:04:061329 days ago1657861446
0xe0Eea1Ca...A50b1552a
0.03921014 ETH
-143510462022-03-09 6:34:221457 days ago1646807662
0xe0Eea1Ca...A50b1552a
0.03849658 ETH
-143284992022-03-05 18:31:031460 days ago1646505063
0xe0Eea1Ca...A50b1552a
0.19890585 ETH
-142482262022-02-21 8:05:531473 days ago1645430753
0xe0Eea1Ca...A50b1552a
0.19808805 ETH
-141750052022-02-10 0:04:171484 days ago1644451457
0xe0Eea1Ca...A50b1552a
0.19709866 ETH
-141109722022-01-31 2:30:281494 days ago1643596228
0xe0Eea1Ca...A50b1552a
0.20774001 ETH
-140356432022-01-19 11:12:311506 days ago1642590751
0xe0Eea1Ca...A50b1552a
0.31035407 ETH
-139179972022-01-01 6:53:411524 days ago1641020021
0xe0Eea1Ca...A50b1552a
0.19717518 ETH
-138385282021-12-19 23:25:251536 days ago1639956325
0xe0Eea1Ca...A50b1552a
0.19739122 ETH
-137622132021-12-08 2:34:371548 days ago1638930877
0xe0Eea1Ca...A50b1552a
0.1980427 ETH
-136904832021-11-26 15:09:241559 days ago1637939364
0xe0Eea1Ca...A50b1552a
0.20003017 ETH
-136199062021-11-15 10:50:451571 days ago1636973445
0xe0Eea1Ca...A50b1552a
0.20284177 ETH
-135484962021-11-04 5:53:511582 days ago1636005231
0xe0Eea1Ca...A50b1552a
0.21996301 ETH
-134810602021-10-24 15:45:461592 days ago1635090346
0xe0Eea1Ca...A50b1552a
0.19751162 ETH
-134224672021-10-15 11:50:321601 days ago1634298632
0xe0Eea1Ca...A50b1552a
0.19849341 ETH
-133646672021-10-06 9:45:301611 days ago1633513530
0xe0Eea1Ca...A50b1552a
0.10080424 ETH
-133259802021-09-30 8:18:251617 days ago1632989905
0xe0Eea1Ca...A50b1552a
0.10904983 ETH
-132872262021-09-24 7:46:201623 days ago1632469580
0xe0Eea1Ca...A50b1552a
0.10844549 ETH
-132548242021-09-19 7:33:421628 days ago1632036822
0xe0Eea1Ca...A50b1552a
0.11243703 ETH
-132162902021-09-13 8:33:131634 days ago1631521993
0xe0Eea1Ca...A50b1552a
0.10090313 ETH
-131782432021-09-07 10:59:281640 days ago1631012368
0xe0Eea1Ca...A50b1552a
0.10928809 ETH
-131458792021-09-02 11:04:391645 days ago1630580679
0xe0Eea1Ca...A50b1552a
0.11541256 ETH
-131126172021-08-28 7:46:381650 days ago1630136798
0xe0Eea1Ca...A50b1552a
0.11195639 ETH
-130810162021-08-23 10:28:571655 days ago1629714537
0xe0Eea1Ca...A50b1552a
0.10569455 ETH
-130522882021-08-18 23:58:101659 days ago1629331090
0xe0Eea1Ca...A50b1552a
0.02116008 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Minimal Proxy Contract for 0x059ffafdc6ef594230de44f824e2bd0a51ca5ded

Contract Name:
Forwarder

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-24
*/

pragma solidity 0.7.5;

/*
    The MIT License (MIT)
    Copyright (c) 2018 Murray Software, LLC.
    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:
    The above copyright notice and this permission notice shall be included
    in all copies or substantial portions of the Software.
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
//solhint-disable max-line-length
//solhint-disable no-inline-assembly

contract CloneFactory {
  function createClone(address target, bytes32 salt)
    internal
    returns (address payable result)
  {
    bytes20 targetBytes = bytes20(target);
    assembly {
      // load the next free memory slot as a place to store the clone contract data
      let clone := mload(0x40)

      // The bytecode block below is responsible for contract initialization
      // during deployment, it is worth noting the proxied contract constructor will not be called during
      // the cloning procedure and that is why an initialization function needs to be called after the
      // clone is created
      mstore(
        clone,
        0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000
      )

      // This stores the address location of the implementation contract
      // so that the proxy knows where to delegate call logic to
      mstore(add(clone, 0x14), targetBytes)

      // The bytecode block is the actual code that is deployed for each clone created.
      // It forwards all calls to the already deployed implementation via a delegatecall
      mstore(
        add(clone, 0x28),
        0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000
      )

      // deploy the contract using the CREATE2 opcode
      // this deploys the minimal proxy defined above, which will proxy all
      // calls to use the logic defined in the implementation contract `target`
      result := create2(0, clone, 0x37, salt)
    }
  }

  function isClone(address target, address query)
    internal
    view
    returns (bool result)
  {
    bytes20 targetBytes = bytes20(target);
    assembly {
      // load the next free memory slot as a place to store the comparison clone
      let clone := mload(0x40)

      // The next three lines store the expected bytecode for a miniml proxy
      // that targets `target` as its implementation contract
      mstore(
        clone,
        0x363d3d373d3d3d363d7300000000000000000000000000000000000000000000
      )
      mstore(add(clone, 0xa), targetBytes)
      mstore(
        add(clone, 0x1e),
        0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000
      )

      // the next two lines store the bytecode of the contract that we are checking in memory
      let other := add(clone, 0x40)
      extcodecopy(query, other, 0, 0x2d)

      // Check if the expected bytecode equals the actual bytecode and return the result
      result := and(
        eq(mload(clone), mload(other)),
        eq(mload(add(clone, 0xd)), mload(add(other, 0xd)))
      )
    }
  }
}


/**
 * 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);
}

// 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');
    }
}


/**
 * Contract that will forward any incoming Ether to the creator of the contract
 *
 */
contract Forwarder {
  // Address to which any funds sent to this contract will be forwarded
  address public parentAddress;
  event ForwarderDeposited(address from, uint256 value, bytes data);

  /**
   * Initialize the contract, and sets the destination address to that of the creator
   */
  function init(address _parentAddress) external onlyUninitialized {
    parentAddress = _parentAddress;
    uint256 value = address(this).balance;

    if (value == 0) {
      return;
    }

    (bool success, ) = parentAddress.call{ value: value }('');
    require(success, 'Flush failed');
    // NOTE: since we are forwarding on initialization,
    // we don't have the context of the original sender.
    // We still emit an event about the forwarding but set
    // the sender to the forwarder itself
    emit ForwarderDeposited(address(this), value, msg.data);
  }

  /**
   * Modifier that will execute internal code block only if the sender is the parent address
   */
  modifier onlyParent {
    require(msg.sender == parentAddress, 'Only Parent');
    _;
  }

  /**
   * Modifier that will execute internal code block only if the contract has not been initialized yet
   */
  modifier onlyUninitialized {
    require(parentAddress == address(0x0), 'Already initialized');
    _;
  }

  /**
   * Default function; Gets called when data is sent but does not match any other function
   */
  fallback() external payable {
    flush();
  }

  /**
   * Default function; Gets called when Ether is deposited with no data, and forwards it to the parent address
   */
  receive() external payable {
    flush();
  }

  /**
   * Execute a token transfer of the full balance from the forwarder token to the parent address
   * @param tokenContractAddress the address of the erc20 token contract
   */
  function flushTokens(address tokenContractAddress) external onlyParent {
    ERC20Interface instance = ERC20Interface(tokenContractAddress);
    address forwarderAddress = address(this);
    uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
    if (forwarderBalance == 0) {
      return;
    }

    TransferHelper.safeTransfer(
      tokenContractAddress,
      parentAddress,
      forwarderBalance
    );
  }

  /**
   * Flush the entire balance of the contract to the parent address.
   */
  function flush() public {
    uint256 value = address(this).balance;

    if (value == 0) {
      return;
    }

    (bool success, ) = parentAddress.call{ value: value }('');
    require(success, 'Flush failed');
    emit ForwarderDeposited(msg.sender, value, msg.data);
  }
}

contract ForwarderFactory is CloneFactory {
  address public implementationAddress;

  event ForwarderCreated(address newForwarderAddress, address parentAddress);

  constructor(address _implementationAddress) {
    implementationAddress = _implementationAddress;
  }

  function createForwarder(address parent, bytes32 salt) external {
    // include the signers in the salt so any contract deployed to a given address must have the same signers
    bytes32 finalSalt = keccak256(abi.encodePacked(parent, salt));

    address payable clone = createClone(implementationAddress, finalSalt);
    Forwarder(clone).init(parent);
    emit ForwarderCreated(clone, parent);
  }
}

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"ForwarderDeposited","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"flush","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContractAddress","type":"address"}],"name":"flushTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_parentAddress","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"parentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.