Contract 0xf18aCC02628009231d7BAAF9a7a24C0860Dda6cb 9

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xda3a32c304cf330f80e5c83d25aabc36109ad827f902a948f53e4e6eed36c63aDeposit407296482023-03-24 23:03:549 hrs 6 mins ago0x6749425132cf3552fd4183be008ba25bb49b50d4 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.038271312315 60.616874442
0x03155a681bd7bbff136e65c8c4e4f0bc079b341b58b06a6a4c3e0d1108bf8ad1Execute Proposal407247622023-03-24 20:04:1712 hrs 6 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.012509778814 62.291319465
0x36c64a79cc93b46c3bc720dfe4485e6fa21aa12231a0bdd30e5ae726b1c192d5Vote Proposal407247512023-03-24 20:03:5312 hrs 6 mins ago0x04732fd4ec57641257124ea3e03974eb50ef9b19 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.008301467582 58.133933591
0xee941630efaa82a151e6a94291efdf7f1394026821a8dc4a52c052f6bc6981b0Vote Proposal407247512023-03-24 20:03:5312 hrs 6 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.015321547001 58.133933591
0x72284f30a40aedd39ffb03452d417ae9e5b44f0c332da06089927e89289c2f1aExecute Proposal407233042023-03-24 19:11:0112 hrs 59 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.029416998664 73.671421648
0x7af0a6a46baddeddfaf9722d254884ce6b2927acb007f07bcc945c5e4b8137daVote Proposal407232952023-03-24 19:10:4113 hrs ago0x04732fd4ec57641257124ea3e03974eb50ef9b19 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.010286758268 72.024521739
0xcf6e9a7a3d09b81a933284b597aaf6c0076b317fa9dc7422441bd8e52bb12db3Vote Proposal407232922023-03-24 19:10:3513 hrs ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.018575376883 70.473392835
0x7fa9283fe6cf4f1a6c517f6b2811d12813e5e9137072a16b29c1c51212d9cf34Execute Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004501585745 109.434441354
0x0307adb18fa8a1cbfc202bc47ccdfc394799018c26a385095a6ca26eea5c89a6Vote Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.003995832651 108.458624704
0xc6f56b07f84098eca883b7a4b2dc5704f5270088193fe6c7c31fa0c8ce642593Execute Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.0046340418 108.363151272
0x93e3956da9ef5c9e23b42b01a80ca55bf7df0f73c83d3e406b910bdd61023dc5Vote Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.003995042562 108.437179364
0xec52d9fbba8da31626cde07cdd4eeed2b4548e9657a041d250468f32d47deaaeExecute Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004704187711 108.812632115
0x935cf00994742ec0d81079c893e91db251fc15e27b93ef7accb95b7e8cc6fcb6Execute Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004706102282 108.856918077
0x5a9a0426315de468dadd749aebb3b5e2f6aa67a65baa69f3a763e74223efaad4Vote Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004006932552 108.759908603
0x3826bb7dcd9cf96f0e0c4c894389234a4086fefff6903bc4abecfb11890480e8Execute Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004510135172 109.546408209
0x59757651e21513499cc0f1e367d89e0a6b6746e908a8a37f05e1851092486b1aVote Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004041894042 109.708866023
0x79fb4bbea7a65d0bbc698f3aec2070cf0d82efdc1d57c6ae49a768e7fb3d434eExecute Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.004676953608 108.363151272
0xbefda267b6291c60d94a0f54f67b3518665a0c0c22ab381b17e2880f1b3e203eVote Proposal407224012023-03-24 18:37:5913 hrs 32 mins ago0x33aee8d62c7588fff9935c83fd24e344b4309e5d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.003830563787 103.97274272
0xc23b084b5b10eb0dcd578575ff8cc7e1af6aa63b0eadb54d7ae98903dc0a177aDeposit407167072023-03-24 15:06:3117 hrs 4 mins ago0x13486440f7fe48f47da9dc278a981ac080e151ae IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.332813252737 512.354601675
0x83dc53919715960870b0c707c03acf4e57ea402a5c63477907135db6f2e0ce68Execute Proposal407143162023-03-24 13:11:3518 hrs 59 mins ago0xc8abf85f9840b4156e0fdf0532e86f6f3e8620a9 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.042119272003 193.28303239
0xe2338fd394e45b8df44fa87f51df2d12da25476b90057fbbb91cd444e32c1e5eVote Proposal407142922023-03-24 13:10:4519 hrs ago0xc8abf85f9840b4156e0fdf0532e86f6f3e8620a9 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.036737859308 257.226492294
0xa95abfe250bb5467beac6f46870e9e20c0162d37a757da7bf1acfa1ffcee27e4Vote Proposal407142912023-03-24 13:10:4319 hrs ago0x04732fd4ec57641257124ea3e03974eb50ef9b19 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.068646577817 260.439251148
0x28a0f725c93c27ce319d24bff7f2f1794d03d650882d5531cb70f3d2f8cfb122Deposit407137872023-03-24 12:49:3919 hrs 21 mins ago0xfaec431cb76e10b6c2c275ae4baad2f34ac46322 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.10683330054 216.844236522
0x18d6b5b9f49afb40eec955d370f5af9fa953bd4aff9eb1b6906748f5c7350e1fDeposit407137002023-03-24 12:46:0319 hrs 24 mins ago0xf716e7756f18c3c670d76bccfd4edc191355e37d IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.224054517389467.999969482
0xcbcce5bb638276f4f99af1f05f0a667314135c44075d5c8730362bd0c91b0780Execute Proposal407119832023-03-24 11:30:4720 hrs 39 mins ago0xc8abf85f9840b4156e0fdf0532e86f6f3e8620a9 IN  0xf18acc02628009231d7baaf9a7a24c0860dda6cb0 MATIC0.006875801429 160.784805662
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9548ff4aad5c2a85cbbe132dfe22606a81f7056cef59200078278d7353496cc0406973832023-03-24 2:43:031 day 5 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa5.8685 MATIC
0x99ff208bbe57dd636be43baa147dc387d125232f6e47f83b82c5b030b33cc92a406964612023-03-24 2:09:021 day 6 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.3685 MATIC
0x511c54bdaddd875938f636ea68d9f201fead3eac9fa78130e1405fbb9620679e406923492023-03-23 23:36:381 day 8 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.1579 MATIC
0xc787bef0228a15b6e43dd869d3b5e1c0b4d3581122503057d1d492591d555d13406815652023-03-23 17:00:241 day 15 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa1.579 MATIC
0x491d206ff3b6e1b5da9c30f3fa9bd324b0779892eaf580f66c59784eb8240bef406809702023-03-23 16:38:101 day 15 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa1.579 MATIC
0xe2213f29b012366dc4dc1825c354ed11ae4e4838cb7a5f9941530f9640c3f763406809372023-03-23 16:37:001 day 15 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa1.579 MATIC
0xb2b081063489a29a5e8f78478db4759a29615d9f3c1ea435b3067e858a48946c406723292023-03-23 11:16:371 day 20 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.1579 MATIC
0x7406fa4b11b7bdf67d7d821e3df3e93f7663d64620ff954c7317b07458fabc9d406722622023-03-23 11:13:431 day 20 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.1579 MATIC
0x2e558af010ec320bc98371ae2773a4b28342a40de2e05be3c425ff07b9cc407b406687482023-03-23 8:51:091 day 23 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa5.266704 MATIC
0xdf6832f07446b67578411fd8d2e28f48efcdf50060296d1e730ce51877f826d4406684212023-03-23 8:37:271 day 23 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa5.273513 MATIC
0xcd74aec542eec11657478489ba986638c5fed8b9bb425726c63b89b5ec04b112406662222023-03-23 7:09:572 days 1 hr ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa2 wei
0xbbfa08ad69dd6510565709fbc5567b5d79e0f31fb618111dd1479abee5ed83e2406555062023-03-23 0:28:322 days 7 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.1579 MATIC
0x4a6f7e3a74a3c6512697c8766486582c1b11c20c7ca1c12b5f55ca665b9eda89406529082023-03-22 22:47:582 days 9 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa1.579 MATIC
0xef92043f39d3246ec8e7a35292d597f813d530dd179d75e8a5bc6ebe85545545406528072023-03-22 22:44:242 days 9 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa22.043295 MATIC
0xd3a793328b3e17a570fb60e82ee208bc3e250a5d1ff16b3c5ee61f2b384c4686406527362023-03-22 22:41:542 days 9 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa22.054149 MATIC
0x3f459676badc4aecde2d0122fe88ee9b8369cb621d65062f343e73b33363cf68406311362023-03-22 8:43:282 days 23 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa2.0527 MATIC
0x8e9b024ac5e73a61328d7f8c392fef4617701b36560d451136988b857e8d2a07406178572023-03-22 0:08:193 days 8 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.3685 MATIC
0x10e430f0ddbfcc93bed9a94b2850fb6ab40bd5e6c9fdd456a69c89a44d5628d4406167692023-03-21 23:25:513 days 8 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.3685 MATIC
0x9ef0c22834b4ad2df5af4e1cb0db81fd4646ed72039e0c9c795a8f8153656bae406099722023-03-21 19:12:053 days 12 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa579.9158 MATIC
0xc32424d74de22b1045fd7d67ac3f7baf9ba96642023cd780ca6fab9cd255279e406093442023-03-21 18:48:423 days 13 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.3685 MATIC
0x0cf354bbd6260c9283bf5881bd048be117df04aaa1b599f9014ef5baa92a2173406057352023-03-21 16:19:163 days 15 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.3685 MATIC
0x0304534661d1224802ed7a7edb43529f6e432e94c22e4e2c9a9b96c2494f8323405990902023-03-21 11:34:133 days 20 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.1579 MATIC
0xf20a0d965ea9a2b78f61d9993ff04343f8a46399e252a949372f26fe0329b64b405665502023-03-20 13:14:024 days 18 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa3.3685 MATIC
0x2fa7dcb6a814b89a68fae8f8d9cbaf60e5a40a50a0df6d31d1c837c4324ea95a405597932023-03-20 9:05:084 days 23 hrs ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa33.3685 MATIC
0x152574ab8cbbe3c643b56a06a2f5556a87eea7c2d85965ffe8eb7791078f313e405567832023-03-20 7:12:385 days 58 mins ago 0xf18acc02628009231d7baaf9a7a24c0860dda6cb 0x4c28f48448720e9000907bc2611f73022fdce1fa1.63 MATIC
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x58120b59893b0504dab5df72f45927b6300d0208

