ETH Price: $3,225.44 (+0.94%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer155474642022-09-16 16:48:35867 days ago1663346915IN
0xD6D66c7B...61053aEB0
0.04196456 ETH0.0005105612.9457828
Transfer147816022022-05-15 18:47:38991 days ago1652640458IN
0xD6D66c7B...61053aEB0
0.20017522 ETH0.0015163638.44838155
Transfer146478732022-04-24 14:01:161012 days ago1650808876IN
0xD6D66c7B...61053aEB0
0.20002105 ETH0.0014584736.98062166
Transfer145114732022-04-03 6:01:181033 days ago1648965678IN
0xD6D66c7B...61053aEB0
0.20000053 ETH0.0017081543.3114031
Transfer143953572022-03-16 4:08:581052 days ago1647403738IN
0xD6D66c7B...61053aEB0
0.20014022 ETH0.0018805447.68238954
Transfer142752682022-02-25 12:32:261070 days ago1645792346IN
0xD6D66c7B...61053aEB0
0.1992791 ETH0.0014548436.8885415
Transfer141625512022-02-08 1:39:031088 days ago1644284343IN
0xD6D66c7B...61053aEB0
0.2029487 ETH0.0027457269.61959845
Transfer141455312022-02-05 10:42:071090 days ago1644057727IN
0xD6D66c7B...61053aEB0
0.02065737 ETH0.0017816945.17588876
Transfer140355822022-01-19 10:59:151107 days ago1642589955IN
0xD6D66c7B...61053aEB0
0.19812087 ETH0.0037352494.70933644
Transfer139277802022-01-02 18:54:051124 days ago1641149645IN
0xD6D66c7B...61053aEB0
0.19761751 ETH0.00430475109.14959806
Transfer138168262021-12-16 14:53:451141 days ago1639666425IN
0xD6D66c7B...61053aEB0
0.19855373 ETH0.0024355261.75413499
Transfer137205352021-12-01 10:31:281156 days ago1638354688IN
0xD6D66c7B...61053aEB0
0.20150227 ETH0.0036044591.3932707
Transfer136217112021-11-15 17:46:521172 days ago1636998412IN
0xD6D66c7B...61053aEB0
0.19689073 ETH0.00491728124.68073263
Transfer135327422021-11-01 18:24:241186 days ago1635791064IN
0xD6D66c7B...61053aEB0
0.19703222 ETH0.00563184142.79893771
Transfer134453222021-10-19 1:41:531200 days ago1634607713IN
0xD6D66c7B...61053aEB0
0.19878682 ETH0.0020883752.95201535
Transfer133620162021-10-05 23:38:391213 days ago1633477119IN
0xD6D66c7B...61053aEB0
0.19788534 ETH0.00398116100.944934
Transfer132736492021-09-22 5:16:321226 days ago1632287792IN
0xD6D66c7B...61053aEB0
0.1984593 ETH0.0025480164.60652113
Transfer131882842021-09-09 0:14:431240 days ago1631146483IN
0xD6D66c7B...61053aEB0
0.19767679 ETH0.00397102100.68774588
Transfer130667492021-08-21 5:22:051258 days ago1629523325IN
0xD6D66c7B...61053aEB0
0.20011284 ETH0.0009186423.29275214
Transfer129519762021-08-03 11:12:341276 days ago1627989154IN
0xD6D66c7B...61053aEB0
0.20009159 ETH0.0007927220.1
Transfer128491162021-07-18 6:43:041292 days ago1626590584IN
0xD6D66c7B...61053aEB0
0.20018369 ETH0.0007927220.1
Transfer127477122021-07-02 10:43:401308 days ago1625222620IN
0xD6D66c7B...61053aEB0
0.20013774 ETH0.0007927220.1
Transfer126421022021-06-15 23:40:031325 days ago1623800403IN
0xD6D66c7B...61053aEB0
0.20006538 ETH0.0011871130.1
Transfer125195742021-05-28 0:27:031344 days ago1622161623IN
0xD6D66c7B...61053aEB0
0.20050405 ETH0.0011871130.1
Transfer123865092021-05-07 9:59:011364 days ago1620381541IN
0xD6D66c7B...61053aEB0
0.293 ETH0.0009712546.25

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
155474642022-09-16 16:48:35867 days ago1663346915
0xD6D66c7B...61053aEB0
0.04196456 ETH
147816022022-05-15 18:47:38991 days ago1652640458
0xD6D66c7B...61053aEB0
0.20017522 ETH
146478732022-04-24 14:01:161012 days ago1650808876
0xD6D66c7B...61053aEB0
0.20002105 ETH
145114732022-04-03 6:01:181033 days ago1648965678
0xD6D66c7B...61053aEB0
0.20000053 ETH
143953572022-03-16 4:08:581052 days ago1647403738
0xD6D66c7B...61053aEB0
0.20014022 ETH
142752682022-02-25 12:32:261070 days ago1645792346
0xD6D66c7B...61053aEB0
0.1992791 ETH
141625512022-02-08 1:39:031088 days ago1644284343
0xD6D66c7B...61053aEB0
0.2029487 ETH
141455312022-02-05 10:42:071090 days ago1644057727
0xD6D66c7B...61053aEB0
0.02065737 ETH
140355822022-01-19 10:59:151107 days ago1642589955
0xD6D66c7B...61053aEB0
0.19812087 ETH
139277802022-01-02 18:54:051124 days ago1641149645
0xD6D66c7B...61053aEB0
0.19761751 ETH
138168262021-12-16 14:53:451141 days ago1639666425
0xD6D66c7B...61053aEB0
0.19855373 ETH
137205352021-12-01 10:31:281156 days ago1638354688
0xD6D66c7B...61053aEB0
0.20150227 ETH
136217112021-11-15 17:46:521172 days ago1636998412
0xD6D66c7B...61053aEB0
0.19689073 ETH
135327422021-11-01 18:24:241186 days ago1635791064
0xD6D66c7B...61053aEB0
0.19703222 ETH
134453222021-10-19 1:41:531200 days ago1634607713
0xD6D66c7B...61053aEB0
0.19878682 ETH
133620162021-10-05 23:38:391213 days ago1633477119
0xD6D66c7B...61053aEB0
0.19788534 ETH
132736492021-09-22 5:16:321226 days ago1632287792
0xD6D66c7B...61053aEB0
0.1984593 ETH
131882842021-09-09 0:14:431240 days ago1631146483
0xD6D66c7B...61053aEB0
0.19767679 ETH
130667492021-08-21 5:22:051258 days ago1629523325
0xD6D66c7B...61053aEB0
0.20011284 ETH
129519762021-08-03 11:12:341276 days ago1627989154
0xD6D66c7B...61053aEB0
0.20009159 ETH
128491162021-07-18 6:43:041292 days ago1626590584
0xD6D66c7B...61053aEB0
0.20018369 ETH
127477122021-07-02 10:43:401308 days ago1625222620
0xD6D66c7B...61053aEB0
0.20013774 ETH
126421022021-06-15 23:40:031325 days ago1623800403
0xD6D66c7B...61053aEB0
0.20006538 ETH
125195742021-05-28 0:27:031344 days ago1622161623
0xD6D66c7B...61053aEB0
0.20050405 ETH
123865142021-05-07 9:59:491364 days ago1620381589
0xD6D66c7B...61053aEB0
0.293 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.