ETH Price: $1,876.65 (+3.30%)
Gas: 24 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multi Chain

Multichain Addresses

0 address found via
Transaction Hash
Method
Block
From
To
Value
Upgrade To104414742020-07-12 0:34:451060 days 7 hrs ago1594514085IN
0x0cB781...d43e7040
0 ETH0.0007407620
Set Mediator Con...102824702020-06-17 9:39:271084 days 22 hrs ago1592386767IN
0x0cB781...d43e7040
0 ETH0.0010575734
Upgrade To And C...102823422020-06-17 9:09:341084 days 22 hrs ago1592384974IN
0x0cB781...d43e7040
0 ETH0.0034783638
Execute Signatur...98913472020-04-17 17:46:351145 days 14 hrs ago1587145595IN
0x0cB781...d43e7040
0 ETH0.001414688
Execute Signatur...98783142020-04-15 17:18:171147 days 14 hrs ago1586971097IN
0x0cB781...d43e7040
0 ETH0.001294688
Execute Signatur...98779292020-04-15 15:50:131147 days 16 hrs ago1586965813IN
0x0cB781...d43e7040
0 ETH0.001414488
Execute Signatur...97481342020-03-26 16:46:281167 days 15 hrs ago1585241188IN
0x0cB781...d43e7040
0 ETH0.001414588
Execute Signatur...92675182020-01-12 17:41:181241 days 14 hrs ago1578850878IN
0x0cB781...d43e7040
0 ETH0.000265251.5
Execute Signatur...92309782020-01-07 3:16:341247 days 4 hrs ago1578366994IN
0x0cB781...d43e7040
0 ETH0.000353672
Execute Signatur...88622922019-11-03 1:30:531312 days 6 hrs ago1572744653IN
0x0cB781...d43e7040
0 ETH0.000154231
Execute Signatur...88617272019-11-02 23:09:511312 days 8 hrs ago1572736191IN
0x0cB781...d43e7040
0 ETH0.000154291
Execute Signatur...88613902019-11-02 21:59:081312 days 10 hrs ago1572731948IN
0x0cB781...d43e7040
0 ETH0.000154291
Execute Signatur...87378832019-10-14 6:30:141332 days 1 hr ago1571034614IN
0x0cB781...d43e7040
0 ETH0.000169291
Execute Signatur...87000342019-10-08 7:31:021338 days 38 mins ago1570519862IN
0x0cB781...d43e7040
0 ETH0.000846155
Execute Signatur...86385802019-09-28 17:19:021347 days 14 hrs ago1569691142IN
0x0cB781...d43e7040
0 ETH0.0027087216
Execute Signatur...85437002019-09-13 21:39:451362 days 10 hrs ago1568410785IN
0x0cB781...d43e7040
0 ETH0.001540589.1
Execute Signatur...83400072019-08-13 4:17:131394 days 3 hrs ago1565669833IN
0x0cB781...d43e7040
0 ETH0.000203071.2
Execute Signatur...81591702019-07-16 1:58:021422 days 6 hrs ago1563242282IN
0x0cB781...d43e7040
0 ETH0.000186151.1
Execute Signatur...78002952019-05-21 1:22:061478 days 6 hrs ago1558401726IN
0x0cB781...d43e7040
0 ETH0.000507883
Execute Signatur...75439282019-04-11 1:48:481518 days 6 hrs ago1554947328IN
0x0cB781...d43e7040
0 ETH0.000507693
Execute Signatur...75423092019-04-10 19:49:041518 days 12 hrs ago1554925744IN
0x0cB781...d43e7040
0 ETH0.000308462
Execute Signatur...75416682019-04-10 17:21:261518 days 14 hrs ago1554916886IN
0x0cB781...d43e7040
0 ETH0.000462883
Execute Signatur...75346632019-04-09 15:13:131519 days 16 hrs ago1554822793IN
0x0cB781...d43e7040
0 ETH0.000338592
Execute Signatur...75301772019-04-08 22:30:331520 days 9 hrs ago1554762633IN
0x0cB781...d43e7040
0 ETH0.000338332
Execute Signatur...75033522019-04-04 18:44:551524 days 13 hrs ago1554403495IN
0x0cB781...d43e7040
0 ETH0.000771795
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EternalStorageProxy

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-03-25
*/

