Contract 0x0239b96d10a434a56cc9e09383077a0490cf9398 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3fd6f863f45b64a796be6c2605e885fbcac7d6a18ed379042bcc2fcfb8c9bce50x6fe958d8217590902023-10-05 0:00:362 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002765252
0x2396c32f8e55a9c7b4b684f6cd014cc774cb6f13583eb495e2648e414ea31a7f0x6fe958d8217590892023-10-05 0:00:312 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779385
0x38a3a8af4f78f4f449af4999bcb445545863243422ad09e71c2a657e25a8a1110x6fe958d8217590892023-10-05 0:00:312 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779231
0x43a998a8711995dfc3cf3d9cc7060d1eb4106813b326a400706abc8a908f3d980x6fe958d8217590892023-10-05 0:00:312 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779315
0x6384922f18d20b04fcf9322c5fb626588d0f79833e9238b4a4bcda0f1b17c4bf0x6fe958d8217590892023-10-05 0:00:312 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779315
0x6840c5ad698709126a3c05c5d6ac71b58c290a4d15ee71bc3328aed51fd342840x6fe958d8217590892023-10-05 0:00:312 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779315
0xe4657babfb94387baa9ca112b4232a44c87b83e380ac95072bea5ed859e092140x6fe958d8217590892023-10-05 0:00:312 hrs 42 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002899015
0xca1a2de96eea02d1e172fe315e0506db40a2f628343d89b3934970759abe054cWithdraw217553992023-10-04 18:53:017 hrs 49 mins ago0xe3023a2232541b00124f0411759c858a6ad5b2be IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.0112971
0xaaf4bcdd93b160192a144516f16fe2b42382e6afac104360fde9e9118abeea9d0xbc4d3bb3217552252023-10-04 18:38:318 hrs 4 mins ago0xfade4d4dd226240f9039022947ad95ded6ff4d4f IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.014313675
0x68215d225e5adc3465f85a7a6f1607f516f494dbaf15d08e629c29d5d1719f6e0xb0ef81de217536012023-10-04 16:23:1110 hrs 19 mins ago0x21ecc6113bfa08c428ca11bae55ba038fca0e7da IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.00328682
0x82126622a76a52373c26d3bd0f0efa4be2c1026485d8d31a40cef7bbc98d90430xbc4d3bb3217535772023-10-04 16:21:1110 hrs 21 mins ago0x21ecc6113bfa08c428ca11bae55ba038fca0e7da IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.00449814
0x7a065f98fbdefb24acfb3ec3dc43b12da70a34a573000d2f9ca4b7e95719bbdd0xb0ef81de217535052023-10-04 16:15:1110 hrs 27 mins ago0x21ecc6113bfa08c428ca11bae55ba038fca0e7da IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.00339482
0x464c4e3284caf8063c4129a0343756f7178afa09fd88c74f77ccb1848aae3dcb0x6fe958d8217534602023-10-04 16:11:2610 hrs 31 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779315
0x99bc008e1e37b2d999bb82ae78e849d0ed749dff4b82a7329b6e94b1f9ddd50e0x6fe958d8217534602023-10-04 16:11:2610 hrs 31 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779385
0xefc91e6542ca22ae26c1fc6352f8c27bb2ac9ce131efcd1c97cdb230f1e6acf70x6fe958d8217534602023-10-04 16:11:2610 hrs 31 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779385
0xe0e2216495d15562547950ada2d85caf6a558de7e9a88198e1d0a2b02abf5d490x6fe958d8217534602023-10-04 16:11:2610 hrs 31 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779301
0x6ce048dd06d9af7fa7d3e6c6cb260ceff5bb427233fb7136c21145ddf9cb548e0x6fe958d8217534602023-10-04 16:11:2610 hrs 31 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002779385
0x6586f2712523b3281a1c5a110982f30b1edbca828efa46cc963cd25561889ef90x6fe958d8217534592023-10-04 16:11:2110 hrs 31 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002899085
0x21890eff715322a4c5d9e405ac4ae8dfbd7c0c22728c95982d17e9c62358080bDeposit217534562023-10-04 16:11:0610 hrs 31 mins ago0x7a0b072da2b94d66f83d9e75d1f26aaa17672dac IN  0x0239b96d10a434a56cc9e09383077a0490cf9398603.247299999999983 CELO0.00501575
0x78a82e90254978a5f94f140b696f47a60ba5c36c0c674864f53a8bd575a20cbc0xb0ef81de217533342023-10-04 16:00:5610 hrs 41 mins ago0x21ecc6113bfa08c428ca11bae55ba038fca0e7da IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.00336682
0x846e48404cd729654f20ab260355a357f4167d3989c322d475c54a6ef88b64f80xb0ef81de217532072023-10-04 15:50:2110 hrs 52 mins ago0x21ecc6113bfa08c428ca11bae55ba038fca0e7da IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.00328682
0xd9acdf3dd7c2d67c06f65b24ce578b2fbde42ac5f3bdcbf096ac7e11d8461b700xbc4d3bb3217531752023-10-04 15:47:4110 hrs 55 mins ago0x21ecc6113bfa08c428ca11bae55ba038fca0e7da IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.00600558
0x57bddea05013d4e6b4a008559c927d8d8989925e211a041796e9d84ec3a0ad510x6fe958d8217526922023-10-04 15:07:2611 hrs 35 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002642815
0x60309b34796b2f0dad8e5e4faef6cd4d9f990a3f5f05d7630b0dcace2d2f3e780x6fe958d8217526922023-10-04 15:07:2611 hrs 35 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002762431
0x3f86f360ec0b1cbbee0d0834bacbb3e1d0365db00884d4b566daa4224fe0baf40x6fe958d8217526922023-10-04 15:07:2611 hrs 35 mins ago0xeb350f3c0d8519ff63540c6f26950935f5b93efa IN  0x0239b96d10a434a56cc9e09383077a0490cf93980 CELO0.002642885
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x21890eff715322a4c5d9e405ac4ae8dfbd7c0c22728c95982d17e9c62358080b217534562023-10-04 16:11:0610 hrs 31 mins ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c432603.247299999999983616 CELO
0xb9bf37a6fa99a96762338d6a73370645588ead61f4d49161c9f2f7c5053b77f3217518612023-10-04 13:58:1112 hrs 44 mins ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4325 CELO
0xe584972825e3b8f1bfa50526a57cea7af59b63d065cc37245e37b89143ef980e217493912023-10-04 10:32:2016 hrs 10 mins ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4323 CELO
0x22ffae7ee25342eeafb991a11ebae74dd5bd57940ad55dae764341bc221e63e9217472852023-10-04 7:36:5019 hrs 5 mins ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43210 CELO
0xf323f5f78f6f8e8f781457ff59726f2897ee099cd0baad31cfccccd51b1009c1217180722023-10-02 15:02:232 days 11 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43241,999.999999999995805696 CELO
0x8c48287ac0475fbd6e165f21010cc5451a541bf64693ad4a5a03e5d7794ce21b217167752023-10-02 13:14:182 days 13 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4321 CELO
0x9d3999588318fc6008b7c2f10cc11e561f7c3181f8fe55088a4980111edbad5f216993892023-10-01 13:05:243 days 13 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4320.12 CELO
0x942d4dface2feec2f72291e4e73b263ec9b1a1d5f70ae2e51f1d67f1f3e27349216980242023-10-01 11:11:393 days 15 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c432190 CELO
0x0e42c1190a833685124a616a2ced88c68f1d73b57e318c7456aec2a42e76a7bf216937182023-10-01 5:12:493 days 21 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4325 CELO
0x772bb59f8baba4f10de349447c71db25644683d8f290b7ef3756abc6587e0d2d216710932023-09-29 21:47:245 days 4 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4324,518 CELO
0x852381776cb0b6d2d9e834368af2ce63f72a414b279ccd759c4bd55975eaa061216641442023-09-29 12:08:195 days 14 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4323.1084 CELO
0x57576492fa5dac20e0e4ac954571932577f36fae194154c72721d51cf516b9be216628072023-09-29 10:16:545 days 16 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c432366 CELO
0x25f6e4511ed0839dd00503b515d8e463491b4692cd8d57b62218d6d8b8228b0b216603782023-09-29 6:54:295 days 19 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4322,158 CELO
0xb2c144f1920e09f28e667bf2d247439cc020fddf2e5989240e1b571dbb1f0c00216584892023-09-29 4:17:045 days 22 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43252.6 CELO
0x5fe9401e73e196e94c0cd8081905068a574d6b5c771abc0abbef829e44b74814216478962023-09-28 13:34:196 days 13 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4323 CELO
0x30ce563e43b191dbe53b5913622e330ab8823c00bc3d4091a64fe13970812ce2216478882023-09-28 13:33:396 days 13 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43225 CELO
0x030b78635848ead42cbeac58ec0e766a9d9b24b803901191232b06e663af01db216417362023-09-28 5:00:596 days 21 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43251.5 CELO
0x0386bec6e9b351e4b6ce0735c9b9b87be14733fa1c269fa902fa516040b78c9a216181322023-09-26 20:13:568 days 6 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c432273.040300000000016384 CELO
0xfd8f9ee09e3d07e57517008e16ed0ada11613a9b3e9df8d94a74478115d5da1f215979302023-09-25 16:10:159 days 10 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4324.64 CELO
0xf4cf6ce97afb523005e83846bc59eae2f977a163950ccd6accb7b9e3cdb6ca9f215972512023-09-25 15:13:409 days 11 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43291 CELO
0x184cf5f8bcd10ca96e7a9b8d2c069a9211e8fa490f08ecd23af799994d99732c215964342023-09-25 14:05:359 days 12 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c432203 CELO
0xdbbbf81589f0afe3f5dfca3e811c62b7911726fba81b2ac65f51c022b9440992215959602023-09-25 13:26:059 days 13 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4320.1 CELO
0x3e066b985328dc85d94369cd8a2cd1eb27cf4c050ef5aba4f37c03e882af18da215924882023-09-25 8:36:459 days 18 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c43242.6876 CELO
0xa743d1cd4021240023d88f7f612d1e662c7199a4d7830cdd5ea649aca0d3f63e215831502023-09-24 19:38:3410 days 7 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c4327.5 CELO
0x32b7aeb7cd2ea7b8c59bd3ad54baa43bd4e7c8d19c59ec19ff73e27b31102150215831432023-09-24 19:37:5910 days 7 hrs ago 0x0239b96d10a434a56cc9e09383077a0490cf9398 0x4aad04d41fd7fd495503731c5a2579e19054c432130 CELO
[ Download CSV Export 
Index Block
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
This contract matches the deployed ByteCode of the Source Code for Contract 0x78daa21fce4d30e74ff745da3204764a0ad40179
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
ERC1967Proxy

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : ERC1967Proxy.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)

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 2 of 6 : Proxy.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/Proxy.sol)

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 {
        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 3 of 6 : ERC1967Upgrade.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Upgrade.sol)

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 {
        _upgradeTo(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
            _upgradeTo(newImplementation);
        }
    }

    /**
     * @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;
    }

    /**
     * @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);
        }
    }
}

File 4 of 6 : IBeacon.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)

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 5 of 6 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

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;
        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");

        (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");

        (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");

        (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");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 6 of 6 : StorageSlot.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)

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
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "metadata": {
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

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"}]

608060405260405162000d6638038062000d668339818101604052810190620000299190620005c4565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6200005b919062000663565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b146200009357620000926200069e565b5b620000a782826000620000af60201b60201c565b5050620008e4565b620000c083620000f260201b60201c565b600082511180620000ce5750805b15620000ed57620000eb83836200014960201b620000371760201c565b505b505050565b62000103816200017f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606062000177838360405180606001604052806027815260200162000d3f602791396200025560201b60201c565b905092915050565b62000195816200033960201b620000641760201c565b620001d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ce9062000754565b60405180910390fd5b80620002117f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200034c60201b620000771760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606062000268846200033960201b60201c565b620002aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a190620007ec565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002d491906200085b565b600060405180830381855af49150503d806000811462000311576040519150601f19603f3d011682016040523d82523d6000602084013e62000316565b606091505b50915091506200032e8282866200035660201b60201c565b925050509392505050565b600080823b905060008111915050919050565b6000819050919050565b606083156200036857829050620003bb565b6000835111156200037c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b29190620008c0565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040382620003d6565b9050919050565b6200041581620003f6565b81146200042157600080fd5b50565b60008151905062000435816200040a565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004908262000445565b810181811067ffffffffffffffff82111715620004b257620004b162000456565b5b80604052505050565b6000620004c7620003c2565b9050620004d5828262000485565b919050565b600067ffffffffffffffff821115620004f857620004f762000456565b5b620005038262000445565b9050602081019050919050565b60005b838110156200053057808201518184015260208101905062000513565b8381111562000540576000848401525b50505050565b60006200055d6200055784620004da565b620004bb565b9050828152602081018484840111156200057c576200057b62000440565b5b6200058984828562000510565b509392505050565b600082601f830112620005a957620005a86200043b565b5b8151620005bb84826020860162000546565b91505092915050565b60008060408385031215620005de57620005dd620003cc565b5b6000620005ee8582860162000424565b925050602083015167ffffffffffffffff811115620006125762000611620003d1565b5b620006208582860162000591565b9150509250929050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000670826200062a565b91506200067d836200062a565b92508282101562000693576200069262000634565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006200073c602d83620006cd565b91506200074982620006de565b604082019050919050565b600060208201905081810360008301526200076f816200072d565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000620007d4602683620006cd565b9150620007e18262000776565b604082019050919050565b600060208201905081810360008301526200080781620007c5565b9050919050565b600081519050919050565b600081905092915050565b600062000831826200080e565b6200083d818562000819565b93506200084f81856020860162000510565b80840191505092915050565b600062000869828462000824565b915081905092915050565b600081519050919050565b60006200088c8262000874565b620008988185620006cd565b9350620008aa81856020860162000510565b620008b58162000445565b840191505092915050565b60006020820190508181036000830152620008dc81846200087f565b905092915050565b61044b80620008f46000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610081565b610035610030610083565b610092565b565b606061005c83836040518060600160405280602781526020016103ef602791396100b8565b905092915050565b600080823b905060008111915050919050565b6000819050919050565b565b600061008d610185565b905090565b3660008037600080366000845af43d6000803e80600081146100b3573d6000f35b3d6000fd5b60606100c384610064565b610102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f9906102c6565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161012a9190610360565b600060405180830381855af49150503d8060008114610165576040519150601f19603f3d011682016040523d82523d6000602084013e61016a565b606091505b509150915061017a8282866101dc565b925050509392505050565b60006101b37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610077565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156101ec5782905061023c565b6000835111156101ff5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023391906103cc565b60405180910390fd5b9392505050565b600082825260208201905092915050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006102b0602683610243565b91506102bb82610254565b604082019050919050565b600060208201905081810360008301526102df816102a3565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561031a5780820151818401526020810190506102ff565b83811115610329576000848401525b50505050565b600061033a826102e6565b61034481856102f1565b93506103548185602086016102fc565b80840191505092915050565b600061036c828461032f565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b600061039e82610377565b6103a88185610243565b93506103b88185602086016102fc565b6103c181610382565b840191505092915050565b600060208201905081810360008301526103e68184610393565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209457a4363b8ceefcc071a165d644195592736cc3d4aa4dea601cf19529a7e0fa64736f6c634300080b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000b78ab3f89c97c0291b747c3ba8814b5aa47aecf1000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001245eae7959000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000093a800000000000000000000000000000000000000000000000000000000000000005000000000000000000000000256f4b1f578cd7beaa440429cafb5ad21abf6fd300000000000000000000000091f2437f5c8e7a3879e14a75a7c5b4cccc76023a0000000000000000000000003784a50f16af1c135b741914449bea4afdb0c5c40000000000000000000000001f5979355411df24c5ce21df5bd9f2fff418c1940000000000000000000000004d82bfc8823a4f3af82b0ade52ff3e2d74a0475700000000000000000000000000000000000000000000000000000000

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