Contract 0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe12ecfc5f267878ad3c7145e7c45e461dce58d355ab8e8c7647233061044fe83Deposit47919132022-09-25 5:00:041 min ago0x1433a0bf8d7631cf4072e98b073d2f2f0d916253 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.070003802690
0xfd4085c9b58a45161739cb0b039c4338383e382fdb430a8c6455424817189dceDeposit47917732022-09-25 4:46:4815 mins ago0x9d14c468808da81c231e2a6e384c02485b8cbaf9 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO2.0146897341040
0xcb02a8a6d498bfb71a3f4f9e40ba7f2dd488e8a447be604bcfc342433cedbdaeDeposit47917422022-09-25 4:43:5117 mins ago0x9d14c468808da81c231e2a6e384c02485b8cbaf9 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0700055631840
0x0f498c961317737396b0b114bce9a11b56fad0aa49d25984c927b563c352ed73Deposit47917332022-09-25 4:43:0118 mins ago0xf9cfc76b4a76ff56e9f63a7de8253506fc0aecdf IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.1436775476070
0xe92c47286088029c8dff036679b585e5aed12258b6132c385dc69068dc597e0eDeposit47916972022-09-25 4:39:3722 mins ago0x5ff6e5599e1f617297f5a6b550c0179441a6ef1d IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO2.041078139262 4,975.787878319
0x8b73d828f43a065cd98a5d419fe0b949bbaf4b80ee335b8049293342bf3962b4Deposit47916842022-09-25 4:38:2323 mins ago0x5ff6e5599e1f617297f5a6b550c0179441a6ef1d IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.146104531922 4,921.882048459
0x27fc5b8245a9b5dae34b4c87f1c0535171ee7bf4d6bcf5748bc744d06d28ceffBatch Withdraw47916672022-09-25 4:36:4725 mins ago0x5c6d1d5fd13122839a2eab4f5e09cdcc4e825ef7 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.3729649997410
0x0dfecdea192b62e6282eee847d722a50bb9b84c39f17392b44de543518be94f4Deposit47916392022-09-25 4:34:0827 mins ago0x8dd6a41054521c21aed557f9cc47e9409dcbd03c IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.1642950
0x6e4ac14487cd8e269c5c823c7fde2bce47e7adb0700e9f8e905d6c41567b867cDeposit47916262022-09-25 4:32:5428 mins ago0x3dd89e5db093e3cb88d14dc9a9f6bd75e0f1db31 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.1436787050470
0xf3519be92ff32649c8790eb8d11371404160bbf2ce304dc40b37563eaa7fc0c6Deposit47915772022-09-25 4:28:1833 mins ago0x37451c202aec2e3f11d4334551ffe94e4438e87b IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.1436792446490
0x2de79ad4b94e728b9b3b829a476d84fec85c08efa5d48acf13dccf5eee6fb40fDeposit47915272022-09-25 4:23:3538 mins ago0x434442a2a7a70a68fdcfe0b1bd97f1bb852b3ebd IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.144145471429 4,913.468972336
0xe0cf343cfd0c9f593acba40e27a06a3219442f1556ffd8d4ad9120a0da435588Deposit47915192022-09-25 4:22:4939 mins ago0x5be4a5705e4fd2e842b3f95bbd24e1b2776e7cc2 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO2.051010
0xf84dd7fa058bcb123ec7f360b927688d396b0b2442861aa8b33d9aced78925a0Deposit47914932022-09-25 4:20:2241 mins ago0x5be4a5705e4fd2e842b3f95bbd24e1b2776e7cc2 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
0xdb2cf7870c2269f8a9caba832b7def5efb80652ee3081a0b859682529171b450Deposit47914662022-09-25 4:17:5044 mins ago0x5d13a2e98e09947a74aa3b2354cb4456739b3814 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
0xebbbdc3c09d99399e6c8fb59eb63b2ea9229e8798d86bdb20364093f25945847Deposit47914442022-09-25 4:15:4446 mins ago0x3dc938104a0b8a3a5f093719d89976867db3ba03 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.976010
0x39eb815dd14666f37667216178a6e742d352bd22e1395f2ea238941fac1d319aDeposit47914372022-09-25 4:15:0446 mins ago0x3dc938104a0b8a3a5f093719d89976867db3ba03 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.1642950
0x10e46d933c2560bb2b27705534d644819614d928e56dffac64cac3f2be0621f5Deposit47914002022-09-25 4:11:3550 mins ago0xeb14190ecfe184a4b65adfff2b28ba423dec3935 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
0xa440fc8b3912fb5461b2eea4bd55cbd545f56d33c167906be2faa6cc2a2d6c04Deposit47913782022-09-25 4:09:3052 mins ago0xb42cdab797f5d9e50d2276451a7463a9e5ce5c5a IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
0x94e6eeeff0afa4716aa08b22f44bd0270f35c9ef47b9485969c6f5bf887a893cDeposit47913742022-09-25 4:09:0752 mins ago0xeb14190ecfe184a4b65adfff2b28ba423dec3935 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO0.472570
0x812c493c4d9da8cfe0f0b857c6be4e8f7408eca063e264048f903f43d557dc80Deposit47913712022-09-25 4:08:5152 mins ago0x688aad2ffb4075d12e4adac2558feb3f915c2c95 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
0x502a1e7de5db9feadab9397c4c0c037b97f8231f06d69e25314689947f37a98eDeposit47912682022-09-25 3:59:061 hr 2 mins ago0xf4997a1a60c9d06a82b0b1c876f069061b0abd08 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.1436826318380
0x0576fcd14ddabf035c2bdd38dc98fabc4189b1e5ab4980af0e5f009a2e9e3222Batch Upgrade47912282022-09-25 3:55:181 hr 6 mins ago0x3dc938104a0b8a3a5f093719d89976867db3ba03 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.513930
0x19569f81b8d2be3b32c7c1a04c9d6807e3a6f88c2e5d3a5ef61f22e92dbe625bDeposit47912202022-09-25 3:54:331 hr 7 mins ago0x3dc938104a0b8a3a5f093719d89976867db3ba03 IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
0x85430237ce3a61054e8b49096b4befcc0803ccde8026e3e19d029470ec3d68ecDeposit47912062022-09-25 3:53:141 hr 8 mins ago0x125647e5f06f49f25caec6eb41b9a3c40059e90a IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO2.051010
0xf81fe2b0486e4ade053f986754eda333d8fd5ee772920f4a548e414a5da153ebDeposit47911942022-09-25 3:52:061 hr 9 mins ago0x125647e5f06f49f25caec6eb41b9a3c40059e90a IN  0xcf3e157e2491f7d739f8923f6ceaa4656e64c92e0 CRO1.0892950
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

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

