Contract 0xD74f5255D557944cf7Dd0E45FF521520002D5748 3

 
Sperax is a global technology firm building modern money with blockchain technology.
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9f45f3293203043a970fbfa484f2a36b871816aa651f88a16b7c9aed519a28e4Approve437959092022-12-05 12:06:5612 mins ago0x24f36581dcc5329a04598c0aafd35f1186789118 IN  Sperax: USDs Token0 ETH0.00002032
0x4a90b7345a77e885df9d4d6a7aa0eb74ea6fe3a26ab441d18038eb2dc3750be4Approve437946492022-12-05 12:01:1518 mins ago0x9acf8d0315094d33aa6875b673eb126483c3a2c0 IN  Sperax: USDs Token0 ETH0.00002049
0xda8e58802baa62764ae18cffc1298050d978a6689698405a5e0d2ba89ff30b41Approve437928392022-12-05 11:54:0625 mins ago0x775a4321839f02f3a3352df860ffbe2ac70b1568 IN  Sperax: USDs Token0 ETH0.0000203
0x2f726092ff80ded3bcaace569ede3f15bd4875ea50dd32dcaefd06ce78af5601Approve437902532022-12-05 11:42:3436 mins ago0xe23dc590a6de5b8948c5c36745574e6d2e192248 IN  Sperax: USDs Token0 ETH0.00003997
0xe7ab73fa011c5431bbf199d505331b88b36c29c20549f854070e62ca8f4a6f3bApprove437883392022-12-05 11:34:1245 mins ago0x8fa0fb341773330906f467fef93a50698541dc0d IN  Sperax: USDs Token0 ETH0.0005311
0xd34acb1dfcdd0319d1d3d880dde05e8f00619f87be4d71eb3e704ec0705ff9baApprove437879432022-12-05 11:32:2746 mins ago0x8fa0fb341773330906f467fef93a50698541dc0d IN  Sperax: USDs Token0 ETH0.00002012
0xc51533b5f2cafb9abdcc453b828c8336d99c08180388ef678e5f59fd9467c754Approve437871202022-12-05 11:28:4750 mins ago0xce0790c87ec339a299f7fc6c914cc5a42c05fc1f IN  Sperax: USDs Token0 ETH0.00001996
0x88761172dd07e80089c17dc9df5a913283c3033bcb202b7cd4391ff0839dfdbdApprove437865842022-12-05 11:26:3152 mins ago0x08138243c8b2c5bb825763a7b065280a57af79e5 IN  Sperax: USDs Token0 ETH0.00002028
0xf3c9e5407fae2ab3f95203f3d22a84f3d6a39303063c60cd2ce5e025ef7998cbApprove437861902022-12-05 11:24:4554 mins ago0x988f9a180d2fce4ede3f89b944ec8c21ba1b0eac IN  Sperax: USDs Token0 ETH0.0000202
0x02d2ad4c7bc6a8aa419e22095f6dc3a7e71fef12dda09c3be6352457d7a3f2abApprove437852232022-12-05 11:20:3858 mins ago0x839375339b030c4a8a2f8bcedd85c308d898307a IN  Sperax: USDs Token0 ETH0.00001983
0x06b636f504a15129807ba762b8694fafac86dd26e9495b269143c58b51ee6170Approve437736812022-12-05 10:21:321 hr 57 mins ago0x07daed15a13a5a39751c05301de2409136d56b20 IN  Sperax: USDs Token0 ETH0.00002461
0x03f374bcb753265b8be6c3175aebf15f97880b69b5e781681329a1b9c405369bApprove437713132022-12-05 10:08:002 hrs 11 mins ago0x602d68b5f7e3c140d165f25e7f9558c088699bee IN  Sperax: USDs Token0 ETH0.00002254
0x8c50b14071f70715ad693ce83f409ff28d22cfd3d7981d7aec702e31c83d8eb8Approve437683372022-12-05 9:53:362 hrs 25 mins ago0xe29b7fb40150ea4b7cbc2f22e3acfa67a8da021a IN  Sperax: USDs Token0 ETH0.00001975
0x230c3a362df9f004b58cdc698d93359f5096a6f98afb6d8f04c0859c2b77b2bfApprove437660842022-12-05 9:41:582 hrs 37 mins ago0xeed6ce804e0cf9fa0425c03673c0385ed1e02070 IN  Sperax: USDs Token0 ETH0.00002272
0x2da3b4a22a9234c030fd00f8cab39874fb45c866741fd554922e4dafe9e7b9f9Approve437654872022-12-05 9:39:062 hrs 40 mins ago0x5f846b50cb1eec5271f83dd70196cdaad3d17755 IN  Sperax: USDs Token0 ETH0.00002261
0xfb6a68729bf816f47ef42dba4a35f854a3045a7866d248411ba331c9aba44d16Transfer437581822022-12-05 9:01:173 hrs 18 mins ago0x3ef000bae3e8105be55f76fda784fd7d69cff30e IN  Sperax: USDs Token0 ETH0.0000236
0x2bfa2254e9112e65a70c8e4a7b06ced6a18f248b065827f5727d24493de07275Approve437574802022-12-05 8:57:363 hrs 21 mins ago0x7eab40466e585624e961b933d02bc6b9f5c05a50 IN  Sperax: USDs Token0 ETH0.00002218
0x7e69662f138e3216d4bb052fe6957bab93576208cafa54f3e8a84c18532695e4Approve437555002022-12-05 8:46:313 hrs 32 mins ago0x4a9da3657e7ed6e56db9d3ab269c8b01e1bae099 IN  Sperax: USDs Token0 ETH0.00002114
0xdf776dfbc7c2c59442cfe8d9be29d933ec3406664bd08d264aed6c583d53432aTransfer437553562022-12-05 8:45:443 hrs 33 mins ago0x3ef000bae3e8105be55f76fda784fd7d69cff30e IN  Sperax: USDs Token0 ETH0.00002264
0x4d3680d049f97744dfda236e080c0ec917e33fde654376e857c0cc31fdd54dbcApprove437543262022-12-05 8:40:173 hrs 39 mins ago0xe7178d361677c99eb658b9295881fd4ee72a0884 IN  Sperax: USDs Token0 ETH0.00001915
0x9af74f4410481cf89cd4e7866ee31ede0c1fc835e25d944363352e8af08ccc93Approve437540542022-12-05 8:38:503 hrs 40 mins ago0xe7178d361677c99eb658b9295881fd4ee72a0884 IN  Sperax: USDs Token0 ETH0.00002114
0x8920bd817a950d17894d70a732b07e2e3b038a44f59e9e3785e0010b9d0182adApprove437525752022-12-05 8:30:503 hrs 48 mins ago0x38f9c782eae6bd3a8b5b452e2bec9a1dd0ddb133 IN  Sperax: USDs Token0 ETH0.0000214
0xd8343d91d7fd50fc26ef1d6f4571939883c077917b81e738fc964bb29a4d2f82Approve437506852022-12-05 8:21:103 hrs 58 mins ago0xf487245b7a14670e3efc59aab00da624caffd3bd IN  Sperax: USDs Token0 ETH0.00002179
0x78f247ed1a2b610ce82b9477d81dbc857c354af56399b2060031b69ed21679afApprove437492382022-12-05 8:13:124 hrs 6 mins ago0x650f5845ee00b30ada3e656a5a2b1001bb35db94 IN  Sperax: USDs Token0 ETH0.0000217
0x700f4528e8990b16da26e2f765d48f2d5c4f962c80060f983bae7719743c42c5Approve437475862022-12-05 8:03:414 hrs 15 mins ago0xcc917ab28544c80e2f0e8effbd22551a3cb096be IN  Sperax: USDs Token0 ETH0.00002162
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x495dabd6506563ce892b8285704bd28f9ddcae65 Sperax: USDs Token0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x495dabd6506563ce892b8285704bd28f9ddcae65 Sperax: USDs Token0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x495dabd6506563ce892b8285704bd28f9ddcae65 Sperax: USDs Token0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x569a11e9c23f6716073aeae549ec69de6356f9b3 Sperax: USDs Token0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x649d816dff6f83e8f3e7a2ed6e7661b4a065c305 Sperax: USDs Token0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x569a11e9c23f6716073aeae549ec69de6356f9b3 Sperax: USDs Token0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xfc17e6a699ec6031991c048647f3d54eeb385d377a709b33743dd6e68aa4375a437985992022-12-05 12:18:4730 secs ago 0x68068501b1b27d0de067e2433c0554f2b9a52bfa Sperax: USDs Token0 ETH
0xc6c665d45ea72e04b19f9a94975d013118a7ffe1c4e4053e53305045034ab433437985292022-12-05 12:18:3047 secs ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xc6c665d45ea72e04b19f9a94975d013118a7ffe1c4e4053e53305045034ab433437985292022-12-05 12:18:3047 secs ago 0x50450351517117cb58189edba6bbad6284d45902 Sperax: USDs Token0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago 0x5766da927bcb6f60cefdc559ea30ddd3a4c5db0f Sperax: USDs Token0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago 0x00000000000b69ec332f49b7c4d2b101f93c3bed Sperax: USDs Token0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago 0x5766da927bcb6f60cefdc559ea30ddd3a4c5db0f Sperax: USDs Token0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 ETH
0xc334f72a8dd482786b92a8d3f8b48f689be1693b5dd583fea22219ea921d1d7c437982922022-12-05 12:17:261 min ago 0x649d816dff6f83e8f3e7a2ed6e7661b4a065c305 Sperax: USDs Token0 ETH
0xae423e3008d926fd8ad65e2ac1999d59c9ab31163eb64684c0d6fb69fa80a366437982912022-12-05 12:17:251 min ago Sperax: USDs Token 0x2d715a14d0577964f9dd7956c9a369b26afa55dc0 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 1 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: TransparentUpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "./UpgradeableProxy.sol";

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

