Contract 0x99FB1a25caeB9c3a5Bf132686E2fe5e27BC0e2dd

Contract Overview

Balance:
0 Ether

Token:
Txn Hash
Method
Block
From
To
Value
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbfRelay Tokens286874472021-12-09 15:41:52207 days 9 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00339182 20
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596bRelay Tokens286874092021-12-09 15:38:00207 days 9 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00339182 20
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87eRelay Tokens286873002021-12-09 15:25:24207 days 10 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00339182 20
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3Relay Tokens286871432021-12-09 15:07:00207 days 10 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00339182 20
0xbf838963d9f4aedc5051b617e65bbd9c9b78eb13f4c1b2762059c46d3e749345Relay Tokens286801912021-12-09 1:11:00208 days 16 mins ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00169591 10
0xb0b1e454d576c3576598a51c65de738fa72d5a39e4d90a397e6c08e40715903dRelay Tokens286798672021-12-09 0:31:36208 days 55 mins ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00186691 10
0x329b925cca603f80a410b0a5b261a5e6db184ae471059f2cc54b42e4ea8ceb5cRelay Tokens286791422021-12-08 22:56:00208 days 2 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00084795 5
0x34f85c6d5d5592c5bae25d768e114986235226bbb807738eab73b84d590f00c4Relay Tokens286774372021-12-08 19:22:00208 days 6 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00084795 5
0x3b25d1d9406b0366820b91cbf225639d85b1334fc777dd4d76c83b93af448dd1Relay Tokens286774052021-12-08 19:17:48208 days 6 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00093345 5
0x9cabaff284fd96bc00f3a9ab36fdcf1f0cca102735fdd17a32ac722f31a10786Relay Tokens286654382021-12-07 18:33:36209 days 6 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00050877 3
0xac1520c9fcb07d93d2a4514834f0b74cdc02f41027ef42ccefc8b07622573acfRelay Tokens286654092021-12-07 18:30:36209 days 6 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00050877 3
0x9323958a01c89a7d04eb752a3db614dd2ba0f649ad533a9a65dda530e67a23e1Relay Tokens286641962021-12-07 16:12:00209 days 9 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00050877 3
0x28f01da19d455b4f1cd5806c65967f9f8c395539d22b088e03aed0b4562b6d6dRelay Tokens286640872021-12-07 15:58:36209 days 9 hrs ago0x1a9cee6e1d21c3c09fb83a980ea54299f01920cd IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00056007 3
0xbd673533d4dfc87bfe4786e4f489b91d2cbe1e82dc82665319d56165b78f70ceRelay Tokens285946012021-11-30 20:51:16216 days 4 hrs ago0x34bfcd82f1e3dac79c6b3d033ab871ee4f6aaeca IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00016751 1
0xb3a7d79dc22653b7a116a776c2d82b7b36227215dacf4607054ac2b37500e0feRelay Tokens285945782021-11-30 20:46:40216 days 4 hrs ago0x34bfcd82f1e3dac79c6b3d033ab871ee4f6aaeca IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.00018189 1
0x21376cce3a41a1a0733b911c959e649bbad0a297c4a526d62ecb0a3387604fe7Relay Tokens244763672021-04-26 9:12:56434 days 16 hrs ago0x13eba327774c6feac18f3c2793364d05275afeb6 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000153912
0x4963adc74713140f294c7d70e1f0e1fade747cf14bd1bf8a4850c5e072459016Relay Tokens234289922021-02-12 1:51:12507 days 23 hrs ago0x0010154e6b11df919411b4b83aaf4fcc0d5f99bb IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000721089.5
0xea33abd69457a6514cc6494114f5c93f3beb4e76ae2d26f43113ca0c9ca82381Upgrade To188999572020-06-05 22:41:48759 days 2 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000037671
0x59d775e8a24758c003223b812be5f6d652a46adc919f95f61e9ca16fc56cf9fbSet Fee Manager ...180510892020-04-20 22:08:12805 days 3 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000421449
0xa29002c502dc13904fb9f573d644c47b79f6fb941aae5bb12878801a5b1a2037Upgrade To180104062020-04-18 22:06:44807 days 3 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000339059
0xcfd7998c5916b1ae75f820281815270a1155199f99381acf795460d0ac92f38eRelay Tokens175932392020-03-27 21:22:32829 days 4 hrs ago0xbf3d6f830ce263cae987193982192cd990442b53 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.018525286
0x5d2ecb126c85286781b7dc2f450792565f99683da8e489fa84ef403b0276853fTransfer Proxy O...175930112020-03-27 21:02:52829 days 4 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000026911
0x81215be93db6292a6911d1c9177524e0250b282069775c0e5237cb8805cb3f14Initialize175930082020-03-27 21:02:36829 days 4 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000297171
0x39b89c0d32d5c5981d870a5fcfb3aefef523cc19f1e0e9cf1c8ad457deccfa43Upgrade To175929982020-03-27 21:01:40829 days 4 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether0.000067661
0xf0fc9eabd00cf46679b8b21e88a442bf77d2616a3a81f959d0d709839898ff6d0x60806040175929852020-03-27 21:00:32829 days 4 hrs ago0xe4c2820ec69410907f312b7487af3dfb32640c33 IN  Create: EternalStorageProxy0 Ether0.000288821
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbf286874472021-12-09 15:41:52207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xfe446bef1dbf7afe24e81e05bc8b271c1ba9a5600 Ether
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbf286874472021-12-09 15:41:52207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbf286874472021-12-09 15:41:52207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbf286874472021-12-09 15:41:52207 days 9 hrs ago 0xff94183659f549d6273349696d73686ee1d2ac83 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbf286874472021-12-09 15:41:52207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0xcd063c86da2df0dbacf16fd9070bcf41cc517ee13a3248908ec1b2132fd13fbf286874472021-12-09 15:41:52207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596b286874092021-12-09 15:38:00207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xfe446bef1dbf7afe24e81e05bc8b271c1ba9a5600 Ether
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596b286874092021-12-09 15:38:00207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596b286874092021-12-09 15:38:00207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596b286874092021-12-09 15:38:00207 days 9 hrs ago 0xff94183659f549d6273349696d73686ee1d2ac83 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596b286874092021-12-09 15:38:00207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0x40eb5f9b51464def9ac1aca29da6d4562b62d6667f53a882e901cab5d13f596b286874092021-12-09 15:38:00207 days 9 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87e286873002021-12-09 15:25:24207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xfe446bef1dbf7afe24e81e05bc8b271c1ba9a5600 Ether
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87e286873002021-12-09 15:25:24207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87e286873002021-12-09 15:25:24207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87e286873002021-12-09 15:25:24207 days 10 hrs ago 0xff94183659f549d6273349696d73686ee1d2ac83 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87e286873002021-12-09 15:25:24207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0xdd2a272706de3ad87f3a3f77aed93049af4e3ad4ed4fb24d185837aece7bc87e286873002021-12-09 15:25:24207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3286871432021-12-09 15:07:00207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xfe446bef1dbf7afe24e81e05bc8b271c1ba9a5600 Ether
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3286871432021-12-09 15:07:00207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3286871432021-12-09 15:07:00207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3286871432021-12-09 15:07:00207 days 10 hrs ago 0xff94183659f549d6273349696d73686ee1d2ac83 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd0 Ether
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3286871432021-12-09 15:07:00207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
0x0e9544d42021548df812f62773d4634d56b9fbb03ec1f886b07c5d6c2cbd77c3286871432021-12-09 15:07:00207 days 10 hrs ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0x60011c08fa69f8d8f1660221db35b7edaf3d8ddb0 Ether
0x44ba84cb29b56525f2fea09b22e46452f1ba94b093a4b6f327896b93c54d69e2286802602021-12-09 1:18:48208 days 8 mins ago 0x99fb1a25caeb9c3a5bf132686e2fe5e27bc0e2dd 0xff94183659f549d6273349696d73686ee1d2ac830 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EternalStorageProxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion
/**
 *Submitted for verification at Etherscan.io on 2020-03-27
*/

