ETH Price: $4,175.42 (-0.62%)

Transaction Decoder

Block:
22522870 at May-20-2025 08:13:23 AM +UTC
Transaction Fee:
0.002387074496476545 ETH $9.97
Gas Used:
1,082,715 Gas / 2.204711763 Gwei

Emitted Events:

365 MiniMeToken.Transfer( _from=[Sender] 0xca74f404e0c7bfa35b13b511097df966d5a65597, _to=[Receiver] L1ChugSplashProxy, _amount=866259980000000000000 )
366 L1ChugSplashProxy.0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396( 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396, 0x0000000000000000000000005a98fcbea516cf06857215779fd812ca3bef1b32, 0x000000000000000000000000fdb794692724153d1488ccdbe0c56c252596735f, 0x000000000000000000000000ca74f404e0c7bfa35b13b511097df966d5a65597, 000000000000000000000000ca74f404e0c7bfa35b13b511097df966d5a65597, 00000000000000000000000000000000000000000000002ef5c5ae2afcfcc000, 0000000000000000000000000000000000000000000000000000000000000060, 0000000000000000000000000000000000000000000000000000000000000000 )
367 L1ChugSplashProxy.0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf( 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf, 0x0000000000000000000000005a98fcbea516cf06857215779fd812ca3bef1b32, 0x000000000000000000000000fdb794692724153d1488ccdbe0c56c252596735f, 0x000000000000000000000000ca74f404e0c7bfa35b13b511097df966d5a65597, 000000000000000000000000ca74f404e0c7bfa35b13b511097df966d5a65597, 00000000000000000000000000000000000000000000002ef5c5ae2afcfcc000, 0000000000000000000000000000000000000000000000000000000000000060, 0000000000000000000000000000000000000000000000000000000000000000 )
368 Proxy.0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32( 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32, 0x00000000000000000000000036bde71c97b33cc4729cf772ae268934f7ab70b2, 0x0000000000000000000000004200000000000000000000000000000000000007, 0x0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000020, 000000000000000000000000000000000000000000000000000000000000022d, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 00000000000c89f000d764ad0b00010000000000000000000000000000000000, 0000000000000000000002ac5e00000000000000000000000099c9fc46f92e8a, 1c0dec1b1747d010903e884be100000000000000000000000042000000000000, 0000000000000000000000001000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000007a12000000000000000000000000000000000000000, 000000000000000000000000c000000000000000000000000000000000000000, 000000000000000000000000e40166a07a000000000000000000000000fdb794, 692724153d1488ccdbe0c56c252596735f0000000000000000000000005a98fc, bea516cf06857215779fd812ca3bef1b32000000000000000000000000ca74f4, 04e0c7bfa35b13b511097df966d5a65597000000000000000000000000ca74f4, 04e0c7bfa35b13b511097df966d5a65597000000000000000000000000000000, 00000000000000002ef5c5ae2afcfcc000000000000000000000000000000000, 00000000000000000000000000000000c0000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 )
369 Lib_ResolvedDelegateProxy.0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a( 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a, 0x0000000000000000000000004200000000000000000000000000000000000010, 00000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be1, 0000000000000000000000000000000000000000000000000000000000000080, 000100000000000000000000000000000000000000000000000000000002ac5e, 000000000000000000000000000000000000000000000000000000000007a120, 00000000000000000000000000000000000000000000000000000000000000e4, 0166a07a000000000000000000000000fdb794692724153d1488ccdbe0c56c25, 2596735f0000000000000000000000005a98fcbea516cf06857215779fd812ca, 3bef1b32000000000000000000000000ca74f404e0c7bfa35b13b511097df966, d5a65597000000000000000000000000ca74f404e0c7bfa35b13b511097df966, d5a6559700000000000000000000000000000000000000000000002ef5c5ae2a, fcfcc00000000000000000000000000000000000000000000000000000000000, 000000c000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 )
370 Lib_ResolvedDelegateProxy.0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546( 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546, 0x00000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be1, 0000000000000000000000000000000000000000000000000000000000000000 )

Account State Difference:

  Address   Before After State Difference Code
