ETH Price: $1,616.65 (-1.89%)
 
Transaction Hash
Method
Block
From
To
Deposit ERC20222518082025-04-12 8:53:113 days ago1744447991IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.000248810.9736792
Deposit ETH222149242025-04-07 5:25:118 days ago1744003511IN
0x2fCE9b92...C7C9F4Fdd
0.6 ETH0.000313811.39093187
Deposit ETH221890272025-04-03 14:37:4712 days ago1743691067IN
0x2fCE9b92...C7C9F4Fdd
0.1 ETH0.000442811.96266162
Deposit ETH221758782025-04-01 18:34:2313 days ago1743532463IN
0x2fCE9b92...C7C9F4Fdd
0.1 ETH0.000349721.55007608
Deposit ETH221758742025-04-01 18:33:3513 days ago1743532415IN
0x2fCE9b92...C7C9F4Fdd
0.1 ETH0.000402431.78371951
Deposit ERC20221302332025-03-26 9:38:4720 days ago1742981927IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.000240620.94162533
Deposit ETH220900522025-03-20 19:05:1125 days ago1742497511IN
0x2fCE9b92...C7C9F4Fdd
0.001 ETH0.000214990.95290876
Deposit ERC20220900392025-03-20 19:02:3525 days ago1742497355IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.000277021.084081
Deposit ETH219749622025-03-04 17:17:1142 days ago1741108631IN
0x2fCE9b92...C7C9F4Fdd
0.4 ETH0.000834063.69678476
Deposit ETH219291382025-02-26 7:53:3548 days ago1740556415IN
0x2fCE9b92...C7C9F4Fdd
0.3 ETH0.000251361.11411083
Deposit ETH219104562025-02-23 17:16:3551 days ago1740330995IN
0x2fCE9b92...C7C9F4Fdd
0.01 ETH0.000298491.32302323
Deposit ERC20218442142025-02-14 10:49:5960 days ago1739530199IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.000330481.29330072
Deposit ETH218280072025-02-12 4:19:3562 days ago1739333975IN
0x2fCE9b92...C7C9F4Fdd
0.01 ETH0.00031141.38022751
Deposit ERC20218277952025-02-12 3:35:5962 days ago1739331359IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.000358031.40110597
Deposit ETH217688342025-02-03 22:01:4770 days ago1738620107IN
0x2fCE9b92...C7C9F4Fdd
0.152 ETH0.0039333917.4338882
Deposit ERC20217688202025-02-03 21:58:5970 days ago1738619939IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.0033094112.9520239
Deposit ETH217655132025-02-03 10:54:4771 days ago1738580087IN
0x2fCE9b92...C7C9F4Fdd
0.8 ETH0.001664647.37814771
Deposit ETH217513262025-02-01 11:19:3573 days ago1738408775IN
0x2fCE9b92...C7C9F4Fdd
0.005 ETH0.001098814.87025107
Deposit ERC20216861912025-01-23 9:07:3582 days ago1737623255IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.001280715.01187523
Deposit ETH215666882025-01-06 16:42:5999 days ago1736181779IN
0x2fCE9b92...C7C9F4Fdd
0.03 ETH0.0060036626.60986059
Deposit ERC20215188292024-12-31 0:19:35105 days ago1735604375IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.002702637.59076996
Deposit ETH215082822024-12-29 12:59:35107 days ago1735477175IN
0x2fCE9b92...C7C9F4Fdd
0.007 ETH0.001243955.51353272
Deposit ETH215082712024-12-29 12:57:11107 days ago1735477031IN
0x2fCE9b92...C7C9F4Fdd
0.015 ETH0.001304555.7821335
Deposit ERC20214742522024-12-24 18:55:35111 days ago1735066535IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.002094038.19425067
Deposit ERC20213495422024-12-07 8:51:59129 days ago1733561519IN
0x2fCE9b92...C7C9F4Fdd
0 ETH0.0030617411.78638492
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer221898602025-04-03 17:24:5912 days ago1743701099
0x2fCE9b92...C7C9F4Fdd
0.29 ETH
Transfer221445062025-03-28 9:26:1118 days ago1743153971
0x2fCE9b92...C7C9F4Fdd
63.6 ETH
Transfer221405752025-03-27 20:15:3518 days ago1743106535
0x2fCE9b92...C7C9F4Fdd
0.19 ETH
Transfer218785932025-02-19 6:22:4755 days ago1739946167
0x2fCE9b92...C7C9F4Fdd
0.24 ETH
Transfer218035432025-02-08 18:20:1165 days ago1739038811
0x2fCE9b92...C7C9F4Fdd
0.01 ETH
Transfer217384432025-01-30 16:07:1175 days ago1738253231
0x2fCE9b92...C7C9F4Fdd
0.24 ETH
Transfer216974492025-01-24 22:48:3580 days ago1737758915
0x2fCE9b92...C7C9F4Fdd
0.03 ETH
Transfer215884862025-01-09 17:43:4795 days ago1736444627
0x2fCE9b92...C7C9F4Fdd
0.02 ETH
Transfer215884792025-01-09 17:42:2395 days ago1736444543
0x2fCE9b92...C7C9F4Fdd
0.09 ETH
Transfer215884672025-01-09 17:39:5995 days ago1736444399
0x2fCE9b92...C7C9F4Fdd
0.04 ETH
Transfer215691492025-01-07 0:57:1198 days ago1736211431
0x2fCE9b92...C7C9F4Fdd
0.03 ETH
Transfer213958682024-12-13 20:05:59122 days ago1734120359
0x2fCE9b92...C7C9F4Fdd
0.09 ETH
Transfer213396682024-12-05 23:47:11130 days ago1733442431
0x2fCE9b92...C7C9F4Fdd
0.29005 ETH
Transfer210768752024-10-30 7:09:35167 days ago1730272175
0x2fCE9b92...C7C9F4Fdd
0.499 ETH
Transfer210602222024-10-27 23:21:59169 days ago1730071319
0x2fCE9b92...C7C9F4Fdd
0.26 ETH
Transfer210269282024-10-23 7:55:23174 days ago1729670123
0x2fCE9b92...C7C9F4Fdd
0.4886857 ETH
Transfer208864382024-10-03 17:20:47194 days ago1727976047
0x2fCE9b92...C7C9F4Fdd
0.06 ETH
Transfer208862572024-10-03 16:44:23194 days ago1727973863
0x2fCE9b92...C7C9F4Fdd
0.28 ETH
Transfer208585712024-09-29 20:04:47197 days ago1727640287
0x2fCE9b92...C7C9F4Fdd
5.15 ETH
Transfer208467962024-09-28 4:38:47199 days ago1727498327
0x2fCE9b92...C7C9F4Fdd
0.875 ETH
Transfer208448192024-09-27 22:01:59199 days ago1727474519
0x2fCE9b92...C7C9F4Fdd
0.25 ETH
Transfer208445062024-09-27 20:59:23199 days ago1727470763
0x2fCE9b92...C7C9F4Fdd
3.5 ETH
Transfer208403872024-09-27 7:12:35200 days ago1727421155
0x2fCE9b92...C7C9F4Fdd
2.58 ETH
Transfer208338362024-09-26 9:17:11201 days ago1727342231
0x2fCE9b92...C7C9F4Fdd
0.45 ETH
Transfer208332282024-09-26 7:15:23201 days ago1727334923
0x2fCE9b92...C7C9F4Fdd
1.5 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xdc166445...66c2F1c00
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
L1ChugSplashProxy

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : L1ChugSplashProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity >0.5.0 <0.8.0;

