ETH Price: $3,386.32 (-1.49%)
Gas: 2 Gwei

Contract

0x425338d8D4bb59c4597C2ac6b4281BedB4931D21
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer195405782024-03-29 15:34:3591 days ago1711726475IN
0x425338d8...dB4931D21
0.0448 ETH0.0019771846.96841281
Transfer195405492024-03-29 15:28:3591 days ago1711726115IN
0x425338d8...dB4931D21
0.0174 ETH0.0017691242.02603857
Transfer195404882024-03-29 15:16:2391 days ago1711725383IN
0x425338d8...dB4931D21
0.04096 ETH0.0024336657.81237032
Transfer195141302024-03-25 21:23:3595 days ago1711401815IN
0x425338d8...dB4931D21
0.03713 ETH0.0016141938.34546924
Transfer195140652024-03-25 21:10:3595 days ago1711401035IN
0x425338d8...dB4931D21
0.03 ETH0.0016220338.531742
Transfer195092412024-03-25 4:50:1196 days ago1711342211IN
0x425338d8...dB4931D21
0.03054 ETH0.0006899616.39035487
Transfer195076482024-03-24 23:26:3596 days ago1711322795IN
0x425338d8...dB4931D21
0.05708 ETH0.0007845418.63714492
Transfer195074332024-03-24 22:43:2396 days ago1711320203IN
0x425338d8...dB4931D21
0.05236 ETH0.00090321.45116059
Transfer195073452024-03-24 22:25:2396 days ago1711319123IN
0x425338d8...dB4931D21
0.03527 ETH0.000850420.20161033
Transfer195073182024-03-24 22:19:5996 days ago1711318799IN
0x425338d8...dB4931D21
0.0294 ETH0.0008069319.16896523
Transfer195071722024-03-24 21:50:4796 days ago1711317047IN
0x425338d8...dB4931D21
0.02966 ETH0.0008773920.84273841
Transfer194952262024-03-23 5:30:4798 days ago1711171847IN
0x425338d8...dB4931D21
0.06915 ETH0.0007400517.58013899
Transfer194951122024-03-23 5:07:3598 days ago1711170455IN
0x425338d8...dB4931D21
0.05423 ETH0.0009295622.08193606
Transfer194946682024-03-23 3:36:5998 days ago1711165019IN
0x425338d8...dB4931D21
0.06937 ETH0.0008467420.11457412
Transfer194945072024-03-23 3:04:4798 days ago1711163087IN
0x425338d8...dB4931D21
0.03497 ETH0.0008139619.33594297
Transfer194941762024-03-23 1:57:5998 days ago1711159079IN
0x425338d8...dB4931D21
0.03183 ETH0.0009589722.78075018
Transfer194941442024-03-23 1:51:2398 days ago1711158683IN
0x425338d8...dB4931D21
0.03023 ETH0.0009396322.32121693
Transfer194580142024-03-18 0:06:23103 days ago1710720383IN
0x425338d8...dB4931D21
0.03579 ETH0.0011731927.86948208
Transfer194579252024-03-17 23:48:11103 days ago1710719291IN
0x425338d8...dB4931D21
0.02764 ETH0.0012500429.69518571
Transfer194099112024-03-11 5:57:11110 days ago1710136631IN
0x425338d8...dB4931D21
0.0335 ETH0.0017127240.68610255
Transfer194098202024-03-11 5:38:47110 days ago1710135527IN
0x425338d8...dB4931D21
0.0257 ETH0.0018199343.23295057
Transfer193791982024-03-06 22:44:35114 days ago1709765075IN
0x425338d8...dB4931D21
0.0359 ETH0.0032867678.07775246
Transfer193661732024-03-05 3:06:59116 days ago1709608019IN
0x425338d8...dB4931D21
0.0507 ETH0.0035494584.31802145
Transfer193661222024-03-05 2:56:47116 days ago1709607407IN
0x425338d8...dB4931D21
0.07657 ETH0.003830891.00164279
Transfer193658622024-03-05 2:04:47116 days ago1709604287IN
0x425338d8...dB4931D21
0.0558 ETH0.0038160790.65181591
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
195405782024-03-29 15:34:3591 days ago1711726475
0x425338d8...dB4931D21
0.0448 ETH
195405492024-03-29 15:28:3591 days ago1711726115
0x425338d8...dB4931D21
0.0174 ETH
195404882024-03-29 15:16:2391 days ago1711725383
0x425338d8...dB4931D21
0.04096 ETH
195141302024-03-25 21:23:3595 days ago1711401815
0x425338d8...dB4931D21
0.03713 ETH
195140652024-03-25 21:10:3595 days ago1711401035
0x425338d8...dB4931D21
0.03 ETH
195092412024-03-25 4:50:1196 days ago1711342211
0x425338d8...dB4931D21
0.03054 ETH
195076482024-03-24 23:26:3596 days ago1711322795
0x425338d8...dB4931D21
0.05708 ETH
195074332024-03-24 22:43:2396 days ago1711320203
0x425338d8...dB4931D21
0.05236 ETH
195073452024-03-24 22:25:2396 days ago1711319123
0x425338d8...dB4931D21
0.03527 ETH
195073182024-03-24 22:19:5996 days ago1711318799
0x425338d8...dB4931D21
0.0294 ETH
195071722024-03-24 21:50:4796 days ago1711317047
0x425338d8...dB4931D21
0.02966 ETH
194952262024-03-23 5:30:4798 days ago1711171847
0x425338d8...dB4931D21
0.06915 ETH
194951122024-03-23 5:07:3598 days ago1711170455
0x425338d8...dB4931D21
0.05423 ETH
194946682024-03-23 3:36:5998 days ago1711165019
0x425338d8...dB4931D21
0.06937 ETH
194945072024-03-23 3:04:4798 days ago1711163087
0x425338d8...dB4931D21
0.03497 ETH
194941762024-03-23 1:57:5998 days ago1711159079
0x425338d8...dB4931D21
0.03183 ETH
194941442024-03-23 1:51:2398 days ago1711158683
0x425338d8...dB4931D21
0.03023 ETH
194580142024-03-18 0:06:23103 days ago1710720383
0x425338d8...dB4931D21
0.03579 ETH
194579252024-03-17 23:48:11103 days ago1710719291
0x425338d8...dB4931D21
0.02764 ETH
194099112024-03-11 5:57:11110 days ago1710136631
0x425338d8...dB4931D21
0.0335 ETH
194098202024-03-11 5:38:47110 days ago1710135527
0x425338d8...dB4931D21
0.0257 ETH
193791982024-03-06 22:44:35114 days ago1709765075
0x425338d8...dB4931D21
0.0359 ETH
193661732024-03-05 3:06:59116 days ago1709608019
0x425338d8...dB4931D21
0.0507 ETH
193661222024-03-05 2:56:47116 days ago1709607407
0x425338d8...dB4931D21
0.07657 ETH
193658622024-03-05 2:04:47116 days ago1709604287
0x425338d8...dB4931D21
0.0558 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.