0x25ace71c...4F7ab5fA1
(Optimism: Proxy OVM L1 Cross Domain Messenger)
(Titan Builder)
7.517458474207336321 Eth7.518866003707336321 Eth0.0014075295
0x5A98FcBE...A3beF1B32
0x99C9fc46...03E884bE1
(Optimism: Gateway)
0xbEb5Fc57...e41f106Ed
(Optimism: Portal)
0xcA74F404...6D5a65597
1.968374600173620047 Eth
Nonce: 414298
1.965987525677143502 Eth
Nonce: 414299
0.002387074496476545

Execution Trace

L1ChugSplashProxy.58a997f6( )
  • ProxyAdmin.STATICCALL( )
  • L1StandardBridge.depositERC20( _l1Token=0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32, _l2Token=0xFdb794692724153d1488CcdBE0C56c252596735F, _amount=866259980000000000000, _minGasLimit=500000, _extraData=0x )
    • MiniMeToken.01ffc9a7( )
      • AppProxyUpgradeable.f48c3054( )
        • KernelProxy.be00bbd8( )
          • Kernel.getApp( _namespace=F1F3EB40F5BC1AD1344716CED8B8A0431D840B5783AEA1FD01786BC26F35AC0F, _appId=CD567BDF93DD0F6ACC3BC7F2155F83244D56A65ABBFBEFB763E015420102C67B )
          • MiniMeToken.01ffc9a7( )
            • AppProxyUpgradeable.f48c3054( )
              • KernelProxy.be00bbd8( )
                • Kernel.getApp( _namespace=F1F3EB40F5BC1AD1344716CED8B8A0431D840B5783AEA1FD01786BC26F35AC0F, _appId=CD567BDF93DD0F6ACC3BC7F2155F83244D56A65ABBFBEFB763E015420102C67B )
                • MiniMeToken.transferFrom( _from=0xcA74F404E0C7bfA35B13B511097df966D5a65597, _to=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1, _amount=866259980000000000000 ) => ( success=True )
                  • AppProxyUpgradeable.4a393149( )
                    • KernelProxy.be00bbd8( )
                      • Kernel.getApp( _namespace=F1F3EB40F5BC1AD1344716CED8B8A0431D840B5783AEA1FD01786BC26F35AC0F, _appId=CD567BDF93DD0F6ACC3BC7F2155F83244D56A65ABBFBEFB763E015420102C67B ) => ( 0xde3A93028F2283cc28756B3674BD657eaFB992f4 )
                      • TokenManager.onTransfer( _from=0xcA74F404E0C7bfA35B13B511097df966D5a65597, _to=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1, _amount=866259980000000000000 ) => ( True )
                        • MiniMeToken.balanceOf( _owner=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1 ) => ( balance=242913519981325378279230 )
                        • MiniMeToken.balanceOf( _owner=0xcA74F404E0C7bfA35B13B511097df966D5a65597 ) => ( balance=866259980682040622371 )
                        • Lib_ResolvedDelegateProxy.3dbb202b( )
                          • Lib_AddressManager.getAddress( _name=OVM_L1CrossDomainMessenger ) => ( 0x5D5a095665886119693F0B41d8DFeE78da033e8B )
                          • L1CrossDomainMessenger.sendMessage( _target=0x4200000000000000000000000000000000000010, _message=0x0166A07A000000000000000000000000FDB794692724153D1488CCDBE0C56C252596735F0000000000000000000000005A98FCBEA516CF06857215779FD812CA3BEF1B32000000000000000000000000CA74F404E0C7BFA35B13B511097DF966D5A65597000000000000000000000000CA74F404E0C7BFA35B13B511097DF966D5A6559700000000000000000000000000000000000000000000002EF5C5AE2AFCFCC00000000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000000000000000000000000000000000, _minGasLimit=500000 )
                            • Proxy.e9e05c42( )
                              • OptimismPortal2.depositTransaction( _to=0x4200000000000000000000000000000000000007, _value=0, _gasLimit=821744, _isCreation=False, _data=0xD764AD0B000100000000000000000000000000000000000000000000000000000002AC5E00000000000000000000000099C9FC46F92E8A1C0DEC1B1747D010903E884BE100000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007A12000000000000000000000000000000000000000000000000000000000000000C000000000000000000000000000000000000000000000000000000000000000E40166A07A000000000000000000000000FDB794692724153D1488CCDBE0C56C252596735F0000000000000000000000005A98FCBEA516CF06857215779FD812CA3BEF1B32000000000000000000000000CA74F404E0C7BFA35B13B511097DF966D5A65597000000000000000000000000CA74F404E0C7BFA35B13B511097DF966D5A6559700000000000000000000000000000000000000000000002EF5C5AE2AFCFCC00000000000000000000000000000000000000000000000000000000000000000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 )
                                • Proxy.STATICCALL( )
                                  File 1 of 14: L1ChugSplashProxy
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // 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 {
                                  /*************
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 2 of 14: MiniMeToken
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  pragma solidity ^0.4.24;
                                  // File: @aragon/apps-shared-minime/contracts/ITokenController.sol
                                  /// @dev The token controller contract must implement these functions
                                  interface ITokenController {
                                  /// @notice Called when `_owner` sends ether to the MiniMe Token contract
                                  /// @param _owner The address that sent the ether to create tokens
                                  /// @return True if the ether is accepted, false if it throws
                                  function proxyPayment(address _owner) external payable returns(bool);
                                  /// @notice Notifies the controller about a token transfer allowing the
                                  /// controller to react if desired
                                  /// @param _from The origin of the transfer
                                  /// @param _to The destination of the transfer
                                  /// @param _amount The amount of the transfer
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 3 of 14: Proxy
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // 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;
                                  /**
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 4 of 14: Lib_ResolvedDelegateProxy
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // SPDX-License-Identifier: MIT
                                  pragma solidity >=0.6.0 <0.8.0;
                                  import "../utils/Context.sol";
                                  /**
                                  * @dev Contract module which provides a basic access control mechanism, where
                                  * there is an account (an owner) that can be granted exclusive access to
                                  * specific functions.
                                  *
                                  * By default, the owner account will be the one that deploys the contract. This
                                  * can later be changed with {transferOwnership}.
                                  *
                                  * This module is used through inheritance. It will make available the modifier
                                  * `onlyOwner`, which can be applied to your functions to restrict their use to
                                  * the owner.
                                  */
                                  abstract contract Ownable is Context {
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 5 of 14: ProxyAdmin
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // SPDX-License-Identifier: MIT
                                  pragma solidity 0.8.15;
                                  import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
                                  /**
                                  * @custom:legacy
                                  * @title AddressManager
                                  * @notice AddressManager is a legacy contract that was used in the old version of the Optimism
                                  * system to manage a registry of string names to addresses. We now use a more standard
                                  * proxy system instead, but this contract is still necessary for backwards compatibility
                                  * with several older contracts.
                                  */
                                  contract AddressManager is Ownable {
                                  /**
                                  * @notice Mapping of the hashes of string names to addresses.
                                  */
                                  mapping(bytes32 => address) private addresses;
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 6 of 14: L1StandardBridge
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // SPDX-License-Identifier: MIT
                                  pragma solidity 0.8.15;
                                  // Contracts
                                  import { StandardBridge } from "src/universal/StandardBridge.sol";
                                  // Libraries
                                  import { Predeploys } from "src/libraries/Predeploys.sol";
                                  // Interfaces
                                  import { ISemver } from "interfaces/universal/ISemver.sol";
                                  import { ICrossDomainMessenger } from "interfaces/universal/ICrossDomainMessenger.sol";
                                  import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
                                  /// @custom:proxied true
                                  /// @title L1StandardBridge
                                  /// @notice The L1StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and
                                  /// L2. In the case that an ERC20 token is native to L1, it will be escrowed within this
                                  /// contract. If the ERC20 token is native to L2, it will be burnt. Before Bedrock, ETH was
                                  /// stored within this contract. After Bedrock, ETH is instead stored inside the
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 7 of 14: AppProxyUpgradeable
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // File: contracts/common/UnstructuredStorage.sol
                                  /*
                                  * SPDX-License-Identitifer: MIT
                                  */
                                  pragma solidity ^0.4.24;
                                  library UnstructuredStorage {
                                  function getStorageBool(bytes32 position) internal view returns (bool data) {
                                  assembly { data := sload(position) }
                                  }
                                  function getStorageAddress(bytes32 position) internal view returns (address data) {
                                  assembly { data := sload(position) }
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 8 of 14: KernelProxy
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  /**
                                  *Submitted for verification at Etherscan.io on 2020-02-06
                                  */
                                  // File: contracts/acl/IACL.sol
                                  /*
                                  * SPDX-License-Identifier: MIT
                                  */
                                  pragma solidity ^0.4.24;
                                  interface IACL {
                                  function initialize(address permissionsCreator) external;
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 9 of 14: Kernel
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // File: contracts/acl/IACL.sol
                                  /*
                                  * SPDX-License-Identitifer: MIT
                                  */
                                  pragma solidity ^0.4.24;
                                  interface IACL {
                                  function initialize(address permissionsCreator) external;
                                  // TODO: this should be external
                                  // See https://github.com/ethereum/solidity/issues/4832
                                  function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);
                                  }
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 10 of 14: TokenManager
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // File: @aragon/os/contracts/common/UnstructuredStorage.sol
                                  /*
                                  * SPDX-License-Identitifer: MIT
                                  */
                                  pragma solidity ^0.4.24;
                                  library UnstructuredStorage {
                                  function getStorageBool(bytes32 position) internal view returns (bool data) {
                                  assembly { data := sload(position) }
                                  }
                                  function getStorageAddress(bytes32 position) internal view returns (address data) {
                                  assembly { data := sload(position) }
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 11 of 14: Lib_AddressManager
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // SPDX-License-Identifier: MIT
                                  pragma solidity >=0.6.0 <0.8.0;
                                  import "../utils/Context.sol";
                                  /**
                                  * @dev Contract module which provides a basic access control mechanism, where
                                  * there is an account (an owner) that can be granted exclusive access to
                                  * specific functions.
                                  *
                                  * By default, the owner account will be the one that deploys the contract. This
                                  * can later be changed with {transferOwnership}.
                                  *
                                  * This module is used through inheritance. It will make available the modifier
                                  * `onlyOwner`, which can be applied to your functions to restrict their use to
                                  * the owner.
                                  */
                                  abstract contract Ownable is Context {
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 12 of 14: L1CrossDomainMessenger
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // SPDX-License-Identifier: MIT
                                  pragma solidity 0.8.15;
                                  // Contracts
                                  import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol";
                                  // Libraries
                                  import { Predeploys } from "src/libraries/Predeploys.sol";
                                  // Interfaces
                                  import { ISemver } from "interfaces/universal/ISemver.sol";
                                  import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
                                  import { IOptimismPortal2 as IOptimismPortal } from "interfaces/L1/IOptimismPortal2.sol";
                                  /// @custom:proxied true
                                  /// @title L1CrossDomainMessenger
                                  /// @notice The L1CrossDomainMessenger is a message passing interface between L1 and L2 responsible
                                  /// for sending and receiving data on the L1 side. Users are encouraged to use this
                                  /// interface instead of interacting with lower-level contracts directly.
                                  contract L1CrossDomainMessenger is CrossDomainMessenger, ISemver {
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 13 of 14: OptimismPortal2
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // SPDX-License-Identifier: MIT
                                  pragma solidity 0.8.15;
                                  // Contracts
                                  import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
                                  import { ResourceMetering } from "src/L1/ResourceMetering.sol";
                                  // Libraries
                                  import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
                                  import { EOA } from "src/libraries/EOA.sol";
                                  import { SafeCall } from "src/libraries/SafeCall.sol";
                                  import { Constants } from "src/libraries/Constants.sol";
                                  import { Types } from "src/libraries/Types.sol";
                                  import { Hashing } from "src/libraries/Hashing.sol";
                                  import { SecureMerkleTrie } from "src/libraries/trie/SecureMerkleTrie.sol";
                                  import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol";
                                  import {
                                  BadTarget,
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                                  File 14 of 14: Proxy
                                  1
                                  2
                                  3
                                  4
                                  5
                                  6
                                  7
                                  8
                                  9
                                  10
                                  11
                                  12
                                  13
                                  14
                                  15
                                  16
                                  // 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;
                                  /**
                                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX