ETH Price: $3,161.57 (-6.54%)
Gas: 5 Gwei

Contract

0x8E9e035985Cc6414DB87dbb891D4A6d9b269f1f6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer155199252022-09-12 8:30:14682 days ago1662971414IN
0x8E9e0359...9b269f1f6
0.20597491 ETH0.00026076.1813332
Transfer154583152022-09-02 9:17:29692 days ago1662110249IN
0x8E9e0359...9b269f1f6
0.2085052 ETH0.0004518510.71355367
Transfer153954842022-08-23 8:20:42702 days ago1661242842IN
0x8E9e0359...9b269f1f6
0.21246597 ETH0.0005266912.48796396
Transfer153325012022-08-13 9:05:01712 days ago1660381501IN
0x8E9e0359...9b269f1f6
0.21184616 ETH0.000490711.63473876
Transfer152683842022-08-03 8:09:48722 days ago1659514188IN
0x8E9e0359...9b269f1f6
0.2146191 ETH0.000237515.63140669
Transfer152040332022-07-24 7:40:15732 days ago1658648415IN
0x8E9e0359...9b269f1f6
0.21603403 ETH0.000308997.32628794
Transfer151397222022-07-14 8:45:43742 days ago1657788343IN
0x8E9e0359...9b269f1f6
0.22218434 ETH0.0004563610.82057163
Transfer150767612022-07-04 15:10:14752 days ago1656947414IN
0x8E9e0359...9b269f1f6
0.21730166 ETH0.0031189273.95014135
Transfer150122412022-06-23 9:19:18763 days ago1655975958IN
0x8E9e0359...9b269f1f6
0.20248582 ETH0.0018837444.66399541
Transfer149492142022-06-12 8:38:05774 days ago1655023085IN
0x8E9e0359...9b269f1f6
0.20367627 ETH0.0009043221.44162159
Transfer148723092022-05-30 11:31:23787 days ago1653910283IN
0x8E9e0359...9b269f1f6
0.20859219 ETH0.001238929.37468198
Transfer147541002022-05-11 9:40:20806 days ago1652262020IN
0x8E9e0359...9b269f1f6
0.21135793 ETH0.0038932892.31054629
Transfer146720002022-04-28 9:08:23819 days ago1651136903IN
0x8E9e0359...9b269f1f6
0.20252971 ETH0.0013809432.74235125
Transfer145957132022-04-16 10:10:14831 days ago1650103814IN
0x8E9e0359...9b269f1f6
0.10120316 ETH0.0008585720.35698539
Transfer145570442022-04-10 9:05:40837 days ago1649581540IN
0x8E9e0359...9b269f1f6
0.10287781 ETH0.0009205221.82591003
Transfer145185932022-04-04 8:59:00843 days ago1649062740IN
0x8E9e0359...9b269f1f6
0.10273694 ETH0.0018327143.45394428
Transfer144801642022-03-29 8:50:44849 days ago1648543844IN
0x8E9e0359...9b269f1f6
0.10680576 ETH0.0013171431.22978512
Transfer144415712022-03-23 8:50:46855 days ago1648025446IN
0x8E9e0359...9b269f1f6
0.1036206 ETH0.0008859821.00686762
Transfer144031272022-03-17 9:10:07861 days ago1647508207IN
0x8E9e0359...9b269f1f6
0.10254402 ETH0.0009410822.31320581
Transfer143644722022-03-11 8:26:30867 days ago1646987190IN
0x8E9e0359...9b269f1f6
0.1080113 ETH0.0013034630.9053191
Transfer143256792022-03-05 8:03:09873 days ago1646467389IN
0x8E9e0359...9b269f1f6
0.11345791 ETH0.001000123.71263717
Transfer142806492022-02-26 8:35:46880 days ago1645864546IN
0x8E9e0359...9b269f1f6
0.11057402 ETH0.0015890737.67728755
Transfer142420462022-02-20 9:11:25886 days ago1645348285IN
0x8E9e0359...9b269f1f6
0.10327957 ETH0.0021774451.62753577
Transfer141966712022-02-13 8:15:28893 days ago1644740128IN
0x8E9e0359...9b269f1f6
0.10558589 ETH0.001769341.95062203
Transfer141576932022-02-07 7:45:57899 days ago1644219957IN
0x8E9e0359...9b269f1f6
0.10670954 ETH0.003724688.31101961
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
155199252022-09-12 8:30:14682 days ago1662971414
0x8E9e0359...9b269f1f6
0.20597491 ETH
154583152022-09-02 9:17:29692 days ago1662110249
0x8E9e0359...9b269f1f6
0.2085052 ETH
153954842022-08-23 8:20:42702 days ago1661242842
0x8E9e0359...9b269f1f6
0.21246597 ETH
153325012022-08-13 9:05:01712 days ago1660381501
0x8E9e0359...9b269f1f6
0.21184616 ETH
152683842022-08-03 8:09:48722 days ago1659514188
0x8E9e0359...9b269f1f6
0.2146191 ETH
152040332022-07-24 7:40:15732 days ago1658648415
0x8E9e0359...9b269f1f6
0.21603403 ETH
151397222022-07-14 8:45:43742 days ago1657788343
0x8E9e0359...9b269f1f6
0.22218434 ETH
150767612022-07-04 15:10:14752 days ago1656947414
0x8E9e0359...9b269f1f6
0.21730166 ETH
150122412022-06-23 9:19:18763 days ago1655975958
0x8E9e0359...9b269f1f6
0.20248582 ETH
149492142022-06-12 8:38:05774 days ago1655023085
0x8E9e0359...9b269f1f6
0.20367627 ETH
148723092022-05-30 11:31:23787 days ago1653910283
0x8E9e0359...9b269f1f6
0.20859219 ETH
147541002022-05-11 9:40:20806 days ago1652262020
0x8E9e0359...9b269f1f6
0.21135793 ETH
146720002022-04-28 9:08:23819 days ago1651136903
0x8E9e0359...9b269f1f6
0.20252971 ETH
145957132022-04-16 10:10:14831 days ago1650103814
0x8E9e0359...9b269f1f6
0.10120316 ETH
145570442022-04-10 9:05:40837 days ago1649581540
0x8E9e0359...9b269f1f6
0.10287781 ETH
145185932022-04-04 8:59:00843 days ago1649062740
0x8E9e0359...9b269f1f6
0.10273694 ETH
144801642022-03-29 8:50:44849 days ago1648543844
0x8E9e0359...9b269f1f6
0.10680576 ETH
144415712022-03-23 8:50:46855 days ago1648025446
0x8E9e0359...9b269f1f6
0.1036206 ETH
144031272022-03-17 9:10:07861 days ago1647508207
0x8E9e0359...9b269f1f6
0.10254402 ETH
143644722022-03-11 8:26:30867 days ago1646987190
0x8E9e0359...9b269f1f6
0.1080113 ETH
143256792022-03-05 8:03:09873 days ago1646467389
0x8E9e0359...9b269f1f6
0.11345791 ETH
142806492022-02-26 8:35:46880 days ago1645864546
0x8E9e0359...9b269f1f6
0.11057402 ETH
142420462022-02-20 9:11:25886 days ago1645348285
0x8E9e0359...9b269f1f6
0.10327957 ETH
141966712022-02-13 8:15:28893 days ago1644740128
0x8E9e0359...9b269f1f6
0.10558589 ETH
141576932022-02-07 7:45:57899 days ago1644219957
0x8E9e0359...9b269f1f6
0.10670954 ETH
View All Internal Transactions
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
/**
 *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

[{"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 Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.