ETH Price: $2,071.73 (-1.60%)

Transaction Decoder

Block:
24546518 at Feb-27-2026 06:37:23 AM +UTC
Transaction Fee:
0.000009371105188068 ETH $0.02
Gas Used:
229,206 Gas / 0.040885078 Gwei

Emitted Events:

894 Proxy.0x9669059ff8192bd73967244701af9a0c300a34425358d6300a5e0f8f9724d9a7( 0x9669059ff8192bd73967244701af9a0c300a34425358d6300a5e0f8f9724d9a7, 0x0afa54103e7bad99e43457cfd9a787db6205db326d974f128d4841a803a0866a, 000000000000000000000000000000000000000000000000000000000000a8c0 )
895 0x8e132b3bd37f3f6e223cd23add390111e674c94e.0x9262d1d0a737d718e3befc723ca2b2e75b805f632947f99a2fb0af0e61fdd194( 0x9262d1d0a737d718e3befc723ca2b2e75b805f632947f99a2fb0af0e61fdd194, 00000000000000000000000000000000000000000000000000000000000020c9, 0000000000000000000000000000000000000000000000000000000000000000, 00000000000000000000000000000000000000000012d03c8585ef742f5d7c78, 16b242ccbb8c75cdf246e832c36baa10cbaa319dd3ee1f32d12950d0e57f1603 )

Account State Difference:

  Address   Before After State Difference Code
0x30c78967...19EA05C1D
(quasarbuilder)
9.13005416850627473 Eth9.130054168521402326 Eth0.000000000015127596
0x8E132B3b...1e674C94E
0xfdaD88aE...b8ACaec4a
2.516780548506617894 Eth
Nonce: 8399
2.516771177401429826 Eth
Nonce: 8400
0.000009371105188068

Execution Trace

