ETH Price: $3,576.17 (-0.99%)

Contract

0xc19A3196edcE89bC3a3c78f2699FD2c9368eBefB
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer212222282024-11-19 13:58:3514 days ago1732024715IN
0xc19A3196...9368eBefB
0.1 ETH0.0008485321.51510802
Transfer210297372024-10-23 17:19:1141 days ago1729703951IN
0xc19A3196...9368eBefB
0.15 ETH0.0007966620.19996845
Transfer210081312024-10-20 16:58:1144 days ago1729443491IN
0xc19A3196...9368eBefB
0.08 ETH0.0006942617.60361204
Transfer209804572024-10-16 20:17:2347 days ago1729109843IN
0xc19A3196...9368eBefB
0.2 ETH0.0006513716.51601697
Transfer209498842024-10-12 13:41:3552 days ago1728740495IN
0xc19A3196...9368eBefB
0.2 ETH0.0005319513.48813073
Transfer209430522024-10-11 14:44:2353 days ago1728657863IN
0xc19A3196...9368eBefB
0.89 ETH0.0017524144.43343425
Transfer208661262024-09-30 21:21:2363 days ago1727731283IN
0xc19A3196...9368eBefB
0.1009624 ETH0.0008780322.26318144
Transfer208652372024-09-30 18:22:4764 days ago1727720567IN
0xc19A3196...9368eBefB
0.10527086 ETH0.001350534.24287205
Transfer208573222024-09-29 15:54:2365 days ago1727625263IN
0xc19A3196...9368eBefB
0.10982404 ETH0.000626815.89301495
Transfer208572562024-09-29 15:40:5965 days ago1727624459IN
0xc19A3196...9368eBefB
0.19121767 ETH0.0006040315.31579348
Transfer208486292024-09-28 10:47:1166 days ago1727520431IN
0xc19A3196...9368eBefB
0.19627485 ETH0.0005338513.53624551
Transfer208422372024-09-27 13:23:4767 days ago1727443427IN
0xc19A3196...9368eBefB
0.19441815 ETH0.0010766927.30029387
Transfer208409882024-09-27 9:13:2367 days ago1727428403IN
0xc19A3196...9368eBefB
0.10056596 ETH0.00107827.33348271
Transfer208347022024-09-26 12:10:4768 days ago1727352647IN
0xc19A3196...9368eBefB
0.41737624 ETH0.0011035927.98223934
Transfer208146902024-09-23 17:10:5971 days ago1727111459IN
0xc19A3196...9368eBefB
0.15 ETH0.0008809522.33712567
Transfer208051082024-09-22 9:05:4772 days ago1726995947IN
0xc19A3196...9368eBefB
0.28450756 ETH0.0008043120.3940191
Transfer207798572024-09-18 20:26:2375 days ago1726691183IN
0xc19A3196...9368eBefB
0.2312803 ETH0.0006574816.67102646
Transfer207798162024-09-18 20:18:1175 days ago1726690691IN
0xc19A3196...9368eBefB
0.095 ETH0.0004403311.16487918
Transfer207527092024-09-15 1:24:3579 days ago1726363475IN
0xc19A3196...9368eBefB
0.29 ETH0.000060451.53279434
Transfer207406402024-09-13 8:56:1181 days ago1726217771IN
0xc19A3196...9368eBefB
0.20634092 ETH0.000162034.10860276
Transfer207351482024-09-12 14:32:4782 days ago1726151567IN
0xc19A3196...9368eBefB
0.13669104 ETH0.0005643614.30993975
Transfer207279932024-09-11 14:33:4783 days ago1726065227IN
0xc19A3196...9368eBefB
0.25 ETH0.000257996.5417125
Transfer207191632024-09-10 8:56:4784 days ago1725958607IN
0xc19A3196...9368eBefB
0.21562523 ETH0.000254546.4541638
Transfer207129502024-09-09 12:07:3585 days ago1725883655IN
0xc19A3196...9368eBefB
0.20254089 ETH0.00023175.87499012
Transfer205984412024-08-24 12:24:59101 days ago1724502299IN
0xc19A3196...9368eBefB
0.295 ETH0.0000451.14115415
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
212222282024-11-19 13:58:3514 days ago1732024715
0xc19A3196...9368eBefB
0.1 ETH
210297372024-10-23 17:19:1141 days ago1729703951
0xc19A3196...9368eBefB
0.15 ETH
210081312024-10-20 16:58:1144 days ago1729443491
0xc19A3196...9368eBefB
0.08 ETH
209804572024-10-16 20:17:2347 days ago1729109843
0xc19A3196...9368eBefB
0.2 ETH
209498842024-10-12 13:41:3552 days ago1728740495
0xc19A3196...9368eBefB
0.2 ETH
209430522024-10-11 14:44:2353 days ago1728657863
0xc19A3196...9368eBefB
0.89 ETH
208661262024-09-30 21:21:2363 days ago1727731283
0xc19A3196...9368eBefB
0.1009624 ETH
208652372024-09-30 18:22:4764 days ago1727720567
0xc19A3196...9368eBefB
0.10527086 ETH
208573222024-09-29 15:54:2365 days ago1727625263
0xc19A3196...9368eBefB
0.10982404 ETH
208572562024-09-29 15:40:5965 days ago1727624459
0xc19A3196...9368eBefB
0.19121767 ETH
208486292024-09-28 10:47:1166 days ago1727520431
0xc19A3196...9368eBefB
0.19627485 ETH
208422372024-09-27 13:23:4767 days ago1727443427
0xc19A3196...9368eBefB
0.19441815 ETH
208409882024-09-27 9:13:2367 days ago1727428403
0xc19A3196...9368eBefB
0.10056596 ETH
208347022024-09-26 12:10:4768 days ago1727352647
0xc19A3196...9368eBefB
0.41737624 ETH
208146902024-09-23 17:10:5971 days ago1727111459
0xc19A3196...9368eBefB
0.15 ETH
208051082024-09-22 9:05:4772 days ago1726995947
0xc19A3196...9368eBefB
0.28450756 ETH
207798572024-09-18 20:26:2375 days ago1726691183
0xc19A3196...9368eBefB
0.2312803 ETH
207798162024-09-18 20:18:1175 days ago1726690691
0xc19A3196...9368eBefB
0.095 ETH
207527092024-09-15 1:24:3579 days ago1726363475
0xc19A3196...9368eBefB
0.29 ETH
207406402024-09-13 8:56:1181 days ago1726217771
0xc19A3196...9368eBefB
0.20634092 ETH
207351482024-09-12 14:32:4782 days ago1726151567
0xc19A3196...9368eBefB
0.13669104 ETH
207279932024-09-11 14:33:4783 days ago1726065227
0xc19A3196...9368eBefB
0.25 ETH
207191632024-09-10 8:56:4784 days ago1725958607
0xc19A3196...9368eBefB
0.21562523 ETH
207129502024-09-09 12:07:3585 days ago1725883655
0xc19A3196...9368eBefB
0.20254089 ETH
205984412024-08-24 12:24:59101 days ago1724502299
0xc19A3196...9368eBefB
0.295 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.