import { iL1ChugSplashDeployer } from "./interfaces/iL1ChugSplashDeployer.sol";

/**
 * @title L1ChugSplashProxy
 * @dev Basic ChugSplash proxy contract for L1. Very close to being a normal proxy but has added
 * functions `setCode` and `setStorage` for changing the code or storage of the contract. Nifty!
 *
 * Note for future developers: do NOT make anything in this contract 'public' unless you know what
 * you're doing. Anything public can potentially have a function signature that conflicts with a
 * signature attached to the implementation contract. Public functions SHOULD always have the
 * 'proxyCallIfNotOwner' modifier unless there's some *really* good reason not to have that
 * modifier. And there almost certainly is not a good reason to not have that modifier. Beware!
 */
contract L1ChugSplashProxy {

    /*************
     * Constants *
     *************/

    // "Magic" prefix. When prepended to some arbitrary bytecode and used to create a contract, the
    // appended bytecode will be deployed as given.
    bytes13 constant internal DEPLOY_CODE_PREFIX = 0x600D380380600D6000396000f3;

    // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
    bytes32 constant internal IMPLEMENTATION_KEY = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    // bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
    bytes32 constant internal OWNER_KEY = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;


    /***************
     * Constructor *
     ***************/
    
    /**
     * @param _owner Address of the initial contract owner.
     */
    constructor(
        address _owner
    ) {
        _setOwner(_owner);
    }


    /**********************
     * Function Modifiers *
     **********************/

    /**
     * Blocks a function from being called when the parent signals that the system should be paused
     * via an isUpgrading function.
     */
    modifier onlyWhenNotPaused() {
        address owner = _getOwner();

        // We do a low-level call because there's no guarantee that the owner actually *is* an
        // L1ChugSplashDeployer contract and Solidity will throw errors if we do a normal call and
        // it turns out that it isn't the right type of contract.
        (bool success, bytes memory returndata) = owner.staticcall(
            abi.encodeWithSelector(
                iL1ChugSplashDeployer.isUpgrading.selector
            )
        );

        // If the call was unsuccessful then we assume that there's no "isUpgrading" method and we
        // can just continue as normal. We also expect that the return value is exactly 32 bytes
        // long. If this isn't the case then we can safely ignore the result.
        if (success && returndata.length == 32) {
            // Although the expected value is a *boolean*, it's safer to decode as a uint256 in the
            // case that the isUpgrading function returned something other than 0 or 1. But we only
            // really care about the case where this value is 0 (= false).
            uint256 ret = abi.decode(returndata, (uint256));
            require(
                ret == 0,
                "L1ChugSplashProxy: system is currently being upgraded"
            );
        }

        _;
    }

    /**
     * Makes a proxy call instead of triggering the given function when the caller is either the
     * owner or the zero address. Caller can only ever be the zero address if this function is
     * being called off-chain via eth_call, which is totally fine and can be convenient for
     * client-side tooling. Avoids situations where the proxy and implementation share a sighash
     * and the proxy function ends up being called instead of the implementation one.
     *
     * Note: msg.sender == address(0) can ONLY be triggered off-chain via eth_call. If there's a
     * way for someone to send a transaction with msg.sender == address(0) in any real context then
     * we have much bigger problems. Primary reason to include this additional allowed sender is
     * because the owner address can be changed dynamically and we do not want clients to have to
     * keep track of the current owner in order to make an eth_call that doesn't trigger the
     * proxied contract.
     */
    modifier proxyCallIfNotOwner() {
        if (msg.sender == _getOwner() || msg.sender == address(0)) {
            _;
        } else {
            // This WILL halt the call frame on completion.
            _doProxyCall();
        }
    }


    /*********************
     * Fallback Function *
     *********************/

    fallback()
        external
        payable
    {
        // Proxy call by default.
        _doProxyCall();
    }


    /********************
     * Public Functions *
     ********************/

    /**
     * Sets the code that should be running behind this proxy. Note that this scheme is a bit
     * different from the standard proxy scheme where one would typically deploy the code
     * separately and then set the implementation address. We're doing it this way because it gives
     * us a lot more freedom on the client side. Can only be triggered by the contract owner.
     * @param _code New contract code to run inside this contract.
     */
    function setCode(
        bytes memory _code
    )
        proxyCallIfNotOwner
        public
    {
        // Get the code hash of the current implementation.
        address implementation = _getImplementation();

        // If the code hash matches the new implementation then we return early.
        if (keccak256(_code) == _getAccountCodeHash(implementation)) {
            return;
        }

        // Create the deploycode by appending the magic prefix.
        bytes memory deploycode = abi.encodePacked(
            DEPLOY_CODE_PREFIX,
            _code
        );

        // Deploy the code and set the new implementation address.
        address newImplementation;
        assembly {
            newImplementation := create(0x0, add(deploycode, 0x20), mload(deploycode))
        }

        // Check that the code was actually deployed correctly. I'm not sure if you can ever
        // actually fail this check. Should only happen if the contract creation from above runs
        // out of gas but this parent execution thread does NOT run out of gas. Seems like we
        // should be doing this check anyway though.
        require(
            _getAccountCodeHash(newImplementation) == keccak256(_code),
            "L1ChugSplashProxy: code was not correctly deployed."
        );

        _setImplementation(newImplementation);
    }

    /**
     * Modifies some storage slot within the proxy contract. Gives us a lot of power to perform
     * upgrades in a more transparent way. Only callable by the owner.
     * @param _key Storage key to modify.
     * @param _value New value for the storage key.
     */
    function setStorage(
        bytes32 _key,
        bytes32 _value
    )
        proxyCallIfNotOwner
        public
    {
        assembly {
            sstore(_key, _value)
        }
    }

    /**
     * Changes the owner of the proxy contract. Only callable by the owner.
     * @param _owner New owner of the proxy contract.
     */
    function setOwner(
        address _owner
    )
        proxyCallIfNotOwner
        public
    {
        _setOwner(_owner);
    }

    /**
     * Queries the owner of the proxy contract. Can only be called by the owner OR by making an
     * eth_call and setting the "from" address to address(0).
     * @return Owner address.
     */
    function getOwner()
        proxyCallIfNotOwner
        public
        returns (
            address
        )
    {
        return _getOwner();
    }

    /**
     * Queries the implementation address. Can only be called by the owner OR by making an
     * eth_call and setting the "from" address to address(0).
     * @return Implementation address.
     */
    function getImplementation()
        proxyCallIfNotOwner
        public
        returns (
            address
        )
    {
        return _getImplementation();
    }


    /**********************
     * Internal Functions *
     **********************/

    /**
     * Sets the implementation address.
     * @param _implementation New implementation address.
     */
    function _setImplementation(
        address _implementation
    )
        internal
    {
        assembly {
            sstore(IMPLEMENTATION_KEY, _implementation)
        }
    }

    /**
     * Queries the implementation address.
     * @return Implementation address.
     */
    function _getImplementation()
        internal
        view
        returns (
            address
        )
    {
        address implementation;
        assembly {
            implementation := sload(IMPLEMENTATION_KEY)
        }
        return implementation;
    }

    /**
     * Changes the owner of the proxy contract.
     * @param _owner New owner of the proxy contract.
     */
    function _setOwner(
        address _owner
    )
        internal
    {
        assembly {
            sstore(OWNER_KEY, _owner)
        }
    }

    /**
     * Queries the owner of the proxy contract.
     * @return Owner address.
     */
    function _getOwner()
        internal
        view 
        returns (
            address
        )
    {
        address owner;
        assembly {
            owner := sload(OWNER_KEY)
        }
        return owner;
    }

    /**
     * Gets the code hash for a given account.
     * @param _account Address of the account to get a code hash for.
     * @return Code hash for the account.
     */
    function _getAccountCodeHash(
        address _account
    )
        internal
        view
        returns (
            bytes32
        )
    {
        bytes32 codeHash;
        assembly {
            codeHash := extcodehash(_account)
        }
        return codeHash;
    }

    /**
     * Performs the proxy call via a delegatecall.
     */
    function _doProxyCall()
        onlyWhenNotPaused
        internal
    {
        address implementation = _getImplementation();

        require(
            implementation != address(0),
            "L1ChugSplashProxy: implementation is not set yet"
        );

        assembly {
            // Copy calldata into memory at 0x0....calldatasize.
            calldatacopy(0x0, 0x0, calldatasize())

            // Perform the delegatecall, make sure to pass all available gas.
            let success := delegatecall(gas(), implementation, 0x0, calldatasize(), 0x0, 0x0)

            // Copy returndata into memory at 0x0....returndatasize. Note that this *will*
            // overwrite the calldata that we just copied into memory but that doesn't really
            // matter because we'll be returning in a second anyway.
            returndatacopy(0x0, 0x0, returndatasize())
            
            // Success == 0 means a revert. We'll revert too and pass the data up.
            if iszero(success) {
                revert(0x0, returndatasize())
            }

            // Otherwise we'll just return and pass the data up.
            return(0x0, returndatasize())
        }
    }
}

