Contract 0xF0b456250DC9990662a6F25808cC74A6d1131Ea9

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Ad
Ad
Txn Hash
Block
From
To
Value [Txn Fee]
0x81b9c29d77cf54d534104cd797c574ed731600ffb21df0f4443bd07b8177f4e553702412021-03-03 23:42:3812 mins ago0xbc9d8b7b32cae7edde8c958f401153ac5f33aa9a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135398
0xa558af6a81c0bc0861c3e99957a61ed7a11446fc0b68f821b251c5bdf4fb076b53702032021-03-03 23:40:4414 mins ago0xc1ac3133e13355f6e41807da6b5d5dfae77f60f9 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150362
0x00fa410323b98479c06a72c51c1a1bbb95a0baedb8c87c7f6917474470ca911d53698322021-03-03 23:22:1132 mins ago0xed44aef74a7e2b73ddb272fc3da329a701ce5a21 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135386
0x77fa24f30931cbc09c3a9b8c0daccdc353eb14719c25bd01cf3ae95eec9a10a753693652021-03-03 22:58:5055 mins ago0xa253ff30631deb0c1233e80154a95892ffb805b3 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150362
0x3f0368cefb583001452646ad0b819aa3ca24441bf8a1b49788ab3033ed78df6553693532021-03-03 22:58:1456 mins ago0x4a5c218cf4fb73f0c28d7a0b913a73876da21eb9 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150362
0xb80505deae9fbfc78ce71f946321595e35fda49775020bb8ef7dd353891264cb53686282021-03-03 22:21:581 hr 32 mins ago0xd50221368c56ec5fd35241039d6ab7a075710fad IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135398
0x9390435a9300a852eb2ae819c5ed2132d5db5d6b6c3b634ecd5d015e5cbf287c53683572021-03-03 22:08:251 hr 46 mins ago0xd50221368c56ec5fd35241039d6ab7a075710fad IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135362
0xe37af5b5398af5be4e8389ab35f21f3ede294dc29f7f908d33b17e8f9184b6e753669382021-03-03 20:57:282 hrs 57 mins ago0x72959497201a7e931d8460dfa28935ca8db2a91d IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150386
0x6da83114717da0fff22570cd03fd8ab7f06a75d8a45460cdb8740ad9054c80ac53666682021-03-03 20:43:583 hrs 10 mins ago0x4500d806e352b03c72641c490a5213670f56d149 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00139486
0xd2c890e389fa4ec0ea3ce0b70eb67e62030545d00693556786ea80449b3510df53664802021-03-03 20:34:343 hrs 20 mins ago0x72959497201a7e931d8460dfa28935ca8db2a91d IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135398
0x9e2c18d0cfc574844d3aedb83a6e59ca3dea5e0641826e94941e9bcf42e8025d53664362021-03-03 20:32:223 hrs 22 mins ago0x30f662d7b32be999da54d82027c171261bc50e9d IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135374
0x5b8a6b8747d9f619a4c8f09a3d7da413e53bdf1f1d8883c15d35c5b95a05d48753661202021-03-03 20:16:343 hrs 38 mins ago0x23e817b3982ba0e033dab4fa1b47088418ad6b2a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00138162
0x5a744ef85f75b87cf10991f9b5ea5f474a9eb93d206041490ed82edacf2e861b53660302021-03-03 20:12:043 hrs 42 mins ago0x23e817b3982ba0e033dab4fa1b47088418ad6b2a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00153114
0x95917f17b12cbb2b72488bb3bf7fa67f76e13a49f0c5d672fd9cd4cec4767de653659642021-03-03 20:08:463 hrs 46 mins ago0xfb8260a8cfac455fa1c889667341c055caf5d6e8 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135398
0xfc79e56a9e0b46527a44d1542e1273d83faac16af041c4cc1d6b52dc38cbd92953659232021-03-03 20:06:433 hrs 48 mins ago0x18781fc8a6ca0f70a3af386f8cd2f30267905e21 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150398
0x24a0a94c8f61b4bf0700ff18e86534f70b9328b89f2257daf32465d5706566fd53658402021-03-03 20:02:343 hrs 52 mins ago0x23e817b3982ba0e033dab4fa1b47088418ad6b2a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00153114
0xbf89a9702634c6a50da6154015d34a91d54d0877d72c97a69eb822c7866497c053649762021-03-03 19:19:224 hrs 35 mins ago0x0f852e2b80334ea2623594aeba3898806b507456 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00138138
0x7a257e4034e6fc71df35dce9689baad1831739f602ba81ea71229d70c2b60a9853649642021-03-03 19:18:464 hrs 36 mins ago0x209531d81302f74af01380eeb95710f244004755 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00153138
0x0d986da1cb1dcf52cc6226b1de84a360b9e8e55074fb147e52fbdf3a5289ee1d53649342021-03-03 19:17:164 hrs 37 mins ago0x0f852e2b80334ea2623594aeba3898806b507456 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135386
0xccf65991455c91e7595579d9bcb2f3909bf0b2b137bed1d36b1c91e70380e65953646992021-03-03 19:05:314 hrs 49 mins ago0x23e817b3982ba0e033dab4fa1b47088418ad6b2a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150362
0x1bdbc2b58f7727973d1daac714677032a8747f90e53aa945112f9a960ed3076d53645512021-03-03 18:58:074 hrs 56 mins ago0xd50221368c56ec5fd35241039d6ab7a075710fad IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135588
0x82aa519f18a46777834d004c264385561c6fd1d1f0dec0012dbd26b11139f7bd53638072021-03-03 18:20:555 hrs 33 mins ago0x57f3704eeb00574eafad4c54910ace082283c41a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135386
0xfc4f49990da882cb74086b08856159b7482029d43b92e9a8c69a15adc386244553637762021-03-03 18:19:225 hrs 35 mins ago0xdae0646352836016c23a9434c37960f369503200 IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135386
0x31d7efa7daf4df4df6808af6108e5bab0d97e976c916371e0835f536f146b9eb53637602021-03-03 18:18:345 hrs 36 mins ago0x4a23a163880ce9fac86fe557bc6a5ee7fe3a605a IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00135386
0x04647ffad1030479628e4c61ff894dc3f7e3bec9b0b76615b0284b85433c08bb53634642021-03-03 18:03:465 hrs 51 mins ago0x76cf6f0663bb530c7573b1cd67c6688addd94bbf IN  0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB0.00150386
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x81b9c29d77cf54d534104cd797c574ed731600ffb21df0f4443bd07b8177f4e553702412021-03-03 23:42:3812 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0x81b9c29d77cf54d534104cd797c574ed731600ffb21df0f4443bd07b8177f4e553702412021-03-03 23:42:3812 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 DAI Stablecoin0 BNB
0x81b9c29d77cf54d534104cd797c574ed731600ffb21df0f4443bd07b8177f4e553702412021-03-03 23:42:3812 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x19dd70371a8fe50f1fa8ff8b4cfb091a41be548f0 BNB
0xa558af6a81c0bc0861c3e99957a61ed7a11446fc0b68f821b251c5bdf4fb076b53702032021-03-03 23:40:4414 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xa558af6a81c0bc0861c3e99957a61ed7a11446fc0b68f821b251c5bdf4fb076b53702032021-03-03 23:40:4414 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 DAI Stablecoin0 BNB
0xa558af6a81c0bc0861c3e99957a61ed7a11446fc0b68f821b251c5bdf4fb076b53702032021-03-03 23:40:4414 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x19dd70371a8fe50f1fa8ff8b4cfb091a41be548f0 BNB
0xf6f5725357273d4f5eb002cdf5f0b37fe1029fc95753330b09f13adde7cf72e653699792021-03-03 23:29:3225 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xf6f5725357273d4f5eb002cdf5f0b37fe1029fc95753330b09f13adde7cf72e653699792021-03-03 23:29:3225 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 Benchmark Protocol: xMARK Token0 BNB
0xf6f5725357273d4f5eb002cdf5f0b37fe1029fc95753330b09f13adde7cf72e653699792021-03-03 23:29:3225 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xf6f5725357273d4f5eb002cdf5f0b37fe1029fc95753330b09f13adde7cf72e653699792021-03-03 23:29:3225 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x19dd70371a8fe50f1fa8ff8b4cfb091a41be548f0 BNB
0xf6f5725357273d4f5eb002cdf5f0b37fe1029fc95753330b09f13adde7cf72e653699792021-03-03 23:29:3225 mins ago 0x05185872898b6f94aa600177ef41b9334b1fa48b 0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB
0xa0e1f6f72011d44c29a6a625d8e9f0fe9c2043c97cb5f4a74fcf24855636932653699012021-03-03 23:25:3829 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xa0e1f6f72011d44c29a6a625d8e9f0fe9c2043c97cb5f4a74fcf24855636932653699012021-03-03 23:25:3829 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 Benchmark Protocol: xMARK Token0 BNB
0xa0e1f6f72011d44c29a6a625d8e9f0fe9c2043c97cb5f4a74fcf24855636932653699012021-03-03 23:25:3829 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xa0e1f6f72011d44c29a6a625d8e9f0fe9c2043c97cb5f4a74fcf24855636932653699012021-03-03 23:25:3829 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x19dd70371a8fe50f1fa8ff8b4cfb091a41be548f0 BNB
0xa0e1f6f72011d44c29a6a625d8e9f0fe9c2043c97cb5f4a74fcf24855636932653699012021-03-03 23:25:3829 mins ago 0x05185872898b6f94aa600177ef41b9334b1fa48b 0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB
0xa1454d1a70d0461e09804f3f75dbdbeffb31975ceb02c63e20af91f1afe3b6a353698652021-03-03 23:23:5030 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xa1454d1a70d0461e09804f3f75dbdbeffb31975ceb02c63e20af91f1afe3b6a353698652021-03-03 23:23:5030 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 Benchmark Protocol: xMARK Token0 BNB
0xa1454d1a70d0461e09804f3f75dbdbeffb31975ceb02c63e20af91f1afe3b6a353698652021-03-03 23:23:5030 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0xa1454d1a70d0461e09804f3f75dbdbeffb31975ceb02c63e20af91f1afe3b6a353698652021-03-03 23:23:5030 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x19dd70371a8fe50f1fa8ff8b4cfb091a41be548f0 BNB
0xa1454d1a70d0461e09804f3f75dbdbeffb31975ceb02c63e20af91f1afe3b6a353698652021-03-03 23:23:5030 mins ago 0x05185872898b6f94aa600177ef41b9334b1fa48b 0xf0b456250dc9990662a6f25808cc74a6d1131ea90 BNB
0x00fa410323b98479c06a72c51c1a1bbb95a0baedb8c87c7f6917474470ca911d53698322021-03-03 23:22:1132 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
0x00fa410323b98479c06a72c51c1a1bbb95a0baedb8c87c7f6917474470ca911d53698322021-03-03 23:22:1132 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 DAI Stablecoin0 BNB
0x00fa410323b98479c06a72c51c1a1bbb95a0baedb8c87c7f6917474470ca911d53698322021-03-03 23:22:1132 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x19dd70371a8fe50f1fa8ff8b4cfb091a41be548f0 BNB
0x1c740e9784ae98b6d5d73d917ac39b61675d01969f7184740571ce07f0b5685c53696892021-03-03 23:15:0239 mins ago 0xf0b456250dc9990662a6f25808cc74a6d1131ea9 0x05185872898b6f94aa600177ef41b9334b1fa48b0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EternalStorageProxy

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at BscScan.com on 2021-02-12
*/

