Contract 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 25

 

Contract Overview

Wrapped Ether
Balance:
211,495.697752147707009759 ETH

ETH Value:
$645,296,875.41 (@ $3,051.11/ETH)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf17e5677267db3d8669f773fdd5a74c2b4b1779bb2a226206111442188ecf2f8Approve2008325102024-04-14 5:33:203 secs ago0x8b5b947612aad95acdbb70eadf5c2286219f23ed IN  Wrapped Ether0 ETH0.0000007 0.01
0xc19a143c1d1062c5fa7654bf14a3da7b624240638c260baff1a846340cbd1a13Approve2008324392024-04-14 5:33:0221 secs ago0x39b03c65a275b9e81ad74c1249360b7d2ce473a2 IN  Wrapped Ether0 ETH0.0000009 0.01
0x907b97f48ce66cd4bdc07a253228f23c25cfb62b741a561bd14496d50033779cWithdraw2008324382024-04-14 5:33:0221 secs ago0x3553fe5e187bd8e2bad4ef56999b17edfd18a514 IN  Wrapped Ether0 ETH0.00000073 0.01
0xa322f452bdc0e680e1dd2af374bc7c7648f9adc368c6ea7fe14757ac69b62207Deposit2008322842024-04-14 5:32:231 min ago0xd2f613397285f9faa7a5e303b931169856dd9c64 IN  Wrapped Ether0.06988 ETH0.000000820.01
0x151a01568db023a709545b1e15b5e783704d0e6149b4e9d70c9698239da82246Withdraw2008322662024-04-14 5:32:181 min ago0x0b925788742a43c0efd615452ac55a38cbc374f4 IN  Wrapped Ether0 ETH0.000000730.01
0x375bec04d0d5eac74a965627698ba5c0a2573df1dd231b90b4878aa72cb17806Approve2008322622024-04-14 5:32:171 min ago0x7818eccf650d48c6b9f5271945dde5b57b369f5f IN  Wrapped Ether0 ETH0.0000009 0.01
0x591e2a031b0f74be3a5bb37877405d3b08609348044903bba0ee66842347f729Withdraw2008322092024-04-14 5:32:041 min ago0x3169d0021b9d205c5f5b091d42e4bef3a29b374d IN  Wrapped Ether0 ETH0.00000073 0.01
0x495c512177691c9f7f11f719dc51876c58749093139297803ced932ef8ef9a8dApprove2008321282024-04-14 5:31:431 min ago0x3747620be079f042cbcea3c724e726ca2fdd9cc1 IN  Wrapped Ether0 ETH0.0000009 0.01
0x692ba9ee341527d694fd8a27454730d9af492f5b5a6dd5d7c4f79b477b7914d5Deposit2008319872024-04-14 5:31:072 mins ago0x437523ad09601718db4caeb91f6cbc6a83420746 IN  Wrapped Ether0.4 ETH0.000000820.01
0x527fc1eda3e316a04b2cb78ab7eb03fe5ade3a83ca31448bd1615a566af59fdbApprove2008319282024-04-14 5:30:522 mins ago0x0c2556b0643771f4f6ce4ea80fb08957bfe2ed66 IN  Wrapped Ether0 ETH0.0000009 0.01
0x5adacc3009748f9036a83022534de7809401ca578ced4474b9e3b18410e966cfTransfer2008319232024-04-14 5:30:512 mins ago0xcc436d58eb8706b22081399600674408697be173 IN  Wrapped Ether0 ETH0.000000780.01
0xdea2dc87da6bc06cf53da59cfd61192d1f2e7c751693d3a514c76bcb44a1eb58Withdraw2008318912024-04-14 5:30:432 mins ago0xbed50314844499c37de7719bc736207d6a5977b4 IN  Wrapped Ether0 ETH0.000000720.01
0x1613b3d49e43b2e6411365c871848b18056930cc163be070d5c10731d44b53c6Deposit2008318592024-04-14 5:30:352 mins ago0x7818eccf650d48c6b9f5271945dde5b57b369f5f IN  Wrapped Ether0.0005 ETH0.00000083 0.01
0x3a28d696f752a6ab2070280a5b93a9f526c31b33806c86b1f215f306e68bcfb3Approve2008318072024-04-14 5:30:223 mins ago0x0c2556b0643771f4f6ce4ea80fb08957bfe2ed66 IN  Wrapped Ether0 ETH0.0000009 0.01
0x22aafd8cb664e86526260a9a2f11e88ffab6adb5d2f26deb9e2e23cc5d88001bWithdraw2008317032024-04-14 5:29:563 mins ago0x7de11e47a0aa90413938c2b593e4b35008a8c9b7 IN  Wrapped Ether0 ETH0.00000088 0.01
0x5d296fbd10918be467d61f2499ec9706d18f39669a0a517bb05ec901ebafc371Approve2008316342024-04-14 5:29:383 mins ago0x7de11e47a0aa90413938c2b593e4b35008a8c9b7 IN  Wrapped Ether0 ETH0.0000009 0.01
0x0cd272b72b28ea2dd8b19fd9e922fabf320a2a6ab750b5de04b8c1b5f2ae1a0eApprove2008315862024-04-14 5:29:263 mins ago0x9f17db4c1dd81efc9de3b4d4512b464124526a50 IN  Wrapped Ether0 ETH0.0000009 0.01
0x9f31f90145974d319e5fb221b19ee140fa94e7fafe578f2e80b19bafc5273ec2Deposit2008315602024-04-14 5:29:204 mins ago0xa59b5bdc90bc2d91ca59ddc08faf86e5c8981e6f IN  Wrapped Ether0.4 ETH0.000000820.01
0xe01e3360b8ea5e7cbaff65ecd179973f208a4342a36865f7a333cf5379b6aa4cDeposit2008314522024-04-14 5:28:534 mins ago0x2c701a260139fd76db15c3734dc920eb39261452 IN  Wrapped Ether0.38 ETH0.000000650.01
0x881f5f3b9244a2b549bb2644a60818fca2e807be8bfd81a29b21ff83837b3059Withdraw2008314332024-04-14 5:28:484 mins ago0x34f9c0b11e67d72ad65c41ff90a6989846f28c22 IN  Wrapped Ether0 ETH0.00000073 0.01
0x52060d2b5d136483bf1c71c1cca1ccf4d1d091c8ea966390b25c52ccc72e7b0eDeposit2008312722024-04-14 5:28:085 mins ago0x34f9c0b11e67d72ad65c41ff90a6989846f28c22 IN  Wrapped Ether0.415 ETH0.0000008 0.01
0x5cc10298e096fa9676f71f7c87ba8b4586dfda1f3a981a48aee2c42e6ce210fdApprove2008312262024-04-14 5:27:565 mins ago0xe50a6c02d40498fd84710a6e209b90b984857a51 IN  Wrapped Ether0 ETH0.00000068 0.01
0xa0c7354e27c23bb67512a17715a291670a7f20e157f333626f8ebaca9ffb7c1dApprove2008312242024-04-14 5:27:565 mins ago0x3cf16cec209cb4da236e7d7141279c707b3fa964 IN  Wrapped Ether0 ETH0.000000850.01
0x007e24eee7b2bcbb4311a054c3e31215427f99385181079bab81d3837e83aaa0Approve2008311662024-04-14 5:27:415 mins ago0xfc5c74fea523eae3da0b2fb98bf67f259ae5b383 IN  Wrapped Ether0 ETH0.000000620.01
0xa6d6e61c22c2574abc18b7ca80dae37f7e4ac5262e3ac4a274f78d021c58a5dfApprove2008311252024-04-14 5:27:315 mins ago0xfc5c74fea523eae3da0b2fb98bf67f259ae5b383 IN  Wrapped Ether0 ETH0.000000620.01
[ Download CSV Export 

OVERVIEW

wETH is "wrapped ETH"

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x480a76243abb36925fab621b85cd0890d319df729ede821d96935be14533a1722008325112024-04-14 5:33:203 secs ago 0x227dfd9fa88bfe186682f3a45597bac051742e5f Wrapped Ether0.01 ETH
0x10dac4657c71a6d039b538b4c256486b066d46f0fb4e2f92982b042359c6d65d2008325062024-04-14 5:33:194 secs ago Wrapped Ether 0x227dfd9fa88bfe186682f3a45597bac051742e5f0.010346956628138025 ETH
0xe9fc7241ee81ded2220fe2d586ebfafd0c0b7472e625a360d224d58f01a4e5122008325022024-04-14 5:33:185 secs ago Wrapped Ether Across Protocol: Bridge0.001980144020480265 ETH
0x9ed3e99b02d298a682f0085c3a6bf1b71c68256d9659cc4ddf2e51ea7c2877ba2008324952024-04-14 5:33:167 secs ago 0x1bacc2205312534375c8d1801c27d28370656cff Wrapped Ether0.216 ETH
0x84df009b6cfff3002db5cf1f0f33abc4fdb88f1af14f4350acfcae18dd4477172008324892024-04-14 5:33:149 secs ago 0xe37e799d5077682fa0a244d46e5649f71457bd09 Wrapped Ether0.32 ETH
0x20d619582a70d7c116b921833cc9feda894e2acbbc0950bcc5c78841993b5c402008324882024-04-14 5:33:149 secs ago Wrapped Ether HMX : Handlers Limit Trade0.00004 ETH
0xf9c10b7bfd8053bde4f4b06a89f68ce1c6dab604a357daf945deb42929854d3d2008324872024-04-14 5:33:149 secs ago Uniswap: Universal Router 4 Wrapped Ether0.000001 ETH
0x2a498451edf0988d4dc945255beddb3ea5a18972bb1664b5e98046c52209f5592008324792024-04-14 5:33:1211 secs ago 0xe37e799d5077682fa0a244d46e5649f71457bd09 Wrapped Ether0.010418733916178485 ETH
0xb44e0fa63ff9ccd7608936c4663a21bf140ebbbd66c4513a2291c9eaa88b8f6e2008324792024-04-14 5:33:1211 secs ago Uniswap V3: Router 2 Wrapped Ether0.000000706653495465 ETH
0xd49239d606e82fe70481f7a6c819ed5242b60b6a7473db7db857edda7bee4b242008324792024-04-14 5:33:1211 secs ago Wrapped Ether 0xe37e799d5077682fa0a244d46e5649f71457bd090.09956856 ETH
0x04af95997e375b746a6b46c834c0d0ff919caa1474c383352cfac774bf334e942008324752024-04-14 5:33:1112 secs ago HMX : Handlers Limit Trade Wrapped Ether0.00004 ETH
0xe676ecaa7ccb9ab62525b61c3ef195ea3a929925923ce76e7b91887744112c5a2008324742024-04-14 5:33:1112 secs ago Wrapped Ether 0x227dfd9fa88bfe186682f3a45597bac051742e5f0.033284680974141693 ETH
0xe676ecaa7ccb9ab62525b61c3ef195ea3a929925923ce76e7b91887744112c5a2008324742024-04-14 5:33:1112 secs ago 0x96aaf8f6a2e3f45aaf548b753a0e004211e0ad63 Wrapped Ether0.000021899469317971 ETH
0x11ce9a92031c14d149abca188f38b69b6426d294b14971607d0581b925754ac72008324722024-04-14 5:33:1013 secs ago Wrapped Ether 0x8f430dc9604b10f527f7cb8be0f74abf7aed312f0.165061134231428234 ETH
0x568536dc69ed5773f0e431e60bbdc5032c4171b9a2827b88c04e7687c3cd63fd2008324712024-04-14 5:33:1013 secs ago 0x227dfd9fa88bfe186682f3a45597bac051742e5f Wrapped Ether0.21 ETH
0xb4da3fe5427cc4b0f011718befc522914411fbc9ada662a98329c5a74f8932222008324652024-04-14 5:33:0815 secs ago Wrapped Ether 0x8f430dc9604b10f527f7cb8be0f74abf7aed312f0.062075577821904059 ETH
0x46ad5215da8cf77597be5cbd25098cd7f504d7f091a255ca2fb15feb732c3e7e2008324622024-04-14 5:33:0815 secs ago Wrapped Ether 0x8f430dc9604b10f527f7cb8be0f74abf7aed312f0.061752352250230853 ETH
0x0eb17e8fee993cf807dfd01537ab67c4ff939739a9d6a514d55debd8516a2c5e2008324612024-04-14 5:33:0716 secs ago Uniswap: Universal Router 4 Wrapped Ether0.001 ETH
0xee231d85a007b6f944be6b50978a4d6f087ffec79d7e65a620eb036d68833f152008324582024-04-14 5:33:0716 secs ago Across Protocol: Bridge Wrapped Ether0.108 ETH
0x9aebe993d61eb2f4c9077ccb1d8f2c4178f47de6f3e08d3953648b273f8df0282008324552024-04-14 5:33:0617 secs ago Wrapped Ether0xdb41a02d8ed34740a03299d746608fa769f055fb0.000025391278303069 ETH
0xa8877b5f29d050ba721120097f15fe2a8b45a17c90b3eee06d316e73544002f12008324512024-04-14 5:33:0518 secs ago 0x5215e9fd223bc909083fbdb2860213873046e45d Wrapped Ether0.0003972 ETH
0x1e48e6297a23ea1cd914a4c24fdb94366a0e1b7e66a7fc8200c2e67ffe4a75622008324442024-04-14 5:33:0320 secs ago Camelot: Router Wrapped Ether0.0000000975732508 ETH
0x1e48e6297a23ea1cd914a4c24fdb94366a0e1b7e66a7fc8200c2e67ffe4a75622008324442024-04-14 5:33:0320 secs ago Wrapped Ether Camelot: Router0.0000000975732508 ETH
0xf362ea80df9cf0a94d837d9d71e135c5a2fd8504ba37ae2baea9d7ecf3ca3a092008324442024-04-14 5:33:0320 secs ago 0x11ddd59c33c73c44733b4123a86ea5ce57f6e854 Wrapped Ether0.16 ETH
0x3c53902c4b70281567cef76909c2d216df1eade5db1187745c85d3669e6a91332008324422024-04-14 5:33:0320 secs ago 1inch v5: Aggregation Router Wrapped Ether0.0000995 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TransparentUpgradeableProxy

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Arbiscan.io on 2021-09-09
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2 <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);
            }
        }
    }
}


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