File 2 of 2 : iL1ChugSplashDeployer.sol
// SPDX-License-Identifier: MIT
pragma solidity >0.5.0 <0.8.0;

/**
 * @title iL1ChugSplashDeployer
 */
interface iL1ChugSplashDeployer {
    function isUpgrading()
        external
        view
        returns (
            bool
        );
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_code","type":"bytes"}],"name":"setCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"bytes32","name":"_value","type":"bytes32"}],"name":"setStorage","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x60806040526004361061004a5760003560e01c806313af4035146100545780636c5d4ad014610087578063893d20e81461013a5780639b0b0fda1461016b578063aaf10f421461019b575b6100526101b0565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661036c565b34801561009357600080fd5b50610052600480360360208110156100aa57600080fd5b8101906020810181356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460018302840111640100000000831117156100f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103af945050505050565b34801561014657600080fd5b5061014f610505565b604080516001600160a01b039092168252519081900360200190f35b34801561017757600080fd5b506100526004803603604081101561018e57600080fd5b508035906020013561054b565b3480156101a757600080fd5b5061014f610589565b60006101ba6105bd565b60408051600481526024810182526020810180516001600160e01b0316635bca393160e11b1781529151815193945060009384936001600160a01b0387169392918291908083835b602083106102215780518252601f199092019160209182019101610202565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610281576040519150601f19603f3d011682016040523d82523d6000602084013e610286565b606091505b5091509150818015610299575080516020145b156102f85760008180602001905160208110156102b557600080fd5b5051905080156102f65760405162461bcd60e51b81526004018080602001828103825260358152602001806106b76035913960400191505060405180910390fd5b505b60006103026105e2565b90506001600160a01b0381166103495760405162461bcd60e51b81526004018080602001828103825260308152602001806106546030913960400191505060405180910390fd5b3660008037600080366000845af43d6000803e80610366573d6000fd5b503d6000f35b6103746105bd565b6001600160a01b0316336001600160a01b03161480610391575033155b156103a45761039f81610607565b6103ac565b6103ac6101b0565b50565b6103b76105bd565b6001600160a01b0316336001600160a01b031614806103d4575033155b156103a45760006103e36105e2565b90506103ee8161062b565b825160208401201415610401575061039f565b60006c600d380380600d6000396000f360981b83604051602001808372ffffffffffffffffffffffffffffffffffffff19168152600d0182805190602001908083835b602083106104635780518252601f199092019160209182019101610444565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905060008151602083016000f0905083805190602001206104b88261062b565b146104f45760405162461bcd60e51b81526004018080602001828103825260338152602001806106846033913960400191505060405180910390fd5b6104fd8161062f565b5050506103ac565b600061050f6105bd565b6001600160a01b0316336001600160a01b0316148061052c575033155b15610540576105396105bd565b9050610548565b6105486101b0565b90565b6105536105bd565b6001600160a01b0316336001600160a01b03161480610570575033155b1561057d57808255610585565b6105856101b0565b5050565b60006105936105bd565b6001600160a01b0316336001600160a01b031614806105b0575033155b15610540576105396105e2565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3f90565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe4c314368756753706c61736850726f78793a20696d706c656d656e746174696f6e206973206e6f7420736574207965744c314368756753706c61736850726f78793a20636f646520776173206e6f7420636f72726563746c79206465706c6f7965642e4c314368756753706c61736850726f78793a2073797374656d2069732063757272656e746c79206265696e67207570677261646564a164736f6c6343000706000a

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
Loading...
Loading
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.