Contract 0xeb5F29AfaaA3f44eca8559c3e8173003060e919f 13

 

Contract Overview

Rubicon: bathSNX Token
My Name Tag:
Not Available, login to update

ContractCreator:
GENESIS at txn GENESIS_eb5f29afaaa3f44eca8559c3e8173003060e919f

TokenTracker:
Txn Hash Method
Block
From
To
Value
0xbe98373b8c77d9358262fc5d7c140fee449f5196c7acd3b70541994825efdca5Withdraw1172315852024-03-10 9:12:2718 days 14 hrs ago0x79ce1426b21bb2cfae014388ade594666ecef4c0 IN  Rubicon: bathSNX Token0 ETH0.0000821482750.0009884
0x51118f3731788a3ccfe096dab0a7e5253dfa5b54f5b88106aadda388c2bc61c9Withdraw1172312532024-03-10 9:01:2318 days 15 hrs ago0x1c139649763b154b18a3407dbbc7c29c63f8e0e6 IN  Rubicon: bathSNX Token0 ETH0.0000844817730.000420582
0xa1168f0e9663911024010f261d1280cca196684aff53336296e5c34eab315e01Withdraw1172311632024-03-10 8:58:2318 days 15 hrs ago0x73342f619780312b3f6d85af48c64aaf8c32315d IN  Rubicon: bathSNX Token0 ETH0.0000841739810.001130126
0xc28c986611f8d792996c9dcb3c045b635f390f053c37ed6993870b3cc52853e4Withdraw1172298552024-03-10 8:14:4718 days 15 hrs ago 0x1fb9580e0b19956b90351c825ae7819f1ee0257b IN  Rubicon: bathSNX Token0 ETH0.0000798164620.000511099
0x39bdd6573ffeb613b24f1074cbc61390806e0ca4d9bac4fda67defcd6bd30dfaWithdraw1172298212024-03-10 8:13:3918 days 15 hrs ago0x98e640296317a9f5ab7078ebeb7e685da030a19a IN  Rubicon: bathSNX Token0 ETH0.0000789487030.000341998
0x6106fee43092d00e1fba4e5939792685262095e297c8e3c88c32bf873a2e49e6Withdraw1172298192024-03-10 8:13:3518 days 15 hrs ago0x98e640296317a9f5ab7078ebeb7e685da030a19a IN  Rubicon: bathSNX Token0 ETH0.0000770691460.000343519
0x843592090c3bd8a4814a9ed3d1c2aa24076942c91b8d13ba5ad5063da23ed232Withdraw1172297882024-03-10 8:12:3318 days 15 hrs ago0x9b2855918fff918739d96b1d930b1b3e3a0a9500 IN  Rubicon: bathSNX Token0 ETH0.0000750549040.00036016
0xb81853573b6f8696dc378b26866298354cbf9c2cb57dcdbdddd872324394a045Withdraw1172296402024-03-10 8:07:3718 days 16 hrs ago0xd2881cda4aca733e5ba73b75196913e4a1c9d916 IN  Rubicon: bathSNX Token0 ETH0.0000806127090.000270718
0x4bf585d7deefc9c1957f6e50ee966cde8003bd77234b82e6fda6a6ac5bf8135bWithdraw1171065442024-03-07 11:44:2521 days 12 hrs ago0xac42c94f6889def25bd7f92bcf48574cc05a664a IN  Rubicon: bathSNX Token0 ETH0.0000859303060.001572787
0x3ee632e64304982ba5828fd9dc5404c7cf61c885ff9bacf9d99699d4e3034ac5Get All Bonus To...1171064982024-03-07 11:42:5321 days 12 hrs ago0xac42c94f6889def25bd7f92bcf48574cc05a664a IN  Rubicon: bathSNX Token0 ETH0.0000649415070.000696494
0x8d579508ba25bf9bd9fb19a0641c91330570a083d20b49849725068bada2de41Withdraw1168381732024-03-01 6:38:4327 days 17 hrs ago0x32d18ff3a0213e9cb958ab7598ca503ecab389ad IN  Rubicon: bathSNX Token0 ETH0.0000718344910.006198266
0x991441769c8a97da0b3b42d8c64230880277b45a48ac4816a7d38deea37eed35Get All Bonus To...1168381602024-03-01 6:38:1727 days 17 hrs ago0x32d18ff3a0213e9cb958ab7598ca503ecab389ad IN  Rubicon: bathSNX Token0 ETH0.0000635894410.005567171
0xc8ed4acf974e89337e9ef1087b04843e5f469fd6a5f6e51e3a10ee67f2ddcbe6Withdraw1161633262024-02-14 15:43:4943 days 8 hrs ago0x11ed38014d4c74b747bab388dab651e0bb854799 IN  Rubicon: bathSNX Token0 ETH0.0000951659320.102098096
0x937de3b5bb254d255e6fe9810cfe8331ef08714d7f24ee85210f862d58016444Withdraw1159301652024-02-09 6:11:4748 days 17 hrs ago0x51277dab049e4c689665322bda84dbae91b81dd9 IN  Rubicon: bathSNX Token0 ETH0.0000661534280.002182363
0x4fe34650ac840d37692fe5e822a08de26f46e6daac9fa784b5a9ebda062f44e7Get All Bonus To...1159301542024-02-09 6:11:2548 days 17 hrs ago0x51277dab049e4c689665322bda84dbae91b81dd9 IN  Rubicon: bathSNX Token0 ETH0.0000611857270.00216315
0xe4022001c1de5d646c57a8595f9628962730e35ea69bc921440cd5dbcc7e4925Withdraw1156749432024-02-03 8:24:2354 days 15 hrs ago0x9ebffaeff6ff42d44c98ad6dc2790bbaba487896 IN  Rubicon: bathSNX Token0 ETH0.0000241718420.005317603
0x6cda2a108f75e6181b695bbb6ec2a4f0baa8043fc6cd304bcb2d909214a41ee2Withdraw1155541562024-01-31 13:18:0957 days 10 hrs ago0xec1d2d53d62486bf21e46233d60d652a40643fb7 IN  Rubicon: bathSNX Token0 ETH0.0000835418760.099114024
0x3fde7d5182c6f7cb5504b6016866b19b4ea559b76514c0027b29c9b8eddbb392Withdraw1148633682024-01-15 13:31:5373 days 10 hrs ago0x93fa26253abbfb21a7f2749a81bb25a7e5f95ba1 IN  Rubicon: bathSNX Token0 ETH0.0000887492780.101001292
0x56ada555f51fa48ccc98e409511434e0dfffa4f86c4c750bc034cbee1a21f4c2Withdraw1147206072024-01-12 6:13:1176 days 17 hrs ago0xecec6742cab85cdd157d2322555a099276870670 IN  Rubicon: bathSNX Token0 ETH0.0000236779540.003620392
0xa32e15988dd3a5c15ab342102be6e6ae9fa9568fc94272e21a1a59d62fed2d4cWithdraw1144759772024-01-06 14:18:5182 days 9 hrs ago0x4b782d317584ebca2e26b1bf52cf701caeb3289f IN  Rubicon: bathSNX Token0 ETH0.0000443102810.005748856
0x48d69b194953a2139ec553d212f231a2f21726b9e806ea20bc6da9155c46a8fdGet All Bonus To...1144754042024-01-06 13:59:4582 days 10 hrs ago0x4b782d317584ebca2e26b1bf52cf701caeb3289f IN  Rubicon: bathSNX Token0 ETH0.0000360939910.007525344
0xcefd6234d913e5354544b5422fdde7f7c3e4c0b6e2e3765074a9919d8866656dGet All Bonus To...1144371602024-01-05 16:44:5783 days 7 hrs ago0x7ba8227505544815021dd31f4dc8cea926374744 IN  Rubicon: bathSNX Token0 ETH0.0000398576850.007757246
0x58d7f966e6ad3cba397dc540699eee2ed53f066b57479d42c94308a7a69adc9bGet All Bonus To...1142687662024-01-01 19:11:4987 days 4 hrs ago0x86951b2e7cab5c9cae52de4329c179432264a159 IN  Rubicon: bathSNX Token0 ETH0.0000366421870.097025417
0x15f6a6dda8d1e7cf175b9708d581aa4f939aca1f29a68f16dcee5b500970a902Get All Bonus To...1142594812024-01-01 14:02:1987 days 10 hrs ago0xbf096a3cc148bdce925b0a29764d2552fe4b92ce IN  Rubicon: bathSNX Token0 ETH0.0000376481850.102847338
0xfb4268d2d4c427afc21e59f166e873f78d3850da1bdfb4630ff26acf2459697aWithdraw1142236872023-12-31 18:09:1188 days 6 hrs ago0xcd94e8616d58e726e11214fc5e6fe69421bdaf96 IN  Rubicon: bathSNX Token0 ETH0.0000283213230.0107876
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX TokenSynthetix: SNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX TokenSynthetix: SNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX TokenSynthetix: SNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc Rubicon: bathSNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0x505fb5d94c3cf68e13b5ba2ca1868f2b580007cc0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX TokenSynthetix: SNX Token0 ETH
0x06c9c78d3a3ffc3325fd3e0541597ec6f7b63e41b597e0da5464d47c70b603e11071353862023-07-20 16:12:29252 days 7 hrs ago Rubicon: bathSNX Token 0xf12734d297232c566e1db790f5a1237132a688770 ETH
0xafaab365332e8b0f9b50f18bc3883d8aac13aeface9408f1fca5010e32896be11069409572023-07-16 4:11:31256 days 19 hrs ago Rubicon: bathSNX TokenSynthetix: SNX Token0 ETH
0xafaab365332e8b0f9b50f18bc3883d8aac13aeface9408f1fca5010e32896be11069409572023-07-16 4:11:31256 days 19 hrs ago Rubicon: bathSNX TokenSynthetix: SNX Token0 ETH
[ Download CSV Export 
Loading

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

Contract Name:
TransparentUpgradeableProxy

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Optimistic.Etherscan.io on 2021-11-23
*/

pragma solidity >=0.6.0 <0.8.0;


// SPDX-License-Identifier: MIT
/**
 * @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 OVMProxy {
    /**
     * @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
        (bool success, bytes memory returndata) = implementation.delegatecall(
            msg.data
        );

        if (success) {
            assembly {
                return(add(returndata, 0x20), mload(returndata))
            }
        } else {
            assembly {
                revert(add(returndata, 0x20), mload(returndata))
            }
        }
    }

    /**
     * @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 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 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 OVMProxy {
    /**
     * @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)
        );
        _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
    ) 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 Emitted when the admin calls implementation()
     */
    event Implementation(address currentImplementation);

    /**
     * @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();
        emit 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 Security Audit

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":false,"internalType":"address","name":"currentImplementation","type":"address"}],"name":"Implementation","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"}]

Deployed Bytecode

0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101165780638f28397014610147578063f851a4401461017a5761005d565b3661005d5761005b61018f565b005b61005b61018f565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101a9565b61005b600480360360408110156100ae57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100d857600080fd5b8201836020820111156100ea57600080fd5b803590602001918460018302840111600160201b8311171561010b57600080fd5b5090925090506101e3565b34801561012257600080fd5b5061012b610260565b604080516001600160a01b039092168252519081900360200190f35b34801561015357600080fd5b5061005b6004803603602081101561016a57600080fd5b50356001600160a01b03166102db565b34801561018657600080fd5b5061012b610395565b6101976103f9565b6101a76101a2610459565b61046c565b565b6101b16104eb565b6001600160a01b0316336001600160a01b031614156101d8576101d3816104fe565b6101e0565b6101e061018f565b50565b6101eb6104eb565b6001600160a01b0316336001600160a01b031614156102535761020d836104fe565b61024d8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103c792505050565b5061025b565b61025b61018f565b505050565b600061026a6104eb565b6001600160a01b0316336001600160a01b031614156102d05761028b610459565b604080516001600160a01b038316815290519192507fa2dae01a1d724d8a8b98084c4e6f990890b1d873be068e99714cfd28b4060ddb919081900360200190a16102d8565b6102d861018f565b90565b6102e36104eb565b6001600160a01b0316336001600160a01b031614156101d8576001600160a01b0381166103415760405162461bcd60e51b815260040180806020018281038252603a81526020018061076d603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61036a6104eb565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d38161053e565b600061039f6104eb565b6001600160a01b0316336001600160a01b031614156102d0576103c06104eb565b90506102d8565b60606103ec83836040518060600160405280602781526020016107c760279139610550565b9392505050565b3b151590565b6104016104eb565b6001600160a01b0316336001600160a01b031614156104515760405162461bcd60e51b815260040180806020018281038252604281526020018061084a6042913960600191505060405180910390fd5b6101a76101a7565b6000805160206107a78339815191525490565b600080826001600160a01b03166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146104cb576040519150601f19603f3d011682016040523d82523d6000602084013e6104d0565b606091505b509150915081156104e357805160208201f35b805160208201fd5b60008051602061074d8339815191525490565b61050781610652565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60008051602061074d83398151915255565b606061055b846103f3565b6105965760405162461bcd60e51b81526004018080602001828103825260268152602001806108246026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106105d35780518252601f1990920191602091820191016105b4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610633576040519150601f19603f3d011682016040523d82523d6000602084013e610638565b606091505b50915091506106488282866106a8565b9695505050505050565b61065b816103f3565b6106965760405162461bcd60e51b81526004018080602001828103825260368152602001806107ee6036913960400191505060405180910390fd5b6000805160206107a783398151915255565b606083156106b75750816103ec565b8251156106c75782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107115781810151838201526020016106f9565b50505050905090810190601f16801561073e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfeb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a2646970667358221220c956bcbbc04ec373182530ed2d1b401083114462fb7c5aa0f6042a46022b815064736f6c63430007060033

Deployed ByteCode Sourcemap

15921:5109:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2504:11;:9;:11::i;:::-;15921:5109;;2273:11;:9;:11::i;19297:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19297:119:0;-1:-1:-1;;;;;19297:119:0;;:::i;19801:260::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19801:260:0;;;;;;;;;;;;;;;-1:-1:-1;;;19801:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19801:260:0;;;;;;;;;;-1:-1:-1;19801:260:0;;-1:-1:-1;19801:260:0;-1:-1:-1;19801:260:0;:::i;18415:210::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18415:210:0;;;;;;;;;;;;;;18839:291;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18839:291:0;-1:-1:-1;;;;;18839:291:0;;:::i;17849:95::-;;;;;;;;;;;;;:::i;1910:113::-;1959:17;:15;:17::i;:::-;1987:28;1997:17;:15;:17::i;:::-;1987:9;:28::i;:::-;1910:113::o;19297:119::-;17307:8;:6;:8::i;:::-;-1:-1:-1;;;;;17293:22:0;:10;-1:-1:-1;;;;;17293:22:0;;17289:100;;;19379:29:::1;19390:17;19379:10;:29::i;:::-;17289:100:::0;;;17366:11;:9;:11::i;:::-;19297:119;:::o;19801:260::-;17307:8;:6;:8::i;:::-;-1:-1:-1;;;;;17293:22:0;:10;-1:-1:-1;;;;;17293:22:0;;17289:100;;;19960:29:::1;19971:17;19960:10;:29::i;:::-;20000:53;20029:17;20048:4;;20000:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;20000:28:0::1;::::0;-1:-1:-1;;;20000:53:0:i:1;:::-;;17289:100:::0;;;17366:11;:9;:11::i;:::-;19801:260;;;:::o;18415:210::-;18494:23;17307:8;:6;:8::i;:::-;-1:-1:-1;;;;;17293:22:0;:10;-1:-1:-1;;;;;17293:22:0;;17289:100;;;18553:17:::1;:15;:17::i;:::-;18586:31;::::0;;-1:-1:-1;;;;;18586:31:0;::::1;::::0;;;;18535:35;;-1:-1:-1;18586:31:0::1;::::0;;;;;::::1;::::0;;::::1;17289:100:::0;;;17366:11;:9;:11::i;:::-;18415:210;:::o;18839:291::-;17307:8;:6;:8::i;:::-;-1:-1:-1;;;;;17293:22:0;:10;-1:-1:-1;;;;;17293:22:0;;17289:100;;;-1:-1:-1;;;;;18936:22:0;::::1;18914:130;;;;-1:-1:-1::0;;;18914:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19060:32;19073:8;:6;:8::i;:::-;19060:32;::::0;;-1:-1:-1;;;;;19060:32:0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;19103:19;19113:8;19103:9;:19::i;17849:95::-:0;17892:14;17307:8;:6;:8::i;:::-;-1:-1:-1;;;;;17293:22:0;:10;-1:-1:-1;;;;;17293:22:0;;17289:100;;;17928:8:::1;:6;:8::i;:::-;17919:17;;17289:100:::0;;9761:302;9862:12;9912:143;9951:6;9976:4;9912:143;;;;;;;;;;;;;;;;;:20;:143::i;:::-;9892:163;9761:302;-1:-1:-1;;;9761:302:0:o;3546:444::-;3926:20;3974:8;;;3546:444::o;20783:244::-;20883:8;:6;:8::i;:::-;-1:-1:-1;;;;;20869:22:0;:10;-1:-1:-1;;;;;20869:22:0;;;20847:138;;;;-1:-1:-1;;;20847:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20996:23;:21;:23::i;13344:306::-;-1:-1:-1;;;;;;;;;;;13621:11:0;;13598:45::o;914:504::-;1043:12;1057:23;1084:14;-1:-1:-1;;;;;1084:27:0;1126:8;;1084:61;;;;;;;;;;;;;;-1:-1:-1;1084:61:0;;-1:-1:-1;1084:61:0;;-1:-1:-1;;1084:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:103;;;;1162:7;1158:253;;;1250:10;1244:17;1237:4;1225:10;1221:21;1214:48;1195:82;1373:10;1367:17;1360:4;1348:10;1344:21;1337:48;20127:227;-1:-1:-1;;;;;;;;;;;20325:11:0;;20303:44::o;13776:163::-;13851:37;13870:17;13851:18;:37::i;:::-;13904:27;;-1:-1:-1;;;;;13904:27:0;;;;;;;;13776:163;:::o;20441:216::-;-1:-1:-1;;;;;;;;;;;20617:22:0;20602:48::o;10257:457::-;10402:12;10435:18;10446:6;10435:10;:18::i;:::-;10427:69;;;;-1:-1:-1;;;10427:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10570:12;10584:23;10611:6;-1:-1:-1;;;;;10611:19:0;10631:4;10611:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10611:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10569:67;;;;10654:52;10672:7;10681:10;10693:12;10654:17;:52::i;:::-;10647:59;10257:457;-1:-1:-1;;;;;;10257:457:0:o;14035:406::-;14131:37;14150:17;14131:18;:37::i;:::-;14109:141;;;;-1:-1:-1;;;14109:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14392:31:0;14377:57::o;10722:777::-;10872:12;10901:7;10897:595;;;-1:-1:-1;10932:10:0;10925:17;;10897:595;11046:17;;:21;11042:439;;11309:10;11303:17;11370:15;11357:10;11353:2;11349:19;11342:44;11257:148;11452:12;11445:20;;-1:-1:-1;;;11445:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://c956bcbbc04ec373182530ed2d1b401083114462fb7c5aa0f6042a46022b8150
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.