// File: contracts/upgradeability/EternalStorage.sol

pragma solidity 0.7.5;

/**
 * @title EternalStorage
 * @dev This contract holds all the necessary state variables to carry out the storage of any contract.
 */
contract EternalStorage {
    mapping(bytes32 => uint256) internal uintStorage;
    mapping(bytes32 => string) internal stringStorage;
    mapping(bytes32 => address) internal addressStorage;
    mapping(bytes32 => bytes) internal bytesStorage;
    mapping(bytes32 => bool) internal boolStorage;
    mapping(bytes32 => int256) internal intStorage;
}

// File: @openzeppelin/contracts/utils/Address.sol


pragma solidity ^0.7.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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: contracts/upgradeability/Proxy.sol

pragma solidity 0.7.5;

/**
 * @title Proxy
 * @dev Gives the possibility to delegate any call to a foreign implementation.
 */
abstract contract Proxy {
    /**
     * @dev Tells the address of the implementation where every call will be delegated.
     * @return address of the implementation to which it will be delegated
     */
    function implementation() public view virtual returns (address);

    /**
     * @dev Fallback function allowing to perform a delegatecall to the given implementation.
     * This function will return whatever the implementation call returns
     */
    fallback() external payable {
        // solhint-disable-previous-line no-complex-fallback
        address _impl = implementation();
        require(_impl != address(0));
        assembly {
            /*
                0x40 is the "free memory slot", meaning a pointer to next slot of empty memory. mload(0x40)
                loads the data in the free memory slot, so `ptr` is a pointer to the next slot of empty
                memory. It's needed because we're going to write the return data of delegatecall to the
                free memory slot.
            */
            let ptr := mload(0x40)
            /*
                `calldatacopy` is copy calldatasize bytes from calldata
                First argument is the destination to which data is copied(ptr)
                Second argument specifies the start position of the copied data.
                    Since calldata is sort of its own unique location in memory,
                    0 doesn't refer to 0 in memory or 0 in storage - it just refers to the zeroth byte of calldata.
                    That's always going to be the zeroth byte of the function selector.
                Third argument, calldatasize, specifies how much data will be copied.
                    calldata is naturally calldatasize bytes long (same thing as msg.data.length)
            */
            calldatacopy(ptr, 0, calldatasize())
            /*
                delegatecall params explained:
                gas: the amount of gas to provide for the call. `gas` is an Opcode that gives
                    us the amount of gas still available to execution

                _impl: address of the contract to delegate to

                ptr: to pass copied data

                calldatasize: loads the size of `bytes memory data`, same as msg.data.length

                0, 0: These are for the `out` and `outsize` params. Because the output could be dynamic,
                        these are set to 0, 0 so the output data will not be written to memory. The output
                        data will be read using `returndatasize` and `returdatacopy` instead.

                result: This will be 0 if the call fails and 1 if it succeeds
            */
            let result := delegatecall(gas(), _impl, ptr, calldatasize(), 0, 0)
            /*

            */
            /*
                ptr current points to the value stored at 0x40,
                because we assigned it like ptr := mload(0x40).
                Because we use 0x40 as a free memory pointer,
                we want to make sure that the next time we want to allocate memory,
                we aren't overwriting anything important.
                So, by adding ptr and returndatasize,
                we get a memory location beyond the end of the data we will be copying to ptr.
                We place this in at 0x40, and any reads from 0x40 will now read from free memory
            */
            mstore(0x40, add(ptr, returndatasize()))
            /*
                `returndatacopy` is an Opcode that copies the last return data to a slot. `ptr` is the
                    slot it will copy to, 0 means copy from the beginning of the return data, and size is
                    the amount of data to copy.
                `returndatasize` is an Opcode that gives us the size of the last return data. In this case, that is the size of the data returned from delegatecall
            */
            returndatacopy(ptr, 0, returndatasize())

            /*
                if `result` is 0, revert.
                if `result` is 1, return `size` amount of data from `ptr`. This is the data that was
                copied to `ptr` from the delegatecall return data
            */
            switch result
                case 0 {
                    revert(ptr, returndatasize())
                }
                default {
                    return(ptr, returndatasize())
                }
        }
    }
}