// File: contracts/upgradeability/EternalStorage.sol

pragma solidity 0.4.24;

/**
 * @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-solidity/contracts/AddressUtils.sol

pragma solidity ^0.4.24;


/**
 * Utility library of inline functions on addresses
 */
library AddressUtils {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param _addr address to check
   * @return whether the target address is a contract
   */
  function isContract(address _addr) internal view returns (bool) {
    uint256 size;
    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    // solium-disable-next-line security/no-inline-assembly
    assembly { size := extcodesize(_addr) }
    return size > 0;
  }

}

// File: contracts/upgradeability/Proxy.sol

pragma solidity 0.4.24;

/**
 * @title Proxy
 * @dev Gives the possibility to delegate any call to a foreign implementation.
 */
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
    */
    /* solcov ignore next */
    function implementation() public view returns (address);

    /**
    * @dev Fallback function allowing to perform a delegatecall to the given implementation.
    * This function will return whatever the implementation call returns
    */
    function() public 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.4.24;

/**
 * @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 returns (address) {
        return _implementation;
    }
}

// File: contracts/upgradeability/UpgradeabilityProxy.sol

pragma solidity 0.4.24;




/**
 * @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 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(AddressUtils.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.4.24;

/**
 * @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.4.24;



/**
 * @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() public {
        setUpgradeabilityOwner(msg.sender);
    }

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

    /**
    * @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 data)
        external
        payable
        onlyUpgradeabilityOwner
    {
        upgradeTo(version, implementation);
        // solhint-disable-next-line avoid-call-value
        require(address(this).call.value(msg.value)(data));
    }
}

// File: contracts/upgradeability/EternalStorageProxy.sol

pragma solidity 0.4.24;



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

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

60806040526100163364010000000061001b810204565b61003d565b60068054600160a060020a031916600160a060020a0392909216919091179055565b6103e08061004c6000396000f3006080604052600436106100775763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633ad06d1681146100c257806354fd4d50146100e85780635c60da1b1461010f5780636fde820214610140578063a9c45fcb14610155578063f1739cae14610179575b600061008161019a565b9050600160a060020a038116151561009857600080fd5b60405136600082376000803683855af43d82016040523d6000833e8080156100be573d83f35b3d83fd5b3480156100ce57600080fd5b506100e6600435600160a060020a03602435166101a9565b005b3480156100f457600080fd5b506100fd6101d3565b60408051918252519081900360200190f35b34801561011b57600080fd5b5061012461019a565b60408051600160a060020a039092168252519081900360200190f35b34801561014c57600080fd5b506101246101d9565b6100e6600480359060248035600160a060020a0316916044359182019101356101e8565b34801561018557600080fd5b506100e6600160a060020a0360043516610250565b600854600160a060020a031690565b6101b16101d9565b600160a060020a031633146101c557600080fd5b6101cf82826102d8565b5050565b60075490565b600654600160a060020a031690565b6101f06101d9565b600160a060020a0316331461020457600080fd5b61020e84846101a9565b30600160a060020a03163483836040518083838082843782019150509250505060006040518083038185875af192505050151561024a57600080fd5b50505050565b6102586101d9565b600160a060020a0316331461026c57600080fd5b600160a060020a038116151561028157600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96102aa6101d9565b60408051600160a060020a03928316815291841660208301528051918290030190a16102d58161037d565b50565b600854600160a060020a03828116911614156102f357600080fd5b6102fc816103ac565b151561030757600080fd5b600754821161031557600080fd5b600782905560088054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911681179091556040805184815290517f4289d6195cf3c2d2174adf98d0e19d4d2d08887995b99cb7b100e7ffe795820e9181900360200190a25050565b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b11905600a165627a7a7230582078bac02704e0c07980df83f6082a0453ef0e0259d68860b6e0f2c5dc0d11c56c0029

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.