Contract Name:
ERC1967Proxy

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-18
*/

// File contracts/proxy/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 contracts/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 contracts/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;
        // 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 contracts/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
        }
    }
}


// File contracts/proxy/ERC1967/ERC1967Upgrade.sol

pragma solidity ^0.8.2;



/**
 * @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 contracts/proxy/ERC1967/ERC1967Proxy.sol

pragma solidity ^0.8.0;


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

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

6080604052604051610772380380610772833981016040819052610022916102f7565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61040f565b60008051602061072b8339815191521461007757634e487b7160e01b600052600160045260246000fd5b6100838282600061008a565b5050610474565b610093836100f4565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806100d45750805b156100ef576100ed83836101b460201b6100291760201c565b505b505050565b610107816101e060201b6100551760201c565b61016e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b8061019360008051602061072b83398151915260001b6101e660201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606101d9838360405180606001604052806027815260200161074b602791396101e9565b9392505050565b3b151590565b90565b6060833b6102485760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610165565b600080856001600160a01b03168560405161026391906103c0565b600060405180830381855af49150503d806000811461029e576040519150601f19603f3d011682016040523d82523d6000602084013e6102a3565b606091505b5090925090506102b48282866102be565b9695505050505050565b606083156102cd5750816101d9565b8251156102dd5782518084602001fd5b8160405162461bcd60e51b815260040161016591906103dc565b60008060408385031215610309578182fd5b82516001600160a01b038116811461031f578283fd5b60208401519092506001600160401b038082111561033b578283fd5b818501915085601f83011261034e578283fd5b8151818111156103605761036061045e565b604051601f8201601f19908116603f011681019083821181831017156103885761038861045e565b816040528281528860208487010111156103a0578586fd5b6103b1836020830160208801610432565b80955050505050509250929050565b600082516103d2818460208701610432565b9190910192915050565b60006020825282518060208401526103fb816040850160208701610432565b601f01601f19169190910160400192915050565b60008282101561042d57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561044d578181015183820152602001610435565b838111156100ed5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104836000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b600060208252825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209b8470f06e8a3960c912103fc2be177edaad69584ee3c7d2809ee737e79408e764736f6c63430008020033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000a1fc967fda140da8ee241cca5191c746d818f75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c4728cdbca000000000000000000000000b9a81e121d8c9d619682bb9ddb6823439178f2f8000000000000000000000000b9a81e121d8c9d619682bb9ddb6823439178f2f80000000000000000000000005bd97307a40dfbfdbaef4b3d997adb816f2dadcc00000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000009fdf42f6e480000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

21600:848:0:-:0;;;;;;2943:11;:9;:11::i;:::-;21600:848;;2711:11;2347:113;2424:28;2434:17;:15;:17::i;:::-;2424:9;:28::i;:::-;2347:113::o;10164:200::-;10247:12;10279:77;10300:6;10308:4;10279:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;10272:84;10164:200;-1:-1:-1;;;10164:200:0:o;4479:422::-;4846:20;4885:8;;;4479:422::o;13340:151::-;13469:4;13444:40::o;22303:142::-;22370:12;22402:35;15102:66;15463:54;-1:-1:-1;;;;;15463:54:0;;15383:142;22402:35;22395:42;;22303:142;:::o;940:915::-;1340:14;1337:1;1334;1321:34;1558:1;1555;1539:14;1536:1;1520:14;1513:5;1500:60;1637:16;1634:1;1631;1616:38;1677:6;1746:38;;;;1818:16;1815:1;1808:27;1746:38;1765:16;1762:1;1755:27;10558:423;10669:12;4846:20;;10694:69;;;;-1:-1:-1;;;10694:69:0;;883:2:1;10694:69:0;;;865:21:1;922:2;902:18;;;895:30;961:34;941:18;;;934:62;-1:-1:-1;;;1012:18:1;;;1005:36;1058:19;;10694:69:0;;;;;;;;;10837:12;10851:23;10878:6;-1:-1:-1;;;;;10878:19:0;10898:4;10878:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10836:67;;;;10921:52;10939:7;10948:10;10960:12;10921:17;:52::i;:::-;10914:59;10558:423;-1:-1:-1;;;;;;10558:423:0:o;10989:742::-;11104:12;11133:7;11129:595;;;-1:-1:-1;11164:10:0;11157:17;;11129:595;11278:17;;:21;11274:439;;11541:10;11535:17;11602:15;11589:10;11585:2;11581:19;11574:44;11489:148;11684:12;11677:20;;-1:-1:-1;;;11677:20:0;;;;;;;;:::i;14:274:1:-;;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:1: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:1;620:45;;;;667:2;616:54;;414:262;-1:-1:-1;;414:262:1: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
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.