// File: contracts/upgradeability/EternalStorage.sol

pragma solidity 0.4.19;


/**
 * @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: contracts/upgradeability/Proxy.sol

pragma solidity 0.4.19;


/**
 * @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
  */
    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 () payable public {
        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.19;


/**
 * @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 string representing the name of the current version
    */
    function version() public 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.19;




/**
 * @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);
        require(version > _version);
        _version = version;
        _implementation = implementation;
        Upgraded(version, implementation);
    }
}

// File: contracts/upgradeability/UpgradeabilityOwnerStorage.sol

pragma solidity 0.4.19;


/**
 * @title UpgradeabilityOwnerStorage
 * @dev This contract keeps track of the upgradeability owner
 */
contract UpgradeabilityOwnerStorage {
    // Owner of the contract
    address private _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.19;




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

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

    /**
    * @dev Tells the address of the proxy owner
    * @return the address of the proxy owner
    */
    function proxyOwner() public view returns (address) {
        return 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) public onlyProxyOwner {
        require(newOwner != address(0));
        ProxyOwnershipTransferred(proxyOwner(), 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 onlyProxyOwner {
        _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) payable public onlyProxyOwner {
        upgradeTo(version, implementation);
        require(address(this).call.value(msg.value)(data));
    }
}

// File: contracts/upgradeability/EternalStorageProxy.sol

pragma solidity 0.4.19;




/**
 * @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
 */
contract EternalStorageProxy is OwnedUpgradeabilityProxy, EternalStorage {}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"proxyOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"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"}]

606060405261001a3364010000000061042e61001f82021704565b610041565b60008054600160a060020a031916600160a060020a0392909216919091179055565b610489806100506000396000f3006060604052600436106100825763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100cd5780633ad06d16146100fc57806354fd4d50146101205780635c60da1b146101455780636fde820214610158578063a9c45fcb1461016b578063f1739cae146101c5575b600061008c6101e4565b9050600160a060020a03811615156100a357600080fd5b60405136600082376000803683855af43d82016040523d6000833e8080156100c9573d83f35b3d83fd5b34156100d857600080fd5b6100e06101f3565b604051600160a060020a03909116815260200160405180910390f35b341561010757600080fd5b61011e600435600160a060020a0360243516610202565b005b341561012b57600080fd5b610133610237565b60405190815260200160405180910390f35b341561015057600080fd5b6100e06101e4565b341561016357600080fd5b6100e061023d565b61011e600480359060248035600160a060020a0316919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061024c95505050505050565b34156101d057600080fd5b61011e600160a060020a0360043516610309565b600254600160a060020a031690565b60006101fd61023d565b905090565b61020a6101f3565b600160a060020a031633600160a060020a031614151561022957600080fd5b610233828261039e565b5050565b60015490565b600054600160a060020a031690565b6102546101f3565b600160a060020a031633600160a060020a031614151561027357600080fd5b61027d8383610202565b30600160a060020a0316348260405180828051906020019080838360005b838110156102b357808201518382015260200161029b565b50505050905090810190601f1680156102e05780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876187965a03f192505050151561030457600080fd5b505050565b6103116101f3565b600160a060020a031633600160a060020a031614151561033057600080fd5b600160a060020a038116151561034557600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961036e6101f3565b82604051600160a060020a039283168152911660208201526040908101905180910390a161039b8161042e565b50565b600254600160a060020a03828116911614156103b957600080fd5b60015482116103c757600080fd5b60018290556002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091557f4289d6195cf3c2d2174adf98d0e19d4d2d08887995b99cb7b100e7ffe795820e8360405190815260200160405180910390a25050565b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a72305820a9f0e0bb1f60f4f29aceb34af99e9a621aa2af6f4705110eafe924bc7a1ceb910029

Swarm Source

bzzr://a9f0e0bb1f60f4f29aceb34af99e9a621aa2af6f4705110eafe924bc7a1ceb91

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

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.