Contract 0xFEaB457D95D9990b7eb6c943c839258245541754 1

Contract Overview

Balance:
0 Ether

Token:
Txn Hash
Method
Block
From
To
Value
0xf55922f8733dfd4c97f0f80be22e4dea8fccc10c899cc9bf92a4b598bce9dd0fRelay Tokens109039042022-06-23 19:15:2011 days 5 hrs ago0x27f8559c11838fef343633d703ca8ac8b6d3772e IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018135 1.0000023
0x398a531713c39ed4eba62ed3707df5f01ac67f1e97dacf65731fce8a6f705befRelay Tokens106967632022-05-18 9:43:2047 days 15 hrs ago0xd96f849dfbbeed125774dbb51195c91b262abae3 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00005498 1.50011335
0x3faa75a9edbae3dd4cddd0a05af43bbadd4ad90f2dd8316d6963f7509af773b9Relay Tokens106756442022-05-14 17:04:4051 days 7 hrs ago0x6e6a1e41a5620acd3f537cadbf99f619eb1fe7c6 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00043584 2.5778069
0x1513bef07bf03141390f22948a64fa91aadfe19539d296c202e90b7e32fee55bRelay Tokens106755932022-05-14 16:51:5451 days 7 hrs ago0x6e6a1e41a5620acd3f537cadbf99f619eb1fe7c6 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00021641 1.16250523
0xf8b1579c4d62ceb32eb970c9ff4769240e122865f365771b372af53d01da128dRelay Tokens105989432022-05-01 7:06:2464 days 17 hrs ago0x940398ddb85ffb9cec7b2261457e16ac2ee29809 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00019597 1.0526832
0xdd6c4e160d6dba05bd156a9018f8fa471154c4848a387f6097c5a354be581d5fRelay Tokens105669212022-04-25 16:55:2270 days 7 hrs ago0x3b11ab56fb4b3f73d726ba6a1a697230fc07e8a8 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00055845 3.00000001
0x038bbe7c6d4baa22c385c2c0aeebb1e7be98af85e4a733fe23ca444dac2d93aaTransfer105548392022-04-23 14:25:4772 days 10 hrs ago0x3b11ab56fb4b3f73d726ba6a1a697230fc07e8a8 IN  0xfeab457d95d9990b7eb6c943c8392582455417540.03750346 Ether0.00010694 4.1
0xf1bea124c13aeb3ef01c1e012164c7ae833d3d4babf49a4f7eef1b2ecf9989ccRelay Tokens105545932022-04-23 13:24:1472 days 11 hrs ago0x3b11ab56fb4b3f73d726ba6a1a697230fc07e8a8 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00020476 1.10000002
0x1d5157f1b42907446c81b814bb4950399ac350436eae455b1b77f9027a77f4c5Relay Tokens105259082022-04-18 13:16:4677 days 11 hrs ago0x940398ddb85ffb9cec7b2261457e16ac2ee29809 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018599 1.10003865
0xf42aaab906436ad3bca1737ee4badac3fee39c94b68730bc7791993915ffe87cRelay Tokens105257382022-04-18 12:34:1477 days 12 hrs ago0xefa965cde51c7a855ea7e607453bb84df7442ab3 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00020476 1.09999895
0xa0c511d4a2c89cd79aa7e6949a555d4a91d74567b6d9cfcfd41d8a7b7855a7e9Relay Tokens105085032022-04-15 12:31:3880 days 12 hrs ago0xebabacb71e6bed4cc388745eb4d232e3e99d7e2a IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018136 1.00000004
0x635d6baa25b4c70cdaf493a0b9385cb84b497659dd4bd240b889048704a46a21Relay Tokens102223482022-02-24 5:41:32130 days 19 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018137 1
0x54bcbfefac6e73b9685c6b3578029fc89a8bc700f6385786e486386accc14693Relay Tokens101727272022-02-15 14:44:43139 days 10 hrs ago0x0e88d68ddd2ae0465acc9552260569bcf4c33685 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00003878 1.00000844
0x66b469ec9e862e701a0b6a8440488197cf332f27d6487204e3c66875023ca1a7Relay Tokens99743412022-01-11 19:05:35174 days 5 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018617 1.00000001
0x959c28e3c6833877ba3ce903a545b6ff6b78e6448f5460476e25403074e13182Relay Tokens98518832021-12-21 7:50:36195 days 16 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018617 1.00000001
0x548f42bf5741d241953819515b55f01fac7fb7573366c870a64864cbe62086e7Relay Tokens98488522021-12-20 19:12:37196 days 5 hrs ago0x4194a4199ba1bb6a719114c32bdf50aab8f5e14a IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00019222 2.00000001
0xd11943024a393e88586722b98579d319874a4228baf59e5d7f96673cb0d880f3Relay Tokens97700632021-12-06 23:50:45210 days 54 mins ago0x61bfcf2fa9e7d8cef32c1778444e2a4c5e315b21 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.000164261
0x9a567b6c8d2e8ab403b5846e1267ae77620c3a0215c18418c4363703c7e39fd0Relay Tokens97692962021-12-06 20:38:46210 days 4 hrs ago0x61bfcf2fa9e7d8cef32c1778444e2a4c5e315b21 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.000169061
0xc25c8dc6f67dae857f35bfc73a0b4a617f8b515b71312282a6eb3976ab9645d8Relay Tokens97677842021-12-06 14:20:08210 days 10 hrs ago0x8fc0bdb2973d03aeea73772157bee38570274699 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00016426 1.00000001
0xb2abdff69379f9cebca9982cf66f2220aa7896ab167d1d0bbde8cebd52cdcff1Relay Tokens97677572021-12-06 14:13:23210 days 10 hrs ago0x8fc0bdb2973d03aeea73772157bee38570274699 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00018615 1.00000001
0x131966ced1854ca2d0867a7eee8f27a27f68e4c78807dbf261466a9771df8b82Relay Tokens96765062021-11-20 17:51:29226 days 6 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00019097 1
0x7e440ffe7f307f7d82a2f33bd3309e0af7a80ab80e29ed173c09e47774760bbeRelay Tokens96226162021-11-11 9:06:11235 days 15 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00017386 1.00000227
0x286ecc640f3fd2e525e8b028fb89761210c1224063fa6d6d782106b96dc5933dRelay Tokens96226012021-11-11 9:02:26235 days 15 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00019097 1.00000645
0xc71fb5f55a23447b683e371ae4fa8895472f57a5900c2852a539bdb96f63f19eRelay Tokens96225942021-11-11 9:00:41235 days 15 hrs ago0x122ec44c3fc85d3f1ddd72d5fe940b7d61534465 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00003879 1.00001845
0xb9082b5f2e482e880697a50de7b431733bd0dc32caca6b1a0ef8b48b8e69070bRelay Tokens95572662021-10-30 18:41:51247 days 6 hrs ago0xf20451084935435949291f8288d7896f6fe36ab3 IN  0xfeab457d95d9990b7eb6c943c8392582455417540 Ether0.00009611 1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7fbf027febd976d8c92efab2c564e45b7ea5b5f2ed68f42e148cbf7e783e08c8109606822022-07-03 16:50:441 day 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xdf82c9014f127243ce1305dfe54151647d74b27a0 Ether
0x7fbf027febd976d8c92efab2c564e45b7ea5b5f2ed68f42e148cbf7e783e08c8109606822022-07-03 16:50:441 day 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0x7fbf027febd976d8c92efab2c564e45b7ea5b5f2ed68f42e148cbf7e783e08c8109606822022-07-03 16:50:441 day 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0x7fbf027febd976d8c92efab2c564e45b7ea5b5f2ed68f42e148cbf7e783e08c8109606822022-07-03 16:50:441 day 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0x2f9cebf5de3bc25e0643d0e66134e5bf5c48e1910 Ether
0x7fbf027febd976d8c92efab2c564e45b7ea5b5f2ed68f42e148cbf7e783e08c8109606822022-07-03 16:50:441 day 7 hrs ago 0xd4075fb57fcf038bfc702c915ef9592534bed5c1 0xfeab457d95d9990b7eb6c943c8392582455417540 Ether
0xfd79b3448e42a06db55930e23576ce181ae82c0c61bb4e6b75a6d3e7c68aed6a109486482022-07-01 14:37:203 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xdf82c9014f127243ce1305dfe54151647d74b27a0 Ether
0xfd79b3448e42a06db55930e23576ce181ae82c0c61bb4e6b75a6d3e7c68aed6a109486482022-07-01 14:37:203 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0xfd79b3448e42a06db55930e23576ce181ae82c0c61bb4e6b75a6d3e7c68aed6a109486482022-07-01 14:37:203 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0xfd79b3448e42a06db55930e23576ce181ae82c0c61bb4e6b75a6d3e7c68aed6a109486482022-07-01 14:37:203 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0x2f9cebf5de3bc25e0643d0e66134e5bf5c48e1910 Ether
0xfd79b3448e42a06db55930e23576ce181ae82c0c61bb4e6b75a6d3e7c68aed6a109486482022-07-01 14:37:203 days 10 hrs ago 0xd4075fb57fcf038bfc702c915ef9592534bed5c1 0xfeab457d95d9990b7eb6c943c8392582455417540 Ether
0xac1dcdf15a6bbd834ab0882562f57b8be2f9e2c16c5fba6558ce44026a43835e109486462022-07-01 14:36:503 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xdf82c9014f127243ce1305dfe54151647d74b27a0 Ether
0xac1dcdf15a6bbd834ab0882562f57b8be2f9e2c16c5fba6558ce44026a43835e109486462022-07-01 14:36:503 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0xac1dcdf15a6bbd834ab0882562f57b8be2f9e2c16c5fba6558ce44026a43835e109486462022-07-01 14:36:503 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0xac1dcdf15a6bbd834ab0882562f57b8be2f9e2c16c5fba6558ce44026a43835e109486462022-07-01 14:36:503 days 10 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0x2f9cebf5de3bc25e0643d0e66134e5bf5c48e1910 Ether
0xac1dcdf15a6bbd834ab0882562f57b8be2f9e2c16c5fba6558ce44026a43835e109486462022-07-01 14:36:503 days 10 hrs ago 0xd4075fb57fcf038bfc702c915ef9592534bed5c1 0xfeab457d95d9990b7eb6c943c8392582455417540 Ether
0xccfc764e3ada79d8b968be45c82f39c8962c28dcda1ceb913d012399b0b21f9d109443412022-06-30 20:38:464 days 4 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xdf82c9014f127243ce1305dfe54151647d74b27a0 Ether
0xccfc764e3ada79d8b968be45c82f39c8962c28dcda1ceb913d012399b0b21f9d109443412022-06-30 20:38:464 days 4 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0xccfc764e3ada79d8b968be45c82f39c8962c28dcda1ceb913d012399b0b21f9d109443412022-06-30 20:38:464 days 4 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0xccfc764e3ada79d8b968be45c82f39c8962c28dcda1ceb913d012399b0b21f9d109443412022-06-30 20:38:464 days 4 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0x2f9cebf5de3bc25e0643d0e66134e5bf5c48e1910 Ether
0xccfc764e3ada79d8b968be45c82f39c8962c28dcda1ceb913d012399b0b21f9d109443412022-06-30 20:38:464 days 4 hrs ago 0xd4075fb57fcf038bfc702c915ef9592534bed5c1 0xfeab457d95d9990b7eb6c943c8392582455417540 Ether
0x5e820c542de618cbde3a0741c53d6a8b1c8db650fdc934126006cbc065c70d2b109435022022-06-30 17:08:384 days 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xdf82c9014f127243ce1305dfe54151647d74b27a0 Ether
0x5e820c542de618cbde3a0741c53d6a8b1c8db650fdc934126006cbc065c70d2b109435022022-06-30 17:08:384 days 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0x5e820c542de618cbde3a0741c53d6a8b1c8db650fdc934126006cbc065c70d2b109435022022-06-30 17:08:384 days 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0xd4075fb57fcf038bfc702c915ef9592534bed5c10 Ether
0x5e820c542de618cbde3a0741c53d6a8b1c8db650fdc934126006cbc065c70d2b109435022022-06-30 17:08:384 days 7 hrs ago 0xfeab457d95d9990b7eb6c943c839258245541754 0x2f9cebf5de3bc25e0643d0e66134e5bf5c48e1910 Ether
0x5e820c542de618cbde3a0741c53d6a8b1c8db650fdc934126006cbc065c70d2b109435022022-06-30 17:08:384 days 7 hrs ago 0xd4075fb57fcf038bfc702c915ef9592534bed5c1 0xfeab457d95d9990b7eb6c943c8392582455417540 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-05-21
*/

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