ETH Price: $2,055.75 (+2.68%)
Gas: 0.09 Gwei

Transaction Decoder

Block:
24514427 at Feb-22-2026 07:12:59 PM +UTC
Transaction Fee:
0.00000905340419438 ETH $0.02
Gas Used:
224,252 Gas / 0.040371565 Gwei

Emitted Events:

1137 Proxy.0x9669059ff8192bd73967244701af9a0c300a34425358d6300a5e0f8f9724d9a7( 0x9669059ff8192bd73967244701af9a0c300a34425358d6300a5e0f8f9724d9a7, 0xfef30523c752de40252f9b8349939fa79e6cf3c8c0b4752b938f12e18da5286e, 000000000000000000000000000000000000000000000000000000000000a8c0 )
1138 0x8e132b3bd37f3f6e223cd23add390111e674c94e.0x9262d1d0a737d718e3befc723ca2b2e75b805f632947f99a2fb0af0e61fdd194( 0x9262d1d0a737d718e3befc723ca2b2e75b805f632947f99a2fb0af0e61fdd194, 0000000000000000000000000000000000000000000000000000000000001fb6, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000001366a0f227ccb9322fbf03, 7f1b25d17ce5114fad932bb673f216924269af549d4ec0291dc74255b12f0cf5 )

Account State Difference:

  Address   Before After State Difference Code
0x30c78967...19EA05C1D
(quasarbuilder)
21.644651328536341203 Eth21.644651350961541203 Eth0.0000000224252
0x8E132B3b...1e674C94E
0xfdaD88aE...b8ACaec4a
2.522806996633034583 Eth
Nonce: 8124
2.522797943228840203 Eth
Nonce: 8125
0.00000905340419438

Execution Trace

0x8e132b3bd37f3f6e223cd23add390111e674c94e.e38cc96e( )
  • 0x9d6def8bb4d67ac2aabcc787767dc0b890f24980.e38cc96e( )
    • 0xa80f2401c8ae7d95c7995295dc2c0d651f25fd60.1070de84( )
      • 0x8ad2384aaf9525bd7b4d3f73e8cc07421af2046f.1070de84( )
        • Null: 0x000...007.1c4a6cf1( )
        • Null: 0x000...006.2c405617( )
        • Null: 0x000...007.00000000( )
        • Null: 0x000...005.00000000( )
        • Null: 0x000...006.05204fa7( )
        • Null: 0x000...008.2b0275a9( )
        • 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;
                }
            }