/**
 * @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.
 *
 * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see
 * {TransparentUpgradeableProxy}.
 */
contract UpgradeableProxy is Proxy {
    /**
     * @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) public payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _setImplementation(_logic);
        if(_data.length > 0) {
            Address.functionDelegateCall(_logic, _data);
        }
    }

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

    /**
     * @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 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        bytes32 slot = _IMPLEMENTATION_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            impl := sload(slot)
        }
    }

    /**
     * @dev Upgrades the proxy to a new implementation.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal virtual {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "UpgradeableProxy: new implementation is not a contract");

        bytes32 slot = _IMPLEMENTATION_SLOT;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, newImplementation)
        }
    }
}


/**
 * @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 UpgradeableProxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _setAdmin(admin_);
    }

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

    /**
     * @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 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _admin()) {
            _;
        } 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_ = _admin();
    }

    /**
     * @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 {
        require(newAdmin != address(0), "TransparentUpgradeableProxy: new admin is the zero address");
        emit AdminChanged(_admin(), newAdmin);
        _setAdmin(newAdmin);
    }

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

    /**
     * @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 virtual ifAdmin {
        _upgradeTo(newImplementation);
        Address.functionDelegateCall(newImplementation, data);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address adm) {
        bytes32 slot = _ADMIN_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            adm := sload(slot)
        }
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        bytes32 slot = _ADMIN_SLOT;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, newAdmin)
        }
    }

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

Contract ABI

[{"inputs": [{"internalType": "address","name": "_logic","type": "address"},{"internalType": "address","name": "admin_","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": "implementation","type": "address"}],"name": "Upgraded","type": "event"},{"stateMutability": "payable","type": "fallback"},{"inputs": [],"name": "admin","outputs": [{"internalType": "address","name": "admin_","type": "address"}],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "newAdmin","type": "address"}],"name": "changeAdmin","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "implementation","outputs": [{"internalType": "address","name": "implementation_","type": "address"}],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "newImplementation","type": "address"}],"name": "upgradeTo","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "newImplementation","type": "address"},{"internalType": "bytes","name": "data","type": "bytes"}],"name": "upgradeToAndCall","outputs": [],"stateMutability": "payable","type": "function"},{"stateMutability": "payable","type": "receive"}]

608060405260405162000c7e38038062000c7e833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003bf565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c226036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bfb6027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c586026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b60208310620002915780518252601f19909201916020918201910162000270565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030b82828662000315565b9695505050505050565b6060831562000326575081620001d6565b825115620003375782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038357818101518382015260200162000369565b50505050905090810190601f168015620003b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082c80620003cf6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f8603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610732602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105eb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078f6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b6020831061056c5780518252601f19909201916020918201910161054d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cc576040519150601f19603f3d011682016040523d82523d6000602084013e6105d1565b606091505b50915091506105e1828286610653565b9695505050505050565b6105f4816103b0565b61062f5760405162461bcd60e51b81526004018080602001828103825260368152602001806107596036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106625750816103a9565b8251156106725782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bc5781810151838201526020016106a4565b50505050905090810190601f1680156106e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a2646970667358221220be41dff5528c86531d362535fb7ff50711181135afa668f61c1b6ad746dad1be64736f6c634300060c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374

Deployed Bytecode

0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f8603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610732602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105eb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078f6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b6020831061056c5780518252601f19909201916020918201910161054d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cc576040519150601f19603f3d011682016040523d82523d6000602084013e6105d1565b606091505b50915091506105e1828286610653565b9695505050505050565b6105f4816103b0565b61062f5760405162461bcd60e51b81526004018080602001828103825260368152602001806107596036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106625750816103a9565b8251156106725782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bc5781810151838201526020016106a4565b50505050905090810190601f1680156106e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212206c7d9f9210050a2a3b139e9018b711bee78264b2de59dd83f2d515ee541efbf564736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008b194beae1d3e0788a1a35173978001acdfba668000000000000000000000000d570ace65c43af47101fc6250fd6fc63d1c22a86000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _logic (address): 0x8b194bEae1d3e0788A1a35173978001ACDFba668
Arg [1] : admin_ (address): 0xd570aCE65C43af47101fC6250FD6fC63D1c22a86
Arg [2] : _data (bytes): 0x

-----Encoded View---------------


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.