0x8e132b3bd37f3f6e223cd23add390111e674c94e.e38cc96e( )
  • 0x9d6def8bb4d67ac2aabcc787767dc0b890f24980.e38cc96e( )
    • 0xa80f2401c8ae7d95c7995295dc2c0d651f25fd60.1070de84( )
      • 0x8ad2384aaf9525bd7b4d3f73e8cc07421af2046f.1070de84( )
        • Null: 0x000...007.1c4a6cf1( )
        • Null: 0x000...006.1a16bcae( )
        • Null: 0x000...007.00000000( )
        • Null: 0x000...005.00000000( )
        • Null: 0x000...005.00000000( )
        • Null: 0x000...006.161b2484( )
        • Null: 0x000...008.038e9adc( )
        • Proxy.bd05743b( )
          • 0x0e874b9acd8d284b9bf6f6c6cc95bce6f66e5441.bd05743b( )
            // SPDX-License-Identifier: MIT
            pragma solidity 0.8.15;
            /**
             * @title Proxy
             * @notice Proxy is a transparent proxy that passes through the call if the caller is the owner or
             *         if the caller is address(0), meaning that the call originated from an off-chain
             *         simulation.
             */
            contract Proxy {
                /**
                 * @notice The storage slot that holds the address of the implementation.
                 *         bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
                 */
                bytes32 internal constant IMPLEMENTATION_KEY =
                    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
                /**
                 * @notice The storage slot that holds the address of the owner.
                 *         bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
                 */
                bytes32 internal constant OWNER_KEY =
                    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
                /**
                 * @notice An event that is emitted each time the implementation is changed. This event is part
                 *         of the EIP-1967 specification.
                 *
                 * @param implementation The address of the implementation contract
                 */
                event Upgraded(address indexed implementation);
                /**
                 * @notice An event that is emitted each time the owner is upgraded. This event is part of the
                 *         EIP-1967 specification.
                 *
                 * @param previousAdmin The previous owner of the contract
                 * @param newAdmin      The new owner of the contract
                 */
                event AdminChanged(address previousAdmin, address newAdmin);
                /**
                 * @notice A modifier that reverts if not called by the owner or by address(0) to allow
                 *         eth_call to interact with this proxy without needing to use low-level storage
                 *         inspection. We assume that nobody is able to trigger calls from address(0) during
                 *         normal EVM execution.
                 */
                modifier proxyCallIfNotAdmin() {
                    if (msg.sender == _getAdmin() || msg.sender == address(0)) {
                        _;
                    } else {
                        // This WILL halt the call frame on completion.
                        _doProxyCall();
                    }
                }
                /**
                 * @notice Sets the initial admin during contract deployment. Admin address is stored at the
                 *         EIP-1967 admin storage slot so that accidental storage collision with the
                 *         implementation is not possible.
                 *
                 * @param _admin Address of the initial contract admin. Admin as the ability to access the
                 *               transparent proxy interface.
                 */
                constructor(address _admin) {
                    _changeAdmin(_admin);
                }
                // slither-disable-next-line locked-ether
                receive() external payable {
                    // Proxy call by default.
                    _doProxyCall();
                }
                // slither-disable-next-line locked-ether
                fallback() external payable {
                    // Proxy call by default.
                    _doProxyCall();
                }
                /**
                 * @notice Set the implementation contract address. The code at the given address will execute
                 *         when this contract is called.
                 *
                 * @param _implementation Address of the implementation contract.
                 */
                function upgradeTo(address _implementation) public virtual proxyCallIfNotAdmin {
                    _setImplementation(_implementation);
                }
                /**
                 * @notice Set the implementation and call a function in a single transaction. Useful to ensure
                 *         atomic execution of initialization-based upgrades.
                 *
                 * @param _implementation Address of the implementation contract.
                 * @param _data           Calldata to delegatecall the new implementation with.
                 */
                function upgradeToAndCall(address _implementation, bytes calldata _data)
                    public
                    payable
                    virtual
                    proxyCallIfNotAdmin
                    returns (bytes memory)
                {
                    _setImplementation(_implementation);
                    (bool success, bytes memory returndata) = _implementation.delegatecall(_data);
                    require(success, "Proxy: delegatecall to new implementation contract failed");
                    return returndata;
                }
                /**
                 * @notice Changes the owner of the proxy contract. Only callable by the owner.
                 *
                 * @param _admin New owner of the proxy contract.
                 */
                function changeAdmin(address _admin) public virtual proxyCallIfNotAdmin {
                    _changeAdmin(_admin);
                }
                /**
                 * @notice Gets the owner of the proxy contract.
                 *
                 * @return Owner address.
                 */
                function admin() public virtual proxyCallIfNotAdmin returns (address) {
                    return _getAdmin();
                }
                /**
                 * @notice Queries the implementation address.
                 *
                 * @return Implementation address.
                 */
                function implementation() public virtual proxyCallIfNotAdmin returns (address) {
                    return _getImplementation();
                }
                /**
                 * @notice Sets the implementation address.
                 *
                 * @param _implementation New implementation address.
                 */
                function _setImplementation(address _implementation) internal {
                    assembly {
                        sstore(IMPLEMENTATION_KEY, _implementation)
                    }
                    emit Upgraded(_implementation);
                }
                /**
                 * @notice Changes the owner of the proxy contract.
                 *
                 * @param _admin New owner of the proxy contract.
                 */
                function _changeAdmin(address _admin) internal {
                    address previous = _getAdmin();
                    assembly {
                        sstore(OWNER_KEY, _admin)
                    }
                    emit AdminChanged(previous, _admin);
                }
                /**
                 * @notice Performs the proxy call via a delegatecall.
                 */
                function _doProxyCall() internal {
                    address impl = _getImplementation();
                    require(impl != address(0), "Proxy: implementation not initialized");
                    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(), impl, 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())
                    }
                }
                /**
                 * @notice Queries the implementation address.
                 *
                 * @return Implementation address.
                 */
                function _getImplementation() internal view returns (address) {
                    address impl;
                    assembly {
                        impl := sload(IMPLEMENTATION_KEY)
                    }
                    return impl;
                }
                /**
                 * @notice Queries the owner of the proxy contract.
                 *
                 * @return Owner address.
                 */
                function _getAdmin() internal view returns (address) {
                    address owner;
                    assembly {
                        owner := sload(OWNER_KEY)
                    }
                    return owner;
                }
            }