// File: contracts/upgradeability/UpgradeabilityStorage.sol

pragma solidity 0.7.5;

/**
 * @title UpgradeabilityStorage
 * @dev This contract holds all the necessary state variables to support the upgrade functionality
 */
contract UpgradeabilityStorage {
    // Version name of the current implementation
    uint256 internal _version;

    // Address of the current implementation
    address internal _implementation;

    /**
     * @dev Tells the version name of the current implementation
     * @return uint256 representing the name of the current version
     */
    function version() external view returns (uint256) {
        return _version;
    }

    /**
     * @dev Tells the address of the current implementation
     * @return address of the current implementation
     */
    function implementation() public view virtual returns (address) {
        return _implementation;
    }
}

// File: contracts/upgradeability/UpgradeabilityProxy.sol

pragma solidity 0.7.5;




/**
 * @title UpgradeabilityProxy
 * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded
 */
contract UpgradeabilityProxy is Proxy, UpgradeabilityStorage {
    /**
     * @dev This event will be emitted every time the implementation gets upgraded
     * @param version representing the version name of the upgraded implementation
     * @param implementation representing the address of the upgraded implementation
     */
    event Upgraded(uint256 version, address indexed implementation);

    /**
     * @dev Tells the address of the current implementation
     * @return address of the current implementation
     */
    function implementation() public view override(Proxy, UpgradeabilityStorage) returns (address) {
        return UpgradeabilityStorage.implementation();
    }

    /**
     * @dev Upgrades the implementation address
     * @param version representing the version name of the new implementation to be set
     * @param implementation representing the address of the new implementation to be set
     */
    function _upgradeTo(uint256 version, address implementation) internal {
        require(_implementation != implementation);

        // This additional check verifies that provided implementation is at least a contract
        require(Address.isContract(implementation));

        // This additional check guarantees that new version will be at least greater than the privios one,
        // so it is impossible to reuse old versions, or use the last version twice
        require(version > _version);

        _version = version;
        _implementation = implementation;
        emit Upgraded(version, implementation);
    }
}

