ETH Price: $3,098.99 (-0.94%)

Contract

0xAe9dC50d02ea776e539F9f27D53debc5d6a4dd89
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Flush Tokens198478362024-05-11 15:59:11192 days ago1715443151IN
0xAe9dC50d...5d6a4dd89
0 ETH0.000317415.97540225
Flush Tokens198475952024-05-11 15:10:11192 days ago1715440211IN
0xAe9dC50d...5d6a4dd89
0 ETH0.000271315.10755021
Flush Tokens197969952024-05-04 13:19:11199 days ago1714828751IN
0xAe9dC50d...5d6a4dd89
0 ETH0.000411387.74430653
Flush Tokens195980822024-04-06 17:09:11227 days ago1712423351IN
0xAe9dC50d...5d6a4dd89
0 ETH0.00090517.03666645
Flush Tokens195968892024-04-06 13:09:11227 days ago1712408951IN
0xAe9dC50d...5d6a4dd89
0 ETH0.001002618.8740263
Flush Tokens195632132024-04-01 19:59:23232 days ago1712001563IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0016844531.70984352
Flush Tokens195468222024-03-30 12:39:11234 days ago1711802351IN
0xAe9dC50d...5d6a4dd89
0 ETH0.001126321.20270555
Flush Tokens192978472024-02-24 13:49:11269 days ago1708782551IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0013563625.53356903
Flush Tokens192223622024-02-13 23:30:59280 days ago1707867059IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0012035722.65728061
Flush Tokens191480342024-02-03 13:09:11290 days ago1706965751IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0009150517.22585842
Flush Tokens190988652024-01-27 15:39:11297 days ago1706369951IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0012283223.1231115
Flush Tokens189989652024-01-13 15:49:11311 days ago1705160951IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0012234123.03081611
Flush Tokens189916682024-01-12 15:19:23312 days ago1705072763IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0019256136.24957503
Flush Tokens189885382024-01-12 4:49:23313 days ago1705034963IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0007736114.56332091
Flush Tokens189804752024-01-11 1:39:47314 days ago1704937187IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0020846139.24273141
Flush Tokens189367842024-01-04 21:59:11320 days ago1704405551IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0009596318.06504008
Flush Tokens188989262023-12-30 14:29:11325 days ago1703946551IN
0xAe9dC50d...5d6a4dd89
0 ETH0.0007399413.92943244

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
188564032023-12-24 15:05:35331 days ago1703430335  Contract Creation0 ETH
Loading...
Loading

Minimal Proxy Contract for 0x3a5fb753285ac3a67c6b0d03e121921b2a1428be

Contract Name:
Forwarder

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-10-12
*/

// File: @uniswap/lib/contracts/libraries/TransferHelper.sol



pragma solidity >=0.6.0;

// 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');
    }
}

// File: ManualForwarder/ERC20Interface.sol


pragma solidity ^0.8.0;

/**
 * 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);
}

// File: ManualForwarder/Forwarder.sol



 pragma solidity ^0.8.19;



 contract Forwarder {
    address private parentAddress;
    address private owner;

    event ForwarderDeposited(address from, uint256 value, bytes data);

    function initialize(address _owner, address initAddress) public onlyUninitialized {
        require(initAddress != address(0), "Invalid parent address");
        require(_owner != address(0), "Invalid owner address");
        owner = _owner;
        parentAddress = initAddress;
    }

    modifier onlyUninitialized {
        require(parentAddress == address(0x0), "Already initialized");
        _;
    }

    modifier onlyOwner {
        require(msg.sender == owner, "Only Owner");
        _;
    }

    function getParentAddress() public view onlyOwner returns (address) {
        return parentAddress;
    }

    function getOwner() public view onlyOwner returns (address) {
        return owner;
    }

    fallback() external payable {
        flush();
    }

    receive() external payable {
        flush();
    }

    function setParentAddress(address newAddress) public onlyOwner {
        require(newAddress != address(0), "Invalid parent address");
        parentAddress = newAddress;
    }

    function flush() private {
        uint256 value = payable(address(this)).balance;

        if (value == 0) {
            return;
        }

        (bool success, ) = parentAddress.call{ value: value }("");
        require(success, "Flush failed");
        emit ForwarderDeposited(msg.sender, value, msg.data);
    }

    function getERC20Balance(
        address tokenContractAddress
    ) public view returns (uint256) {
        ERC20Interface instance = ERC20Interface(tokenContractAddress);
        address forwarderAddress = address(this);
        uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
        if (forwarderBalance == 0) {
            return 0;
        }
        return forwarderBalance;
    }

    function flushTokens(address tokenContractAddress) external onlyOwner {
        ERC20Interface instance = ERC20Interface(tokenContractAddress);
        address forwarderAddress = address(this);
        uint256 forwarderBalance = instance.balanceOf(forwarderAddress);
        if (forwarderBalance == 0) {
            return;
        }

        TransferHelper.safeTransfer(
            tokenContractAddress,
            parentAddress,
            forwarderBalance
        );
    }
}

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":[{"internalType":"address","name":"tokenContractAddress","type":"address"}],"name":"flushTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContractAddress","type":"address"}],"name":"getERC20Balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getParentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"initAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setParentAddress","outputs":[],"stateMutability":"nonpayable","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.