Contract Name:
ERC1967Proxy

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 13 : import.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";

// Kept for backwards compatibility with older versions of Hardhat and Truffle plugins.
contract AdminUpgradeabilityProxy is TransparentUpgradeableProxy {
    constructor(address logic, address admin, bytes memory data) payable TransparentUpgradeableProxy(logic, admin, data) {}
}

File 2 of 13 : ERC1967Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../Proxy.sol";
import "./ERC1967Upgrade.sol";

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 */
contract ERC1967Proxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
     *
     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
     * function call, and allows initializating the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeToAndCall(_logic, _data, false);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        return ERC1967Upgrade._getImplementation();
    }
}

File 3 of 13 : TransparentUpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC1967/ERC1967Proxy.sol";

/**
 * @dev This contract implements a proxy that is upgradeable by an admin.
 *
 * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
 * clashing], which can potentially be used in an attack, this contract uses the
 * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
 * things that go hand in hand:
 *
 * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
 * that call matches one of the admin functions exposed by the proxy itself.
 * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
 * implementation. If the admin tries to call a function on the implementation it will fail with an error that says
 * "admin cannot fallback to proxy target".
 *
 * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
 * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
 * to sudden errors when trying to call a function from the proxy implementation.
 *
 * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
 * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.
 */
contract TransparentUpgradeableProxy is ERC1967Proxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _changeAdmin(admin_);
    }

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _getAdmin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        _changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external ifAdmin {
        _upgradeToAndCall(newImplementation, bytes(""), false);
    }

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address) {
        return _getAdmin();
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

File 4 of 13 : ProxyAdmin.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./TransparentUpgradeableProxy.sol";
import "../../access/Ownable.sol";

/**
 * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an
 * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.
 */
contract ProxyAdmin is Ownable {

    /**
     * @dev Returns the current implementation of `proxy`.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
        // We need to manually run the static call since the getter cannot be flagged as view
        // bytes4(keccak256("implementation()")) == 0x5c60da1b
        (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b");
        require(success);
        return abi.decode(returndata, (address));
    }

    /**
     * @dev Returns the current admin of `proxy`.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
        // We need to manually run the static call since the getter cannot be flagged as view
        // bytes4(keccak256("admin()")) == 0xf851a440
        (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440");
        require(success);
        return abi.decode(returndata, (address));
    }

    /**
     * @dev Changes the admin of `proxy` to `newAdmin`.
     *
     * Requirements:
     *
     * - This contract must be the current admin of `proxy`.
     */
    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {
        proxy.changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {
        proxy.upgradeTo(implementation);
    }

    /**
     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See
     * {TransparentUpgradeableProxy-upgradeToAndCall}.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {
        proxy.upgradeToAndCall{value: msg.value}(implementation, data);
    }
}

File 5 of 13 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback () external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive () external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {
    }
}

File 6 of 13 : ERC1967Upgrade.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;

import "../beacon/IBeacon.sol";
import "../../utils/Address.sol";
import "../../utils/StorageSlot.sol";

/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 *
 * _Available since v4.1._
 *
 * @custom:oz-upgrades-unsafe-allow delegatecall
 */
abstract contract ERC1967Upgrade {
    // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Returns the current implementation address.
     */
    function _getImplementation() internal view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
    }

    /**
     * @dev Perform implementation upgrade
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Perform implementation upgrade with additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCallSecure(address newImplementation, bytes memory data, bool forceCall) internal {
        address oldImplementation = _getImplementation();

        // Initial upgrade and setup call
        _setImplementation(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }

        // Perform rollback test if not already in progress
        StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT);
        if (!rollbackTesting.value) {
            // Trigger rollback using upgradeTo from the new implementation
            rollbackTesting.value = true;
            Address.functionDelegateCall(
                newImplementation,
                abi.encodeWithSignature(
                    "upgradeTo(address)",
                    oldImplementation
                )
            );
            rollbackTesting.value = false;
            // Check rollback was effective
            require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades");
            // Finally reset to the new implementation and log the upgrade
            _setImplementation(newImplementation);
            emit Upgraded(newImplementation);
        }
    }

    /**
     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
     *
     * Emits a {BeaconUpgraded} event.
     */
    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {
        _setBeacon(newBeacon);
        emit BeaconUpgraded(newBeacon);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
        }
    }

    /**
     * @dev Storage slot with the admin of the contract.
     * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @dev Returns the current admin.
     */
    function _getAdmin() internal view returns (address) {
        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        require(newAdmin != address(0), "ERC1967: new admin is the zero address");
        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     */
    function _changeAdmin(address newAdmin) internal {
        emit AdminChanged(_getAdmin(), newAdmin);
        _setAdmin(newAdmin);
    }

    /**
     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
     */
    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;

    /**
     * @dev Emitted when the beacon is upgraded.
     */
    event BeaconUpgraded(address indexed beacon);

    /**
     * @dev Returns the current beacon.
     */
    function _getBeacon() internal view returns (address) {
        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;
    }

    /**
     * @dev Stores a new beacon in the EIP1967 beacon slot.
     */
    function _setBeacon(address newBeacon) private {
        require(
            Address.isContract(newBeacon),
            "ERC1967: new beacon is not a contract"
        );
        require(
            Address.isContract(IBeacon(newBeacon).implementation()),
            "ERC1967: beacon implementation is not a contract"
        );
        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;
    }
}

File 7 of 13 : IBeacon.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This is the interface that {BeaconProxy} expects of its beacon.
 */
interface IBeacon {
    /**
     * @dev Must return an address that can be used as a delegate call target.
     *
     * {BeaconProxy} will check that this address is a contract.
     */
    function implementation() external view returns (address);
}

File 8 of 13 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 9 of 13 : StorageSlot.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

File 10 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^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 {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 11 of 13 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 12 of 13 : UUPSUpgradeable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC1967/ERC1967Upgrade.sol";

/**
 * @dev Base contract for building openzeppelin-upgrades compatible implementations for the {ERC1967Proxy}. It includes
 * publicly available upgrade functions that are called by the plugin and by the secure upgrade mechanism to verify
 * continuation of the upgradability.
 *
 * The {_authorizeUpgrade} function MUST be overridden to include access restriction to the upgrade mechanism.
 *
 * _Available since v4.1._
 */
abstract contract UUPSUpgradeable is ERC1967Upgrade {
    function upgradeTo(address newImplementation) external virtual {
        _authorizeUpgrade(newImplementation);
        _upgradeToAndCallSecure(newImplementation, bytes(""), false);
    }

    function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual {
        _authorizeUpgrade(newImplementation);
        _upgradeToAndCallSecure(newImplementation, data, true);
    }

    function _authorizeUpgrade(address newImplementation) internal virtual;
}

File 13 of 13 : Proxiable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";

abstract contract Proxiable is UUPSUpgradeable {
    function _authorizeUpgrade(address newImplementation) internal override {
        _beforeUpgrade(newImplementation);
    }

    function _beforeUpgrade(address newImplementation) internal virtual;
}

contract ChildOfProxiable is Proxiable {
    function _beforeUpgrade(address newImplementation) internal virtual override {}
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

6080604052604051610772380380610772833981016040819052610022916102f7565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61040f565b60008051602061072b8339815191521461007757634e487b7160e01b600052600160045260246000fd5b6100838282600061008a565b5050610474565b610093836100f4565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806100d45750805b156100ef576100ed83836101b460201b6100291760201c565b505b505050565b610107816101e060201b6100551760201c565b61016e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b8061019360008051602061072b83398151915260001b6101e660201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606101d9838360405180606001604052806027815260200161074b602791396101e9565b9392505050565b3b151590565b90565b6060833b6102485760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610165565b600080856001600160a01b03168560405161026391906103c0565b600060405180830381855af49150503d806000811461029e576040519150601f19603f3d011682016040523d82523d6000602084013e6102a3565b606091505b5090925090506102b48282866102be565b9695505050505050565b606083156102cd5750816101d9565b8251156102dd5782518084602001fd5b8160405162461bcd60e51b815260040161016591906103dc565b60008060408385031215610309578182fd5b82516001600160a01b038116811461031f578283fd5b60208401519092506001600160401b038082111561033b578283fd5b818501915085601f83011261034e578283fd5b8151818111156103605761036061045e565b604051601f8201601f19908116603f011681019083821181831017156103885761038861045e565b816040528281528860208487010111156103a0578586fd5b6103b1836020830160208801610432565b80955050505050509250929050565b600082516103d2818460208701610432565b9190910192915050565b60006020825282518060208401526103fb816040850160208701610432565b601f01601f19169190910160400192915050565b60008282101561042d57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561044d578181015183820152602001610435565b838111156100ed5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104836000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b600060208252825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209b8470f06e8a3960c912103fc2be177edaad69584ee3c7d2809ee737e79408e764736f6c63430008020033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000adb40002e5ef3792eed3852244218515f53a4f54000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

486:830:1:-:0;;;;;;2835:11:3;:9;:11::i;:::-;486:830:1;;2611:11:3;2257:110;2332:28;2342:17;:15;:17::i;:::-;2332:9;:28::i;:::-;2257:110::o;6276:198:8:-;6359:12;6390:77;6411:6;6419:4;6390:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6383:84;6276:198;-1:-1:-1;;;6276:198:8:o;718:413::-;1078:20;1116:8;;;718:413::o;1542:147:10:-;1669:4;1645:38::o;1174:140:1:-;1241:12;1272:35;901:66:2;1251:54;-1:-1:-1;;;;;1251:54:2;;1172:140;1272:35:1;1265:42;;1174:140;:::o;883:895:3:-;1277:14;1274:1;1271;1258:34;1491:1;1488;1472:14;1469:1;1453:14;1446:5;1433:60;1567:16;1564:1;1561;1546:38;1605:6;1672:38;;;;1743:16;1740:1;1733:27;1672:38;1691:16;1688:1;1681:27;6660:417:8;6771:12;1078:20;;6795:69;;;;-1:-1:-1;;;6795:69:8;;883:2:13;6795:69:8;;;865:21:13;922:2;902:18;;;895:30;961:34;941:18;;;934:62;-1:-1:-1;;;1012:18:13;;;1005:36;1058:19;;6795:69:8;;;;;;;;;6935:12;6949:23;6976:6;-1:-1:-1;;;;;6976:19:8;6996:4;6976:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6934:67;;;;7018:52;7036:7;7045:10;7057:12;7018:17;:52::i;:::-;7011:59;6660:417;-1:-1:-1;;;;;;6660:417:8:o;7083:725::-;7198:12;7226:7;7222:580;;;-1:-1:-1;7256:10:8;7249:17;;7222:580;7367:17;;:21;7363:429;;7625:10;7619:17;7685:15;7672:10;7668:2;7664:19;7657:44;7574:145;7764:12;7757:20;;-1:-1:-1;;;7757:20:8;;;;;;;;:::i;14:274:13:-;;181:6;175:13;197:53;243:6;238:3;231:4;223:6;219:17;197:53;:::i;:::-;266:16;;;;;151:137;-1:-1:-1;;151:137:13:o;293:383::-;;442:2;431:9;424:21;474:6;468:13;517:6;512:2;501:9;497:18;490:34;533:66;592:6;587:2;576:9;572:18;567:2;559:6;555:15;533:66;:::i;:::-;660:2;639:15;-1:-1:-1;;635:29:13;620:45;;;;667:2;616:54;;414:262;-1:-1:-1;;414:262:13:o;1088:258::-;1160:1;1170:113;1184:6;1181:1;1178:13;1170:113;;;1260:11;;;1254:18;1241:11;;;1234:39;1206:2;1199:10;1170:113;;;1301:6;1298:1;1295:13;1292:2;;;1336:1;1327:6;1322:3;1318:16;1311:27;1292:2;;1141:205;;;:::o

Swarm Source

ipfs://9b8470f06e8a3960c912103fc2be177edaad69584ee3c7d2809ee737e79408e7
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.