ETH Price: $2,469.38 (+1.00%)

Contract

0x89B150a119e8C07e326f6bFB5e162A1705F0Ddc2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer171240772023-04-25 15:10:23536 days ago1682435423IN
0x89B150a1...705F0Ddc2
0.27572139 ETH0.0019995947.4108329
Transfer171007462023-04-22 8:39:11539 days ago1682152751IN
0x89B150a1...705F0Ddc2
1.0370308 ETH0.0015709737.2481638
Transfer170891122023-04-20 17:17:11541 days ago1682011031IN
0x89B150a1...705F0Ddc2
0.56371348 ETH0.0036364986.22184022
Transfer170871282023-04-20 10:30:35541 days ago1681986635IN
0x89B150a1...705F0Ddc2
0.48443655 ETH0.0022442253.21086006
Transfer170857752023-04-20 5:51:59542 days ago1681969919IN
0x89B150a1...705F0Ddc2
0.58230251 ETH0.003145574.58035388
Transfer170807782023-04-19 12:55:11542 days ago1681908911IN
0x89B150a1...705F0Ddc2
0.62603885 ETH0.0028020766.43777109
Transfer170733912023-04-18 11:52:47543 days ago1681818767IN
0x89B150a1...705F0Ddc2
0.71014981 ETH0.0016851339.95484961
Transfer170679572023-04-17 17:25:35544 days ago1681752335IN
0x89B150a1...705F0Ddc2
0.22625926 ETH0.00165539.24037214
Transfer170674902023-04-17 15:50:59544 days ago1681746659IN
0x89B150a1...705F0Ddc2
0.35027067 ETH0.0022031452.23684238
Transfer170670782023-04-17 14:26:47544 days ago1681741607IN
0x89B150a1...705F0Ddc2
0.70154144 ETH0.0022226652.69976141
Transfer170663922023-04-17 12:07:35544 days ago1681733255IN
0x89B150a1...705F0Ddc2
0.34959123 ETH0.0013543532.11205846
Transfer170645352023-04-17 5:48:47545 days ago1681710527IN
0x89B150a1...705F0Ddc2
0.1725347 ETH0.0012389129.37490724
Transfer170607842023-04-16 17:01:23545 days ago1681664483IN
0x89B150a1...705F0Ddc2
0.17359198 ETH0.0011157926.45560643
Transfer170600312023-04-16 14:27:59545 days ago1681655279IN
0x89B150a1...705F0Ddc2
0.17411675 ETH0.0011198726.55243447
Transfer170536932023-04-15 16:51:47546 days ago1681577507IN
0x89B150a1...705F0Ddc2
0.39998095 ETH0.0012473829.57559361
Transfer170505452023-04-15 6:07:23547 days ago1681538843IN
0x89B150a1...705F0Ddc2
0.52568804 ETH0.0012360229.30629106
Transfer170429742023-04-14 4:07:11548 days ago1681445231IN
0x89B150a1...705F0Ddc2
0.17279532 ETH0.0011833728.05805489
Transfer170377242023-04-13 9:25:59548 days ago1681377959IN
0x89B150a1...705F0Ddc2
0.36871124 ETH0.0018875144.75325322
Transfer170332632023-04-12 17:00:47549 days ago1681318847IN
0x89B150a1...705F0Ddc2
0.57109459 ETH0.0012825330.40904727
Transfer170330222023-04-12 16:11:11549 days ago1681315871IN
0x89B150a1...705F0Ddc2
0.42438902 ETH0.0012859230.48960593
Transfer170309482023-04-12 9:10:11549 days ago1681290611IN
0x89B150a1...705F0Ddc2
0.39265589 ETH0.0008972321.27351206
Transfer170248112023-04-11 12:19:11550 days ago1681215551IN
0x89B150a1...705F0Ddc2
0.76583811 ETH0.0008835720.94976983
Transfer170193722023-04-10 17:50:47551 days ago1681149047IN
0x89B150a1...705F0Ddc2
0.38798508 ETH0.0011587927.47520433
Transfer170169352023-04-10 9:32:35551 days ago1681119155IN
0x89B150a1...705F0Ddc2
0.39503739 ETH0.0008371119.84811001
Transfer170106042023-04-09 12:00:23552 days ago1681041623IN
0x89B150a1...705F0Ddc2
0.39930087 ETH0.0010013523.74218618
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
171240772023-04-25 15:10:23536 days ago1682435423
0x89B150a1...705F0Ddc2
0.27572139 ETH
171007462023-04-22 8:39:11539 days ago1682152751
0x89B150a1...705F0Ddc2
1.0370308 ETH
170891122023-04-20 17:17:11541 days ago1682011031
0x89B150a1...705F0Ddc2
0.56371348 ETH
170871282023-04-20 10:30:35541 days ago1681986635
0x89B150a1...705F0Ddc2
0.48443655 ETH
170857752023-04-20 5:51:59542 days ago1681969919
0x89B150a1...705F0Ddc2
0.58230251 ETH
170807782023-04-19 12:55:11542 days ago1681908911
0x89B150a1...705F0Ddc2
0.62603885 ETH
170733912023-04-18 11:52:47543 days ago1681818767
0x89B150a1...705F0Ddc2
0.71014981 ETH
170679572023-04-17 17:25:35544 days ago1681752335
0x89B150a1...705F0Ddc2
0.22625926 ETH
170674902023-04-17 15:50:59544 days ago1681746659
0x89B150a1...705F0Ddc2
0.35027067 ETH
170670782023-04-17 14:26:47544 days ago1681741607
0x89B150a1...705F0Ddc2
0.70154144 ETH
170663922023-04-17 12:07:35544 days ago1681733255
0x89B150a1...705F0Ddc2
0.34959123 ETH
170645352023-04-17 5:48:47545 days ago1681710527
0x89B150a1...705F0Ddc2
0.1725347 ETH
170607842023-04-16 17:01:23545 days ago1681664483
0x89B150a1...705F0Ddc2
0.17359198 ETH
170600312023-04-16 14:27:59545 days ago1681655279
0x89B150a1...705F0Ddc2
0.17411675 ETH
170536932023-04-15 16:51:47546 days ago1681577507
0x89B150a1...705F0Ddc2
0.39998095 ETH
170505452023-04-15 6:07:23547 days ago1681538843
0x89B150a1...705F0Ddc2
0.52568804 ETH
170429742023-04-14 4:07:11548 days ago1681445231
0x89B150a1...705F0Ddc2
0.17279532 ETH
170377242023-04-13 9:25:59548 days ago1681377959
0x89B150a1...705F0Ddc2
0.36871124 ETH
170332632023-04-12 17:00:47549 days ago1681318847
0x89B150a1...705F0Ddc2
0.57109459 ETH
170330222023-04-12 16:11:11549 days ago1681315871
0x89B150a1...705F0Ddc2
0.42438902 ETH
170309482023-04-12 9:10:11549 days ago1681290611
0x89B150a1...705F0Ddc2
0.39265589 ETH
170248112023-04-11 12:19:11550 days ago1681215551
0x89B150a1...705F0Ddc2
0.76583811 ETH
170193722023-04-10 17:50:47551 days ago1681149047
0x89B150a1...705F0Ddc2
0.38798508 ETH
170169352023-04-10 9:32:35551 days ago1681119155
0x89B150a1...705F0Ddc2
0.39503739 ETH
170106042023-04-09 12:00:23552 days ago1681041623
0x89B150a1...705F0Ddc2
0.39930087 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.