ETH Price: $2,522.10 (+0.27%)

Contract

0x9E09f92Ef0F9a6A19C53A81bAA99112Df90a8315
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer203643632024-07-22 20:09:5939 days ago1721678999IN
0x9E09f92E...Df90a8315
0.15602322 ETH0.000297367.53987371
Transfer203624532024-07-22 13:45:3539 days ago1721655935IN
0x9E09f92E...Df90a8315
0.6248216 ETH0.0003963210.04898201
Transfer196164322024-04-09 6:54:23143 days ago1712645663IN
0x9E09f92E...Df90a8315
0.01 ETH0.0008633521.89094165
Transfer193110492024-02-26 10:08:59186 days ago1708942139IN
0x9E09f92E...Df90a8315
0.17765451 ETH0.0009911925.13233543
Transfer192577532024-02-18 22:51:11194 days ago1708296671IN
0x9E09f92E...Df90a8315
0.01 ETH0.0009141523.17900323
Transfer191261552024-01-31 11:26:23212 days ago1706700383IN
0x9E09f92E...Df90a8315
0.87244727 ETH0.0008310421.07167005
Transfer191154002024-01-29 23:17:23214 days ago1706570243IN
0x9E09f92E...Df90a8315
0.2 ETH0.0007521519.07131943
Transfer190979382024-01-27 12:32:59216 days ago1706358779IN
0x9E09f92E...Df90a8315
0.07 ETH0.0004918112.47015857
Transfer190924232024-01-26 17:59:47217 days ago1706291987IN
0x9E09f92E...Df90a8315
0.04 ETH0.0010379226.31732617
Transfer190407302024-01-19 11:52:47224 days ago1705665167IN
0x9E09f92E...Df90a8315
0.20118802 ETH0.0008729222.13346244
Transfer190325412024-01-18 8:24:47225 days ago1705566287IN
0x9E09f92E...Df90a8315
0.1971138 ETH0.0010952627.77107504
Transfer190208402024-01-16 17:07:11227 days ago1705424831IN
0x9E09f92E...Df90a8315
0.19444195 ETH0.0018473746.84141796
Transfer190049542024-01-14 11:53:47229 days ago1705233227IN
0x9E09f92E...Df90a8315
0.05 ETH0.0014086435.71706838
Transfer189992592024-01-13 16:48:11230 days ago1705164491IN
0x9E09f92E...Df90a8315
0.58639838 ETH0.001102527.95458803
Transfer189979482024-01-13 12:23:47230 days ago1705148627IN
0x9E09f92E...Df90a8315
0.1 ETH0.0006188415.69118651
Transfer189911622024-01-12 13:37:35231 days ago1705066655IN
0x9E09f92E...Df90a8315
0.18613678 ETH0.001113128.22353862
Transfer189481012024-01-06 12:13:11237 days ago1704543191IN
0x9E09f92E...Df90a8315
0.3 ETH0.0005402113.69752837
Transfer189326952024-01-04 8:12:23239 days ago1704355943IN
0x9E09f92E...Df90a8315
0.15 ETH0.0006770517.16712799
Transfer189256272024-01-03 8:24:23240 days ago1704270263IN
0x9E09f92E...Df90a8315
0.3 ETH0.0005364313.6015288
Transfer189191702024-01-02 10:41:23241 days ago1704192083IN
0x9E09f92E...Df90a8315
0.20794958 ETH0.0006256315.86347676
Transfer188978292023-12-30 10:45:23244 days ago1703933123IN
0x9E09f92E...Df90a8315
0.87483232 ETH0.0005518913.9937428
Transfer188911412023-12-29 12:09:11245 days ago1703851751IN
0x9E09f92E...Df90a8315
1.2 ETH0.0006516816.52385762
Transfer188828982023-12-28 8:23:59246 days ago1703751839IN
0x9E09f92E...Df90a8315
0.2 ETH0.0010658427.02519861
Transfer188688102023-12-26 8:55:11248 days ago1703580911IN
0x9E09f92E...Df90a8315
0.22353304 ETH0.0005746814.57136641
Transfer188479992023-12-23 10:44:47251 days ago1703328287IN
0x9E09f92E...Df90a8315
0.5 ETH0.0007142618.11070439
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203643632024-07-22 20:09:5939 days ago1721678999
0x9E09f92E...Df90a8315
0.15602322 ETH
203624532024-07-22 13:45:3539 days ago1721655935
0x9E09f92E...Df90a8315
0.6248216 ETH
196164322024-04-09 6:54:23143 days ago1712645663
0x9E09f92E...Df90a8315
0.01 ETH
193110492024-02-26 10:08:59186 days ago1708942139
0x9E09f92E...Df90a8315
0.17765451 ETH
192577532024-02-18 22:51:11194 days ago1708296671
0x9E09f92E...Df90a8315
0.01 ETH
191261552024-01-31 11:26:23212 days ago1706700383
0x9E09f92E...Df90a8315
0.87244727 ETH
191154002024-01-29 23:17:23214 days ago1706570243
0x9E09f92E...Df90a8315
0.2 ETH
190979382024-01-27 12:32:59216 days ago1706358779
0x9E09f92E...Df90a8315
0.07 ETH
190924232024-01-26 17:59:47217 days ago1706291987
0x9E09f92E...Df90a8315
0.04 ETH
190407302024-01-19 11:52:47224 days ago1705665167
0x9E09f92E...Df90a8315
0.20118802 ETH
190325412024-01-18 8:24:47225 days ago1705566287
0x9E09f92E...Df90a8315
0.1971138 ETH
190208402024-01-16 17:07:11227 days ago1705424831
0x9E09f92E...Df90a8315
0.19444195 ETH
190049542024-01-14 11:53:47229 days ago1705233227
0x9E09f92E...Df90a8315
0.05 ETH
189992592024-01-13 16:48:11230 days ago1705164491
0x9E09f92E...Df90a8315
0.58639838 ETH
189979482024-01-13 12:23:47230 days ago1705148627
0x9E09f92E...Df90a8315
0.1 ETH
189911622024-01-12 13:37:35231 days ago1705066655
0x9E09f92E...Df90a8315
0.18613678 ETH
189481012024-01-06 12:13:11237 days ago1704543191
0x9E09f92E...Df90a8315
0.3 ETH
189326952024-01-04 8:12:23239 days ago1704355943
0x9E09f92E...Df90a8315
0.15 ETH
189256272024-01-03 8:24:23240 days ago1704270263
0x9E09f92E...Df90a8315
0.3 ETH
189191702024-01-02 10:41:23241 days ago1704192083
0x9E09f92E...Df90a8315
0.20794958 ETH
188978292023-12-30 10:45:23244 days ago1703933123
0x9E09f92E...Df90a8315
0.87483232 ETH
188911412023-12-29 12:09:11245 days ago1703851751
0x9E09f92E...Df90a8315
1.2 ETH
188828982023-12-28 8:23:59246 days ago1703751839
0x9E09f92E...Df90a8315
0.2 ETH
188688102023-12-26 8:55:11248 days ago1703580911
0x9E09f92E...Df90a8315
0.22353304 ETH
188479992023-12-23 10:44:47251 days ago1703328287
0x9E09f92E...Df90a8315
0.5 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.