// File: contracts/upgradeability/UpgradeabilityOwnerStorage.sol

pragma solidity 0.7.5;

/**
 * @title UpgradeabilityOwnerStorage
 * @dev This contract keeps track of the upgradeability owner
 */
contract UpgradeabilityOwnerStorage {
    // Owner of the contract
    address internal _upgradeabilityOwner;

    /**
     * @dev Tells the address of the owner
     * @return the address of the owner
     */
    function upgradeabilityOwner() public view returns (address) {
        return _upgradeabilityOwner;
    }

    /**
     * @dev Sets the address of the owner
     */
    function setUpgradeabilityOwner(address newUpgradeabilityOwner) internal {
        _upgradeabilityOwner = newUpgradeabilityOwner;
    }
}

// File: contracts/upgradeability/OwnedUpgradeabilityProxy.sol

pragma solidity 0.7.5;



/**
 * @title OwnedUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with basic authorization control functionalities
 */
contract OwnedUpgradeabilityProxy is UpgradeabilityOwnerStorage, UpgradeabilityProxy {
    /**
     * @dev Event to show ownership has been transferred
     * @param previousOwner representing the address of the previous owner
     * @param newOwner representing the address of the new owner
     */
    event ProxyOwnershipTransferred(address previousOwner, address newOwner);

    /**
     * @dev the constructor sets the original owner of the contract to the sender account.
     */
    constructor() {
        setUpgradeabilityOwner(msg.sender);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyUpgradeabilityOwner() {
        require(msg.sender == upgradeabilityOwner());
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferProxyOwnership(address newOwner) external onlyUpgradeabilityOwner {
        require(newOwner != address(0));
        emit ProxyOwnershipTransferred(upgradeabilityOwner(), newOwner);
        setUpgradeabilityOwner(newOwner);
    }

    /**
     * @dev Allows the upgradeability owner to upgrade the current version of the proxy.
     * @param version representing the version name of the new implementation to be set.
     * @param implementation representing the address of the new implementation to be set.
     */
    function upgradeTo(uint256 version, address implementation) public onlyUpgradeabilityOwner {
        _upgradeTo(version, implementation);
    }

    /**
     * @dev Allows the upgradeability owner to upgrade the current version of the proxy and call the new implementation
     * to initialize whatever is needed through a low level call.
     * @param version representing the version name of the new implementation to be set.
     * @param implementation representing the address of the new implementation to be set.
     * @param data represents the msg.data to bet sent in the low level call. This parameter may include the function
     * signature of the implementation to be called with the needed payload
     */
    function upgradeToAndCall(
        uint256 version,
        address implementation,
        bytes calldata data
    ) external payable onlyUpgradeabilityOwner {
        upgradeTo(version, implementation);
        // solhint-disable-next-line avoid-call-value
        (bool status, ) = address(this).call{ value: msg.value }(data);
        require(status);
    }
}

// File: contracts/upgradeability/EternalStorageProxy.sol

pragma solidity 0.7.5;



/**
 * @title EternalStorageProxy
 * @dev This proxy holds the storage of the token contract and delegates every call to the current implementation set.
 * Besides, it allows to upgrade the token's behaviour towards further implementations, and provides basic
 * authorization control functionalities
 */
// solhint-disable-next-line no-empty-blocks
contract EternalStorageProxy is EternalStorage, OwnedUpgradeabilityProxy {

}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"ProxyOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferProxyOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version","type":"uint256"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version","type":"uint256"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"upgradeabilityOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b5061001a3361001f565b610041565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6104c6806100506000396000f3fe6080604052600436106100555760003560e01c80633ad06d161461009e57806354fd4d50146100d95780635c60da1b146101005780636fde820214610131578063a9c45fcb14610146578063f1739cae146101cb575b600061005f6101fe565b90506001600160a01b03811661007457600080fd5b60405136600082376000803683855af43d82016040523d6000833e80801561009a573d83f35b3d83fd5b3480156100aa57600080fd5b506100d7600480360360408110156100c157600080fd5b50803590602001356001600160a01b031661020d565b005b3480156100e557600080fd5b506100ee610240565b60408051918252519081900360200190f35b34801561010c57600080fd5b506101156101fe565b604080516001600160a01b039092168252519081900360200190f35b34801561013d57600080fd5b50610115610246565b6100d76004803603606081101561015c57600080fd5b8135916001600160a01b036020820135169181019060608101604082013564010000000081111561018c57600080fd5b82018360208201111561019e57600080fd5b803590602001918460018302840111640100000000831117156101c057600080fd5b509092509050610255565b3480156101d757600080fd5b506100d7600480360360208110156101ee57600080fd5b50356001600160a01b03166102fe565b600061020861038d565b905090565b610215610246565b6001600160a01b0316336001600160a01b03161461023257600080fd5b61023c828261039c565b5050565b60075490565b6006546001600160a01b031690565b61025d610246565b6001600160a01b0316336001600160a01b03161461027a57600080fd5b610284848461020d565b6000306001600160a01b0316348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102e4576040519150601f19603f3d011682016040523d82523d6000602084013e6102e9565b606091505b50509050806102f757600080fd5b5050505050565b610306610246565b6001600160a01b0316336001600160a01b03161461032357600080fd5b6001600160a01b03811661033657600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961035f610246565b604080516001600160a01b03928316815291841660208301528051918290030190a161038a81610432565b50565b6008546001600160a01b031690565b6008546001600160a01b03828116911614156103b757600080fd5b6103c081610454565b6103c957600080fd5b60075482116103d757600080fd5b6007829055600880546001600160a01b0383166001600160a01b031990911681179091556040805184815290517f4289d6195cf3c2d2174adf98d0e19d4d2d08887995b99cb7b100e7ffe795820e9181900360200190a25050565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061048857508115155b94935050505056fea26469706673582212206707d8a32a5e8f60eb3e8e11738097a8d312e184eb6b79440ba4b78dba64a0af64736f6c63430007050033

Deployed ByteCode Sourcemap

18359:79:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7581:13;7597:16;:14;:16::i;:::-;7581:32;-1:-1:-1;;;;;;7632:19:0;;7624:28;;;;;;8090:4;8084:11;8871:14;8868:1;8863:3;8850:36;9808:1;9805;9789:14;9784:3;9777:5;9770;9757:53;10498:16;10493:3;10489:26;10483:4;10476:40;11010:16;11007:1;11002:3;10987:40;11294:6;11318:78;;;;11457:16;11452:3;11445:29;11318:78;11360:16;11355:3;11348:29;16797:145;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16797:145:0;;;;;;-1:-1:-1;;;;;16797:145:0;;:::i;:::-;;12113:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13247:159;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;13247:159:0;;;;;;;;;;;;;;14734:107;;;;;;;;;;;;;:::i;17534:370::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17534:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17534:370:0;;-1:-1:-1;17534:370:0;-1:-1:-1;17534:370:0;:::i;16249:250::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16249:250:0;-1:-1:-1;;;;;16249:250:0;;:::i;13247:159::-;13333:7;13360:38;:36;:38::i;:::-;13353:45;;13247:159;:::o;16797:145::-;16030:21;:19;:21::i;:::-;-1:-1:-1;;;;;16016:35:0;:10;-1:-1:-1;;;;;16016:35:0;;16008:44;;;;;;16899:35:::1;16910:7;16919:14;16899:10;:35::i;:::-;16797:145:::0;;:::o;12113:85::-;12182:8;;12113:85;:::o;14734:107::-;14813:20;;-1:-1:-1;;;;;14813:20:0;14734:107;:::o;17534:370::-;16030:21;:19;:21::i;:::-;-1:-1:-1;;;;;16016:35:0;:10;-1:-1:-1;;;;;16016:35:0;;16008:44;;;;;;17708:34:::1;17718:7;17727:14;17708:9;:34::i;:::-;17809:11;17834:4;-1:-1:-1::0;;;;;17826:18:0::1;17853:9;17865:4;;17826:44;;;;;;;;;;::::0;;::::1;::::0;-1:-1:-1;17826:44:0::1;::::0;-1:-1:-1;17826:44:0;;-1:-1:-1;;17826:44:0;;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17808:62;;;17889:6;17881:15;;;::::0;::::1;;16063:1;17534:370:::0;;;;:::o;16249:250::-;16030:21;:19;:21::i;:::-;-1:-1:-1;;;;;16016:35:0;:10;-1:-1:-1;;;;;16016:35:0;;16008:44;;;;;;-1:-1:-1;;;;;16351:22:0;::::1;16343:31;;;::::0;::::1;;16390:58;16416:21;:19;:21::i;:::-;16390:58;::::0;;-1:-1:-1;;;;;16390:58:0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;16459:32;16482:8;16459:22;:32::i;:::-;16249:250:::0;:::o;12339:105::-;12421:15;;-1:-1:-1;;;;;12421:15:0;12339:105;:::o;13661:639::-;13750:15;;-1:-1:-1;;;;;13750:33:0;;;:15;;:33;;13742:42;;;;;;13900:34;13919:14;13900:18;:34::i;:::-;13892:43;;;;;;14160:8;;14150:7;:18;14142:27;;;;;;14182:8;:18;;;14211:15;:32;;-1:-1:-1;;;;;14211:32:0;;-1:-1:-1;;;;;;14211:32:0;;;;;;;;14259:33;;;;;;;;;;;;;;;;;13661:639;;:::o;14910:137::-;14994:20;:45;;-1:-1:-1;;;;;;14994:45:0;-1:-1:-1;;;;;14994:45:0;;;;;;;;;;14910:137::o;1347:619::-;1407:4;1875:20;;1718:66;1915:23;;;;;;:42;;-1:-1:-1;1942:15:0;;;1915:42;1907:51;1347:619;-1:-1:-1;;;;1347:619:0:o

Swarm Source

ipfs://6707d8a32a5e8f60eb3e8e11738097a8d312e184eb6b79440ba4b78dba64a0af
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.