File 2 of 4: Address.sol
// 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);
            }
        }
    }
}

File 3 of 4: Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <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 4 of 4: UpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "./Proxy.sol";
import "./Address.sol";

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 *
 * 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)
        }
    }
}

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

608060405260405162000c7438038062000c74833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003821760201c565b505b50620001239050565b6200012e82620001dd565b505050620003bf565b6200014d816200020160201b620003ae1760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c186036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf16027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c4e6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b60208310620002915780518252601f19909201916020918201910162000270565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030b82828662000315565b9695505050505050565b6060831562000326575081620001d6565b825115620003375782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038357818101518382015260200162000369565b50505050905090810190601f168015620003b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082280620003cf6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101165780638f28397014610147578063f851a4401461017a5761005d565b3661005d5761005b61018f565b005b61005b61018f565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101a9565b61005b600480360360408110156100ae57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100d857600080fd5b8201836020820111156100ea57600080fd5b803590602001918460018302840111600160201b8311171561010b57600080fd5b5090925090506101e3565b34801561012257600080fd5b5061012b610260565b604080516001600160a01b039092168252519081900360200190f35b34801561015357600080fd5b5061005b6004803603602081101561016a57600080fd5b50356001600160a01b031661029d565b34801561018657600080fd5b5061012b610357565b6101976103b4565b6101a76101a2610414565b610427565b565b6101b161044b565b6001600160a01b0316336001600160a01b031614156101d8576101d38161045e565b6101e0565b6101e061018f565b50565b6101eb61044b565b6001600160a01b0316336001600160a01b031614156102535761020d8361045e565b61024d8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038292505050565b5061025b565b61025b61018f565b505050565b600061026a61044b565b6001600160a01b0316336001600160a01b031614156102925761028b610414565b905061029a565b61029a61018f565b90565b6102a561044b565b6001600160a01b0316336001600160a01b031614156101d8576001600160a01b0381166103035760405162461bcd60e51b815260040180806020018281038252603a8152602001806106ce603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032c61044b565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d38161049e565b600061036161044b565b6001600160a01b0316336001600160a01b031614156102925761028b61044b565b60606103a78383604051806060016040528060278152602001610728602791396104b0565b9392505050565b3b151590565b6103bc61044b565b6001600160a01b0316336001600160a01b0316141561040c5760405162461bcd60e51b81526004018080602001828103825260428152602001806107ab6042913960600191505060405180910390fd5b6101a76101a7565b6000805160206107088339815191525490565b3660008037600080366000845af43d6000803e808015610446573d6000f35b3d6000fd5b6000805160206106ae8339815191525490565b610467816105b3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000805160206106ae83398151915255565b60606104bb846103ae565b6104f65760405162461bcd60e51b81526004018080602001828103825260268152602001806107856026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b602083106105345780518252601f199092019160209182019101610515565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610594576040519150601f19603f3d011682016040523d82523d6000602084013e610599565b606091505b50915091506105a9828286610609565b9695505050505050565b6105bc816103ae565b6105f75760405162461bcd60e51b815260040180806020018281038252603681526020018061074f6036913960400191505060405180910390fd5b60008051602061070883398151915255565b606083156106185750816103a7565b8251156106285782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561067257818101518382015260200161065a565b50505050905090810190601f16801561069f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfeb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a2646970667358221220e90b565f8fc512a59f1efe82432fc6aeb8b4f862affd6d23b50310431154395464736f6c634300060c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374000000000000000000000000d06eca6b1c7f47f8848e96fd9c9ecb17c54e650c0000000000000000000000003e49925a79cbfb68baa5bc9dfb4f7d955d1ddf25000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000d06eca6b1c7f47f8848e96fd9c9ecb17c54e650c0000000000000000000000003e49925a79cbfb68baa5bc9dfb4f7d955d1ddf25000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000d06eca6b1c7f47f8848e96fd9c9ecb17c54e650c
Arg [1] : 0000000000000000000000003e49925a79cbfb68baa5bc9dfb4f7d955d1ddf25
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

