ETH Price: $3,291.95 (-0.61%)
Gas: 9.01 Gwei

Contract

0x9347c727B2F344B992B4386E7344AA1f669A2535
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer156787122022-10-05 1:44:35837 days ago1664934275IN
0x9347c727...f669A2535
0.00706246 ETH0.0004327310.97236391
Transfer149181662022-06-07 1:47:48957 days ago1654566468IN
0x9347c727...f669A2535
0.00867884 ETH0.0013476334.1700878
Transfer148891112022-06-02 5:13:43962 days ago1654146823IN
0x9347c727...f669A2535
0.00881329 ETH0.0011744929.78011876
Transfer148594372022-05-28 9:13:47966 days ago1653729227IN
0x9347c727...f669A2535
0.00946187 ETH0.0006443516.33808306
Transfer148297372022-05-23 13:04:21971 days ago1653311061IN
0x9347c727...f669A2535
0.00871045 ETH0.0014273336.19088098
Transfer147999372022-05-18 16:43:19976 days ago1652892199IN
0x9347c727...f669A2535
0.00844222 ETH0.0017436644.21177336
Transfer147698802022-05-13 21:48:22981 days ago1652478502IN
0x9347c727...f669A2535
0.00888113 ETH0.001181929.9680233
Transfer147472922022-05-10 7:29:49984 days ago1652167789IN
0x9347c727...f669A2535
0.00851234 ETH0.0014673937.20664732
Transfer147201322022-05-05 23:30:29989 days ago1651793429IN
0x9347c727...f669A2535
0.00853114 ETH0.0016056940.71334597
Transfer146912402022-05-01 9:42:27993 days ago1651398147IN
0x9347c727...f669A2535
0.01008398 ETH0.0017575844.56466327
Transfer146632722022-04-27 0:22:04998 days ago1651018924IN
0x9347c727...f669A2535
0.00848758 ETH0.0017494344.35809538
Transfer146349832022-04-22 13:36:311002 days ago1650634591IN
0x9347c727...f669A2535
0.00878117 ETH0.001229631.17740526
Transfer146069942022-04-18 4:16:381007 days ago1650255398IN
0x9347c727...f669A2535
0.00906741 ETH0.0009787424.8167155
Transfer145789622022-04-13 19:19:081011 days ago1649877548IN
0x9347c727...f669A2535
0.00857145 ETH0.0016111140.85085279
Transfer145513632022-04-09 11:53:301015 days ago1649505210IN
0x9347c727...f669A2535
0.00899715 ETH0.0010826827.45212461
Transfer145247422022-04-05 8:07:581019 days ago1649146078IN
0x9347c727...f669A2535
0.0088159 ETH0.0021918755.57636601
Transfer144961842022-03-31 20:47:001024 days ago1648759620IN
0x9347c727...f669A2535
0.00908094 ETH0.0016686342.30936593
Transfer144680562022-03-27 11:48:501028 days ago1648381730IN
0x9347c727...f669A2535
0.00937908 ETH0.0006395816.21707328
Transfer144419442022-03-23 10:15:121032 days ago1648030512IN
0x9347c727...f669A2535
0.0091403 ETH0.0008043920.39604589
Transfer144138692022-03-19 1:20:481037 days ago1647652848IN
0x9347c727...f669A2535
0.00847406 ETH0.0016094540.808717
Transfer143879052022-03-15 0:08:081041 days ago1647302888IN
0x9347c727...f669A2535
0.0091945 ETH0.0008180120.74128121
Transfer143600532022-03-10 16:03:381045 days ago1646928218IN
0x9347c727...f669A2535
0.00907653 ETH0.0011203228.40662892
Transfer143309662022-03-06 3:38:511050 days ago1646537931IN
0x9347c727...f669A2535
0.0084769 ETH0.0015064538.19715884
Transfer143035342022-03-01 21:24:561054 days ago1646169896IN
0x9347c727...f669A2535
0.00847347 ETH0.0016872542.78150585
Transfer142761572022-02-25 15:43:211058 days ago1645803801IN
0x9347c727...f669A2535
0.01412438 ETH0.0007360935.05227

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
156787122022-10-05 1:44:35837 days ago1664934275
0x9347c727...f669A2535
0.00706246 ETH
149181662022-06-07 1:47:48957 days ago1654566468
0x9347c727...f669A2535
0.00867884 ETH
148891112022-06-02 5:13:43962 days ago1654146823
0x9347c727...f669A2535
0.00881329 ETH
148594372022-05-28 9:13:47966 days ago1653729227
0x9347c727...f669A2535
0.00946187 ETH
148297372022-05-23 13:04:21971 days ago1653311061
0x9347c727...f669A2535
0.00871045 ETH
147999372022-05-18 16:43:19976 days ago1652892199
0x9347c727...f669A2535
0.00844222 ETH
147698802022-05-13 21:48:22981 days ago1652478502
0x9347c727...f669A2535
0.00888113 ETH
147472922022-05-10 7:29:49984 days ago1652167789
0x9347c727...f669A2535
0.00851234 ETH
147201322022-05-05 23:30:29989 days ago1651793429
0x9347c727...f669A2535
0.00853114 ETH
146912402022-05-01 9:42:27993 days ago1651398147
0x9347c727...f669A2535
0.01008398 ETH
146632722022-04-27 0:22:04998 days ago1651018924
0x9347c727...f669A2535
0.00848758 ETH
146349832022-04-22 13:36:311002 days ago1650634591
0x9347c727...f669A2535
0.00878117 ETH
146069942022-04-18 4:16:381007 days ago1650255398
0x9347c727...f669A2535
0.00906741 ETH
145789622022-04-13 19:19:081011 days ago1649877548
0x9347c727...f669A2535
0.00857145 ETH
145513632022-04-09 11:53:301015 days ago1649505210
0x9347c727...f669A2535
0.00899715 ETH
145247422022-04-05 8:07:581019 days ago1649146078
0x9347c727...f669A2535
0.0088159 ETH
144961842022-03-31 20:47:001024 days ago1648759620
0x9347c727...f669A2535
0.00908094 ETH
144680562022-03-27 11:48:501028 days ago1648381730
0x9347c727...f669A2535
0.00937908 ETH
144419442022-03-23 10:15:121032 days ago1648030512
0x9347c727...f669A2535
0.0091403 ETH
144138692022-03-19 1:20:481037 days ago1647652848
0x9347c727...f669A2535
0.00847406 ETH
143879052022-03-15 0:08:081041 days ago1647302888
0x9347c727...f669A2535
0.0091945 ETH
143600532022-03-10 16:03:381045 days ago1646928218
0x9347c727...f669A2535
0.00907653 ETH
143309662022-03-06 3:38:511050 days ago1646537931
0x9347c727...f669A2535
0.0084769 ETH
143035342022-03-01 21:24:561054 days ago1646169896
0x9347c727...f669A2535
0.00847347 ETH
142761662022-02-25 15:45:311058 days ago1645803931
0x9347c727...f669A2535
0.01412438 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.