ETH Price: $2,255.55 (+7.05%)

Contract

0xB1D93836364B2A0A55Cfe68bEe65Ae6c72664a3f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer136060432021-11-13 6:12:511203 days ago1636783971IN
0xB1D93836...c72664a3f
0.00168076 ETH0.00447933113.57616042
Transfer135166092021-10-30 5:22:051218 days ago1635571325IN
0xB1D93836...c72664a3f
0.00107615 ETH0.00423027107.26110308
Transfer134390302021-10-18 1:54:521230 days ago1634522092IN
0xB1D93836...c72664a3f
0.00198637 ETH0.0034031786.28958058
Transfer133815042021-10-09 0:54:021239 days ago1633740842IN
0xB1D93836...c72664a3f
0.0017886 ETH0.0030299776.82674932
Transfer133304112021-10-01 1:11:301247 days ago1633050690IN
0xB1D93836...c72664a3f
0.00147171 ETH0.0036139491.63374497
Transfer132861822021-09-24 3:47:441254 days ago1632455264IN
0xB1D93836...c72664a3f
0.04774663 ETH0.0022009855.80729253
Transfer132791302021-09-23 1:44:381255 days ago1632361478IN
0xB1D93836...c72664a3f
0.00274905 ETH0.0021827155.34407898
Transfer132345122021-09-16 4:06:321262 days ago1631765192IN
0xB1D93836...c72664a3f
0.00333909 ETH0.0021694555.00778971
Transfer132203642021-09-13 23:29:571264 days ago1631575797IN
0xB1D93836...c72664a3f
0.00068971 ETH0.0017566949.44804126
Transfer131831412021-09-08 5:19:281270 days ago1631078368IN
0xB1D93836...c72664a3f
0.00241086 ETH0.0034903888.50093131
Transfer131379602021-09-01 5:37:201277 days ago1630474640IN
0xB1D93836...c72664a3f
0.00240702 ETH0.00403015102.18696173
Transfer131058322021-08-27 6:13:071281 days ago1630044787IN
0xB1D93836...c72664a3f
0.01606286 ETH0.0023065258.48344655
Transfer130982952021-08-26 2:29:251283 days ago1629944965IN
0xB1D93836...c72664a3f
0.00349848 ETH0.0021300154.00794416
Transfer130205942021-08-14 2:21:151295 days ago1628907675IN
0xB1D93836...c72664a3f
0.00310501 ETH0.0018248446.26994005
Transfer129621172021-08-05 1:34:291304 days ago1628127269IN
0xB1D93836...c72664a3f
0.02049251 ETH0.0018930748
Transfer129441142021-08-02 5:25:561307 days ago1627881956IN
0xB1D93836...c72664a3f
0.00783 ETH0.0008676522
Transfer128997862021-07-26 4:42:491314 days ago1627274569IN
0xB1D93836...c72664a3f
0.00407963 ETH0.000642627
Transfer128997672021-07-26 4:37:441314 days ago1627274264IN
0xB1D93836...c72664a3f
0.00472223 ETH0.0006184826
Transfer128997352021-07-26 4:32:181314 days ago1627273938IN
0xB1D93836...c72664a3f
0.00534072 ETH0.0006184826
Transfer128603472021-07-20 0:47:251320 days ago1626742045IN
0xB1D93836...c72664a3f
0.02400316 ETH0.000709918
Transfer128602732021-07-20 0:32:071320 days ago1626741127IN
0xB1D93836...c72664a3f
0.02572543 ETH0.0005471223
Transfer128602682021-07-20 0:30:361320 days ago1626741036IN
0xB1D93836...c72664a3f
0.02627256 ETH0.0004757620
Transfer128602612021-07-20 0:29:021320 days ago1626740942IN
0xB1D93836...c72664a3f
0.02674832 ETH0.0005471223
Transfer128602572021-07-20 0:28:071320 days ago1626740887IN
0xB1D93836...c72664a3f
0.02729544 ETH0.0005471223
Transfer126824592021-06-22 6:37:191347 days ago1624343839IN
0xB1D93836...c72664a3f
0.02143076 ETH0.0008242720.9
View all transactions

Latest 22 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
136060432021-11-13 6:12:511203 days ago1636783971
0xB1D93836...c72664a3f
0.00168076 ETH
135166092021-10-30 5:22:051218 days ago1635571325
0xB1D93836...c72664a3f
0.00107615 ETH
134390302021-10-18 1:54:521230 days ago1634522092
0xB1D93836...c72664a3f
0.00198637 ETH
133815042021-10-09 0:54:021239 days ago1633740842
0xB1D93836...c72664a3f
0.0017886 ETH
133304112021-10-01 1:11:301247 days ago1633050690
0xB1D93836...c72664a3f
0.00147171 ETH
132861822021-09-24 3:47:441254 days ago1632455264
0xB1D93836...c72664a3f
0.04774663 ETH
132791302021-09-23 1:44:381255 days ago1632361478
0xB1D93836...c72664a3f
0.00274905 ETH
132345122021-09-16 4:06:321262 days ago1631765192
0xB1D93836...c72664a3f
0.00333909 ETH
131831412021-09-08 5:19:281270 days ago1631078368
0xB1D93836...c72664a3f
0.00241086 ETH
131379602021-09-01 5:37:201277 days ago1630474640
0xB1D93836...c72664a3f
0.00240702 ETH
131058322021-08-27 6:13:071281 days ago1630044787
0xB1D93836...c72664a3f
0.01606286 ETH
130982952021-08-26 2:29:251283 days ago1629944965
0xB1D93836...c72664a3f
0.00349848 ETH
130205942021-08-14 2:21:151295 days ago1628907675
0xB1D93836...c72664a3f
0.00310501 ETH
129621172021-08-05 1:34:291304 days ago1628127269
0xB1D93836...c72664a3f
0.02049251 ETH
129441142021-08-02 5:25:561307 days ago1627881956
0xB1D93836...c72664a3f
0.00783 ETH
128603472021-07-20 0:47:251320 days ago1626742045
0xB1D93836...c72664a3f
0.02400316 ETH
126824592021-06-22 6:37:191347 days ago1624343839
0xB1D93836...c72664a3f
0.02143076 ETH
125015162021-05-25 5:04:401376 days ago1621919080
0xB1D93836...c72664a3f
0.04440669 ETH
125002842021-05-25 0:22:351376 days ago1621902155
0xB1D93836...c72664a3f
0.03662635 ETH
124872712021-05-23 0:07:111378 days ago1621728431
0xB1D93836...c72664a3f
0.01966926 ETH
124679782021-05-20 0:15:361381 days ago1621469736
0xB1D93836...c72664a3f
0.32202904 ETH
124679782021-05-20 0:15:361381 days ago1621469736  Contract Creation0 ETH
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

API
[{"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.