ETH Price: $3,248.84 (-0.56%)

Contract

0x02Ef342bf1Bc07C45799ba799aAF54CA2108773a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer155486112022-09-16 20:39:59857 days ago1663360799IN
0x02Ef342b...A2108773a
0.04317827 ETH0.0004566511.57885003
Transfer155264402022-09-13 10:34:10860 days ago1663065250IN
0x02Ef342b...A2108773a
0.06860701 ETH0.000203585.16202464
Transfer155083472022-09-10 10:33:44863 days ago1662806024IN
0x02Ef342b...A2108773a
0.06794088 ETH0.000213295.40829216
Transfer154898362022-09-07 10:42:32866 days ago1662547352IN
0x02Ef342b...A2108773a
0.06848892 ETH0.000358759.0964259
Transfer154711632022-09-04 10:41:39869 days ago1662288099IN
0x02Ef342b...A2108773a
0.06225351 ETH0.0004224710.71215107
Transfer154524262022-09-01 10:45:15872 days ago1662029115IN
0x02Ef342b...A2108773a
0.06024703 ETH0.0004266310.81761037
Transfer154357472022-08-29 18:47:58875 days ago1661798878IN
0x02Ef342b...A2108773a
0.05310171 ETH0.0007071517.93026523
Transfer154210732022-08-27 10:33:43877 days ago1661596423IN
0x02Ef342b...A2108773a
0.06917667 ETH0.000145893.69918063
Transfer154026772022-08-24 11:32:06880 days ago1661340726IN
0x02Ef342b...A2108773a
0.07021371 ETH0.00019234.87606513
Transfer153835132022-08-21 10:40:16883 days ago1661078416IN
0x02Ef342b...A2108773a
0.07041293 ETH0.000169814.30586359
Transfer153645002022-08-18 10:35:56886 days ago1660818956IN
0x02Ef342b...A2108773a
0.06816481 ETH0.00032198.16215712
Transfer153455602022-08-15 10:42:01889 days ago1660560121IN
0x02Ef342b...A2108773a
0.06619949 ETH0.0007901520.03489222
Transfer153265042022-08-12 10:32:57892 days ago1660300377IN
0x02Ef342b...A2108773a
0.06855869 ETH0.0006227715.79088419
Transfer153075062022-08-09 10:34:24895 days ago1660041264IN
0x02Ef342b...A2108773a
0.07070815 ETH0.000547913.89236915
Transfer152882292022-08-06 10:41:43898 days ago1659782503IN
0x02Ef342b...A2108773a
0.07004731 ETH0.000276397.00818346
Transfer152689752022-08-03 10:34:53901 days ago1659522893IN
0x02Ef342b...A2108773a
0.05053137 ETH0.000352348.93390831
Transfer152576732022-08-01 16:10:57903 days ago1659370257IN
0x02Ef342b...A2108773a
0.06991419 ETH0.0006008915.23616962
Transfer152368562022-07-29 10:34:02906 days ago1659090842IN
0x02Ef342b...A2108773a
0.06888451 ETH0.000350618.8899615
Transfer152176382022-07-26 10:39:26909 days ago1658831966IN
0x02Ef342b...A2108773a
0.06382061 ETH0.000382889.70825438
Transfer151984122022-07-23 10:39:26912 days ago1658572766IN
0x02Ef342b...A2108773a
0.07164972 ETH0.000390089.89096582
Transfer151789692022-07-20 10:34:15915 days ago1658313255IN
0x02Ef342b...A2108773a
0.07114029 ETH0.0013885535.20770338
Transfer151596572022-07-17 10:38:29918 days ago1658054309IN
0x02Ef342b...A2108773a
0.07340482 ETH0.0008152520.67117986
Transfer151402942022-07-14 10:42:00921 days ago1657795320IN
0x02Ef342b...A2108773a
0.07513395 ETH0.0004559211.56031737
Transfer151208512022-07-11 10:33:37924 days ago1657535617IN
0x02Ef342b...A2108773a
0.07285157 ETH0.0006792317.22231996
Transfer151013922022-07-08 10:34:01927 days ago1657276441IN
0x02Ef342b...A2108773a
0.07213458 ETH0.0005504213.95633602
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
155486112022-09-16 20:39:59857 days ago1663360799
0x02Ef342b...A2108773a
0.04317827 ETH
155264402022-09-13 10:34:10860 days ago1663065250
0x02Ef342b...A2108773a
0.06860701 ETH
155083472022-09-10 10:33:44863 days ago1662806024
0x02Ef342b...A2108773a
0.06794088 ETH
154898362022-09-07 10:42:32866 days ago1662547352
0x02Ef342b...A2108773a
0.06848892 ETH
154711632022-09-04 10:41:39869 days ago1662288099
0x02Ef342b...A2108773a
0.06225351 ETH
154524262022-09-01 10:45:15872 days ago1662029115
0x02Ef342b...A2108773a
0.06024703 ETH
154357472022-08-29 18:47:58875 days ago1661798878
0x02Ef342b...A2108773a
0.05310171 ETH
154210732022-08-27 10:33:43877 days ago1661596423
0x02Ef342b...A2108773a
0.06917667 ETH
154026772022-08-24 11:32:06880 days ago1661340726
0x02Ef342b...A2108773a
0.07021371 ETH
153835132022-08-21 10:40:16883 days ago1661078416
0x02Ef342b...A2108773a
0.07041293 ETH
153645002022-08-18 10:35:56886 days ago1660818956
0x02Ef342b...A2108773a
0.06816481 ETH
153455602022-08-15 10:42:01889 days ago1660560121
0x02Ef342b...A2108773a
0.06619949 ETH
153265042022-08-12 10:32:57892 days ago1660300377
0x02Ef342b...A2108773a
0.06855869 ETH
153075062022-08-09 10:34:24895 days ago1660041264
0x02Ef342b...A2108773a
0.07070815 ETH
152882292022-08-06 10:41:43898 days ago1659782503
0x02Ef342b...A2108773a
0.07004731 ETH
152689752022-08-03 10:34:53901 days ago1659522893
0x02Ef342b...A2108773a
0.05053137 ETH
152576732022-08-01 16:10:57903 days ago1659370257
0x02Ef342b...A2108773a
0.06991419 ETH
152368562022-07-29 10:34:02906 days ago1659090842
0x02Ef342b...A2108773a
0.06888451 ETH
152176382022-07-26 10:39:26909 days ago1658831966
0x02Ef342b...A2108773a
0.06382061 ETH
151984122022-07-23 10:39:26912 days ago1658572766
0x02Ef342b...A2108773a
0.07164972 ETH
151789692022-07-20 10:34:15915 days ago1658313255
0x02Ef342b...A2108773a
0.07114029 ETH
151596572022-07-17 10:38:29918 days ago1658054309
0x02Ef342b...A2108773a
0.07340482 ETH
151402942022-07-14 10:42:00921 days ago1657795320
0x02Ef342b...A2108773a
0.07513395 ETH
151208512022-07-11 10:33:37924 days ago1657535617
0x02Ef342b...A2108773a
0.07285157 ETH
151013922022-07-08 10:34:01927 days ago1657276441
0x02Ef342b...A2108773a
0.07213458 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.