1552:4578:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2843:11:1;:9;:11::i;:::-;1552:4578:2;;2619:11:1;:9;:11::i;4521:117:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4521:117:2;-1:-1:-1;;;;;4521:117:2;;:::i;5014:216::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5014:216:2;;;;;;;;;;;;;;;-1:-1:-1;;;5014:216:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5014:216:2;;;;;;;;;;-1:-1:-1;5014:216:2;;-1:-1:-1;5014:216:2;-1:-1:-1;5014:216:2;:::i;3777:129::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3777:129:2;;;;;;;;;;;;;;4111:250;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4111:250:2;-1:-1:-1;;;;;4111:250:2;;:::i;3224:93::-;;;;;;;;;;;;;:::i;2265:110:1:-;2313:17;:15;:17::i;:::-;2340:28;2350:17;:15;:17::i;:::-;2340:9;:28::i;:::-;2265:110::o;4521:117:2:-;2698:8;:6;:8::i;:::-;-1:-1:-1;;;;;2684:22:2;:10;-1:-1:-1;;;;;2684:22:2;;2680:96;;;4602:29:::1;4613:17;4602:10;:29::i;:::-;2680:96:::0;;;2754:11;:9;:11::i;:::-;4521:117;:::o;5014:216::-;2698:8;:6;:8::i;:::-;-1:-1:-1;;;;;2684:22:2;:10;-1:-1:-1;;;;;2684:22:2;;2680:96;;;5131:29:::1;5142:17;5131:10;:29::i;:::-;5170:53;5199:17;5218:4;;5170:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5170:28:2::1;::::0;-1:-1:-1;;;5170:53:2:i:1;:::-;;2680:96:::0;;;2754:11;:9;:11::i;:::-;5014:216;;;:::o;3777:129::-;3829:23;2698:8;:6;:8::i;:::-;-1:-1:-1;;;;;2684:22:2;:10;-1:-1:-1;;;;;2684:22:2;;2680:96;;;3882:17:::1;:15;:17::i;:::-;3864:35;;2680:96:::0;;;2754:11;:9;:11::i;:::-;3777:129;:::o;4111:250::-;2698:8;:6;:8::i;:::-;-1:-1:-1;;;;;2684:22:2;:10;-1:-1:-1;;;;;2684:22:2;;2680:96;;;-1:-1:-1;;;;;4193:22:2;::::1;4185:93;;;;-1:-1:-1::0;;;4185:93:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4293:32;4306:8;:6;:8::i;:::-;4293:32;::::0;;-1:-1:-1;;;;;4293:32:2;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;4335:19;4345:8;4335:9;:19::i;3224:93::-:0;3267:14;2698:8;:6;:8::i;:::-;-1:-1:-1;;;;;2684:22:2;:10;-1:-1:-1;;;;;2684:22:2;;2680:96;;;3302:8:::1;:6;:8::i;6284:198:0:-:0;6367:12;6398:77;6419:6;6427:4;6398:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6391:84;6284:198;-1:-1:-1;;;6284:198:0:o;726:413::-;1086:20;1124:8;;;726:413::o;5924:204:2:-;6009:8;:6;:8::i;:::-;-1:-1:-1;;;;;5995:22:2;:10;-1:-1:-1;;;;;5995:22:2;;;5987:101;;;;-1:-1:-1;;;5987:101:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6098:23;:21;:23::i;1865:250:3:-;-1:-1:-1;;;;;;;;;;;2088:11:3;;2066:43::o;891:895:1:-;1285:14;1282:1;1279;1266:34;1499:1;1496;1480:14;1477:1;1461:14;1454:5;1441:60;1575:16;1572:1;1569;1554:38;1613:6;1680:38;;;;1751:16;1748:1;1741:27;1680:38;1699:16;1696:1;1689:27;5291:221:2;-1:-1:-1;;;;;;;;;;;5485:11:2;;5464:42::o;2234:160:3:-;2308:37;2327:17;2308:18;:37::i;:::-;2360:27;;-1:-1:-1;;;;;2360:27:3;;;;;;;;2234:160;:::o;5594:209:2:-;-1:-1:-1;;;;;;;;;;;5765:22:2;5751:46::o;6668:417:0:-;6779:12;6811:18;6822:6;6811:10;:18::i;:::-;6803:69;;;;-1:-1:-1;;;6803:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6943:12;6957:23;6984:6;-1:-1:-1;;;;;6984:19:0;7004:4;6984:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6984:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6942:67;;;;7026:52;7044:7;7053:10;7065:12;7026:17;:52::i;:::-;7019:59;6668:417;-1:-1:-1;;;;;;6668:417:0:o;2485:360:3:-;2566:37;2585:17;2566:18;:37::i;:::-;2558:104;;;;-1:-1:-1;;;2558:104:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2798:31:3;2784:55::o;7091:725:0:-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:0;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7772:12;7765:20;;-1:-1:-1;;;7765:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Metadata Hash

e90b565f8fc512a59f1efe82432fc6aeb8b4f862affd6d23b503104311543954
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.