Contract Overview
Balance: 0 Ether
Transactions: 15 txns
 Latest 15 txns

TxHash Age From To Value [TxFee]
0x42a56e88a3a664f3f7c5ffc5f1fd889e3c320ed2dcb73dc59ece66a1770170f028 days 16 hrs ago0xcb0236b37ff19001633e38808bd124b60b1fe1ba  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.000184465
0x2fc26a308333aa6f5b1d59c12a70bfadb3ab678473a4554b7459b15b4acf990628 days 16 hrs ago0xcb0236b37ff19001633e38808bd124b60b1fe1ba  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.000185392
0x097a47a0c12c0921082aa32037f063e52ae8312f7462c842e9194ac5f949502628 days 16 hrs ago0xcb0236b37ff19001633e38808bd124b60b1fe1ba  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.000225727
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab81 days 6 hrs ago0x0a519b4b6501f92e8f516230b97aca83257b0c01  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.3672982
0x4403d73c743bbac3146059619ef14906466009d7675d047db20d0fffb83364e381 days 6 hrs ago0x0a519b4b6501f92e8f516230b97aca83257b0c01  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.01027765
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb89 days 16 hrs ago0x00e13f97e1980126cbe90f21b9c1b853878031dd  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.36804355
0xa8ea9631743edf892990d3b92eea9d4ef06ee93e8621c6b7ca94a37376ba526f89 days 16 hrs ago0x00e13f97e1980126cbe90f21b9c1b853878031dd  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.01101485
0x151755bbbd89d50be402afc2bacb09e802bfbdfad412da3aa920c10ee29dee3f102 days 8 hrs ago0x98e0c47340aa437a1bbd976c69ba686eca996c58  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.00062292
0x32f81417d082ee22ee1b8891659d04f871275ce9673b9edf11ebd55eeb0d54f6102 days 9 hrs ago0x1b2d2797a56c9eba12aa821d643ab0dba66c3772  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.302655481
0x4162704a0e3b4557dba59a6bce1c7160f2a3599dbd6891354e801e23df0cfa54102 days 9 hrs ago0x1b2d2797a56c9eba12aa821d643ab0dba66c3772  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.096332862
0xcc8c2dbbc233b318bd300ed29ae74de64dae3b24671904fd8eaf250d5131ae00102 days 9 hrs ago0x1b2d2797a56c9eba12aa821d643ab0dba66c3772  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.00976784
0x86e0119b32b4a621f666d864dc7ddabcd3d37f086f839716b87737c669c7c2e6102 days 9 hrs ago0x1b2d2797a56c9eba12aa821d643ab0dba66c3772  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.009329427
0x3c4f9603400d6327487d6d763ca492f92e5db783014ad13f20f6990e927ac5b2102 days 9 hrs ago0x1b2d2797a56c9eba12aa821d643ab0dba66c3772  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.00110355
0xc064034e282e45afcc48acec5caf5d88d6ce2d46b391d5a5a3b1dca9734f9089105 days 8 hrs ago0x98e0c47340aa437a1bbd976c69ba686eca996c58  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.3680158
0xd00aa3e921191fdca4b66a27888dc1dbd0294e46724ffffb41a22a3960ad0f14105 days 8 hrs ago0x98e0c47340aa437a1bbd976c69ba686eca996c58  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.01171155
0x242400421664688baf46c56e19a20bded23b4bd7bdb8e8e341d70cc8cd61a039106 days 3 hrs ago0x98e0c47340aa437a1bbd976c69ba686eca996c58  IN   0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether0.001358075
0x5c14f52374842bea725f327d90ceab049b5f9015dee459d4efdda3c8738c31f6106 days 3 hrs ago0x98e0c47340aa437a1bbd976c69ba686eca996c58  IN    Contract Creation0 Ether0.00515729
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x42a56e88a3a664f3f7c5ffc5f1fd889e3c320ed2dcb73dc59ece66a1770170f01010967728 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0x42a56e88a3a664f3f7c5ffc5f1fd889e3c320ed2dcb73dc59ece66a1770170f01010967728 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x2fc26a308333aa6f5b1d59c12a70bfadb3ab678473a4554b7459b15b4acf99061010960828 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0x2fc26a308333aa6f5b1d59c12a70bfadb3ab678473a4554b7459b15b4acf99061010960828 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x097a47a0c12c0921082aa32037f063e52ae8312f7462c842e9194ac5f94950261010958128 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0x097a47a0c12c0921082aa32037f063e52ae8312f7462c842e9194ac5f94950261010958128 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab949008281 days 6 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab949008281 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab949008281 days 6 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x1f08b1473fbb5bfc2bbaea99520291b6120be5290 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab949008281 days 6 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab949008281 days 6 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x4403d73c743bbac3146059619ef14906466009d7675d047db20d0fffb83364e3949007881 days 6 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0x4403d73c743bbac3146059619ef14906466009d7675d047db20d0fffb83364e3949007881 days 6 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb941127689 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb941127689 days 16 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb941127689 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x1f08b1473fbb5bfc2bbaea99520291b6120be5290 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb941127689 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb941127689 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0xa8ea9631743edf892990d3b92eea9d4ef06ee93e8621c6b7ca94a37376ba526f941127289 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0xb347b9f5b56b431b2cf4e1d90a5995f7519ca7920 Ether
0xa8ea9631743edf892990d3b92eea9d4ef06ee93e8621c6b7ca94a37376ba526f941127289 days 16 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x151755bbbd89d50be402afc2bacb09e802bfbdfad412da3aa920c10ee29dee3f9290065102 days 8 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0xd15326c4550dca19da6bdd33e5dd4b1bbe2ff8e2627286cc760febc498aad2f19289898102 days 8 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0xd15326c4550dca19da6bdd33e5dd4b1bbe2ff8e2627286cc760febc498aad2f19289898102 days 8 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x32f81417d082ee22ee1b8891659d04f871275ce9673b9edf11ebd55eeb0d54f69289759102 days 9 hrs ago0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0x7bb65a03323fd817922328ae607598b419ea35970 Ether
0x32f81417d082ee22ee1b8891659d04f871275ce9673b9edf11ebd55eeb0d54f69289759102 days 9 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: SecurityTokenRegistryProxy
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;

contract EternalStorage {

    /// @notice Internal mappings used to store all kinds on data into the contract
    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;
    mapping(bytes32 => bytes32) internal bytes32Storage;

    /// @notice Internal mappings used to store arrays of different data types
    mapping(bytes32 => bytes32[]) internal bytes32ArrayStorage;
    mapping(bytes32 => uint256[]) internal uintArrayStorage;
    mapping(bytes32 => address[]) internal addressArrayStorage;
    mapping(bytes32 => string[]) internal stringArrayStorage;

    //////////////////
    //// set functions
    //////////////////
    /// @notice Set the key values using the Overloaded `set` functions
    /// Ex- string version = "0.0.1"; replace to
    /// set(keccak256(abi.encodePacked("version"), "0.0.1");
    /// same for the other variables as well some more example listed below
    /// ex1 - address securityTokenAddress = 0x123; replace to
    /// set(keccak256(abi.encodePacked("securityTokenAddress"), 0x123);
    /// ex2 - bytes32 tokenDetails = "I am ST20"; replace to
    /// set(keccak256(abi.encodePacked("tokenDetails"), "I am ST20");
    /// ex3 - mapping(string => address) ownedToken;
    /// set(keccak256(abi.encodePacked("ownedToken", "Chris")), 0x123);
    /// ex4 - mapping(string => uint) tokenIndex;
    /// tokenIndex["TOKEN"] = 1; replace to set(keccak256(abi.encodePacked("tokenIndex", "TOKEN"), 1);
    /// ex5 - mapping(string => SymbolDetails) registeredSymbols; where SymbolDetails is the structure having different type of values as
    /// {uint256 date, string name, address owner} etc.
    /// registeredSymbols["TOKEN"].name = "MyFristToken"; replace to set(keccak256(abi.encodePacked("registeredSymbols_name", "TOKEN"), "MyFirstToken");
    /// More generalized- set(keccak256(abi.encodePacked("registeredSymbols_<struct variable>", "keyname"), "value");

    function set(bytes32 _key, uint256 _value) internal {
        uintStorage[_key] = _value;
    }

    function set(bytes32 _key, address _value) internal {
        addressStorage[_key] = _value;
    }

    function set(bytes32 _key, bool _value) internal {
        boolStorage[_key] = _value;
    }

    function set(bytes32 _key, bytes32 _value) internal {
        bytes32Storage[_key] = _value;
    }

    function set(bytes32 _key, string _value) internal {
        stringStorage[_key] = _value;
    }

    ////////////////////
    /// get functions
    ////////////////////
    /// @notice Get function use to get the value of the singleton state variables
    /// Ex1- string public version = "0.0.1";
    /// string _version = getString(keccak256(abi.encodePacked("version"));
    /// Ex2 - assert(temp1 == temp2); replace to
    /// assert(getUint(keccak256(abi.encodePacked(temp1)) == getUint(keccak256(abi.encodePacked(temp2));
    /// Ex3 - mapping(string => SymbolDetails) registeredSymbols; where SymbolDetails is the structure having different type of values as
    /// {uint256 date, string name, address owner} etc.
    /// string _name = getString(keccak256(abi.encodePacked("registeredSymbols_name", "TOKEN"));

    function getBool(bytes32 _key) internal view returns (bool) {
        return boolStorage[_key];
    }

    function getUint(bytes32 _key) internal view returns (uint256) {
        return uintStorage[_key];
    }

    function getAddress(bytes32 _key) internal view returns (address) {
        return addressStorage[_key];
    }

    function getString(bytes32 _key) internal view returns (string) {
        return stringStorage[_key];
    }

    function getBytes32(bytes32 _key) internal view returns (bytes32) {
        return bytes32Storage[_key];
    }


    ////////////////////////////
    // deleteArray functions
    ////////////////////////////
    /// @notice Function used to delete the array element.
    /// Ex1- mapping(address => bytes32[]) tokensOwnedByOwner;
    /// For deleting the item from array developers needs to create a funtion for that similarly
    /// in this case we have the helper function deleteArrayBytes32() which will do it for us
    /// deleteArrayBytes32(keccak256(abi.encodePacked("tokensOwnedByOwner", 0x1), 3); -- it will delete the index 3


    //Deletes from mapping (bytes32 => array[]) at index _index
    function deleteArrayAddress(bytes32 _key, uint256 _index) internal {
        address[] storage array = addressArrayStorage[_key];
        require(_index < array.length, "Index should less than length of the array");
        array[_index] = array[array.length - 1];
        array.length = array.length - 1;
    }

    //Deletes from mapping (bytes32 => bytes32[]) at index _index
    function deleteArrayBytes32(bytes32 _key, uint256 _index) internal {
        bytes32[] storage array = bytes32ArrayStorage[_key];
        require(_index < array.length, "Index should less than length of the array");
        array[_index] = array[array.length - 1];
        array.length = array.length - 1;
    }

    //Deletes from mapping (bytes32 => uint[]) at index _index
    function deleteArrayUint(bytes32 _key, uint256 _index) internal {
        uint256[] storage array = uintArrayStorage[_key];
        require(_index < array.length, "Index should less than length of the array");
        array[_index] = array[array.length - 1];
        array.length = array.length - 1;
    }

    //Deletes from mapping (bytes32 => string[]) at index _index
    function deleteArrayString(bytes32 _key, uint256 _index) internal {
        string[] storage array = stringArrayStorage[_key];
        require(_index < array.length, "Index should less than length of the array");
        array[_index] = array[array.length - 1];
        array.length = array.length - 1;
    }

    ////////////////////////////
    //// pushArray functions
    ///////////////////////////
    /// @notice Below are the helper functions to facilitate storing arrays of different data types.
    /// Ex1- mapping(address => bytes32[]) tokensOwnedByTicker;
    /// tokensOwnedByTicker[owner] = tokensOwnedByTicker[owner].push("xyz"); replace with
    /// pushArray(keccak256(abi.encodePacked("tokensOwnedByTicker", owner), "xyz");

    /// @notice use to store the values for the array
    /// @param _key bytes32 type
    /// @param _value [uint256, string, bytes32, address] any of the data type in array
    function pushArray(bytes32 _key, address _value) internal {
        addressArrayStorage[_key].push(_value);
    }

    function pushArray(bytes32 _key, bytes32 _value) internal {
        bytes32ArrayStorage[_key].push(_value);
    }

    function pushArray(bytes32 _key, string _value) internal {
        stringArrayStorage[_key].push(_value);
    }

    function pushArray(bytes32 _key, uint256 _value) internal {
        uintArrayStorage[_key].push(_value);
    }

    /////////////////////////
    //// Set Array functions
    ////////////////////////
    /// @notice used to intialize the array
    /// Ex1- mapping (address => address[]) public reputation;
    /// reputation[0x1] = new address[](0); It can be replaced as
    /// setArray(hash('reputation', 0x1), new address[](0)); 
    
    function setArray(bytes32 _key, address[] _value) internal {
        addressArrayStorage[_key] = _value;
    }

    function setArray(bytes32 _key, uint256[] _value) internal {
        uintArrayStorage[_key] = _value;
    }

    function setArray(bytes32 _key, bytes32[] _value) internal {
        bytes32ArrayStorage[_key] = _value;
    }

    function setArray(bytes32 _key, string[] _value) internal {
        stringArrayStorage[_key] = _value;
    }

    /////////////////////////
    /// getArray functions
    /////////////////////////
    /// @notice Get functions to get the array of the required data type
    /// Ex1- mapping(address => bytes32[]) tokensOwnedByOwner;
    /// getArrayBytes32(keccak256(abi.encodePacked("tokensOwnedByOwner", 0x1)); It return the bytes32 array
    /// Ex2- uint256 _len =  tokensOwnedByOwner[0x1].length; replace with
    /// getArrayBytes32(keccak256(abi.encodePacked("tokensOwnedByOwner", 0x1)).length;

    function getArrayAddress(bytes32 _key) internal view returns(address[]) {
        return addressArrayStorage[_key];
    }

    function getArrayBytes32(bytes32 _key) internal view returns(bytes32[]) {
        return bytes32ArrayStorage[_key];
    }

    function getArrayString(bytes32 _key) internal view returns(string[]) {
        return stringArrayStorage[_key];
    }

    function getArrayUint(bytes32 _key) internal view returns(uint[]) {
        return uintArrayStorage[_key];
    }

    ///////////////////////////////////
    /// setArrayIndexValue() functions
    ///////////////////////////////////
    /// @notice set the value of particular index of the address array
    /// Ex1- mapping(bytes32 => address[]) moduleList;
    /// general way is -- moduleList[moduleType][index] = temp; 
    /// It can be re-write as -- setArrayIndexValue(keccak256(abi.encodePacked('moduleList', moduleType)), index, temp); 

    function setArrayIndexValue(bytes32 _key, uint256 _index, address _value) internal {
        addressArrayStorage[_key][_index] = _value;
    }

    function setArrayIndexValue(bytes32 _key, uint256 _index, uint256 _value) internal {
        uintArrayStorage[_key][_index] = _value;
    }

    function setArrayIndexValue(bytes32 _key, uint256 _index, bytes32 _value) internal {
        bytes32ArrayStorage[_key][_index] = _value;
    }

    function setArrayIndexValue(bytes32 _key, uint256 _index, string _value) internal {
        stringArrayStorage[_key][_index] = _value;
    }

        /////////////////////////////
        /// Public getters functions
        /////////////////////////////

    function getUintValues(bytes32 _variable) public view returns(uint256) {
        return uintStorage[_variable];
    }

    function getBoolValues(bytes32 _variable) public view returns(bool) {
        return boolStorage[_variable];
    }

    function getStringValues(bytes32 _variable) public view returns(string) {
        return stringStorage[_variable];
    }

    function getAddressValues(bytes32 _variable) public view returns(address) {
        return addressStorage[_variable];
    }

    function getBytes32Values(bytes32 _variable) public view returns(bytes32) {
        return bytes32Storage[_variable];
    }

    function getBytesValues(bytes32 _variable) public view returns(bytes) {
        return bytesStorage[_variable];
    }

}

/**
 * @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() internal view returns (address);

    /**
    * @dev Fallback function.
    * Implemented entirely in `_fallback`.
    */
    function _fallback() internal {
        _delegate(_implementation());
    }

    /**
    * @dev Fallback function allowing to perform a delegatecall to the given implementation.
    * This function will return whatever the implementation call returns
    */
    function _delegate(address implementation) internal {
        /*solium-disable-next-line security/no-inline-assembly*/
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize)

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize)

            switch result
            // delegatecall returns 0 on error.
            case 0 { revert(0, returndatasize) }
            default { return(0, returndatasize) }
        }
    }

    function () public payable {
        _fallback();
    }
}

/**
 * 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;
  }

}

/**
 * @title UpgradeabilityProxy
 * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded
 */
contract UpgradeabilityProxy is Proxy {

    // Version name of the current implementation
    string internal __version;

    // Address of the current implementation
    address internal __implementation;

    /**
    * @dev This event will be emitted every time the implementation gets upgraded
    * @param _newVersion representing the version name of the upgraded implementation
    * @param _newImplementation representing the address of the upgraded implementation
    */
    event Upgraded(string _newVersion, address indexed _newImplementation);

    /**
    * @dev Upgrades the implementation address
    * @param _newVersion representing the version name of the new implementation to be set
    * @param _newImplementation representing the address of the new implementation to be set
    */
    function _upgradeTo(string _newVersion, address _newImplementation) internal {
        require(
            __implementation != _newImplementation && _newImplementation != address(0),
            "Old address is not allowed and implementation address should not be 0x"
        );
        require(AddressUtils.isContract(_newImplementation), "Cannot set a proxy implementation to a non-contract address");
        require(bytes(_newVersion).length > 0, "Version should not be empty string");
        require(keccak256(abi.encodePacked(__version)) != keccak256(abi.encodePacked(_newVersion)), "New version equals to current");
        __version = _newVersion;
        __implementation = _newImplementation;
        emit Upgraded(_newVersion, _newImplementation);
    }

}

/**
 * @title OwnedUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with basic authorization control functionalities
 */
contract OwnedUpgradeabilityProxy is UpgradeabilityProxy {

    // Owner of the contract
    address private __upgradeabilityOwner;

    /**
    * @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 Throws if called by any account other than the owner.
    */
    modifier ifOwner() {
        if (msg.sender == _upgradeabilityOwner()) {
            _;
        } else {
            _fallback();
        }
    }

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

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

    /**
    * @dev Sets the address of the owner
    */
    function _setUpgradeabilityOwner(address _newUpgradeabilityOwner) internal {
        require(_newUpgradeabilityOwner != address(0), "Address should not be 0x");
        __upgradeabilityOwner = _newUpgradeabilityOwner;
    }

    /**
    * @notice Internal function to provide the address of the implementation contract
    */
    function _implementation() internal view returns (address) {
        return __implementation;
    }

    /**
    * @dev Tells the address of the proxy owner
    * @return the address of the proxy owner
    */
    function proxyOwner() external ifOwner returns (address) {
        return _upgradeabilityOwner();
    }

    /**
    * @dev Tells the version name of the current implementation
    * @return string representing the name of the current version
    */
    function version() external ifOwner returns (string) {
        return __version;
    }

    /**
    * @dev Tells the address of the current implementation
    * @return address of the current implementation
    */
    function implementation() external ifOwner returns (address) {
        return _implementation();
    }

    /**
    * @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 ifOwner {
        require(_newOwner != address(0), "Address should not be 0x");
        emit ProxyOwnershipTransferred(_upgradeabilityOwner(), _newOwner);
        _setUpgradeabilityOwner(_newOwner);
    }

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

    /**
    * @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 _newVersion representing the version name of the new implementation to be set.
    * @param _newImplementation 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(string _newVersion, address _newImplementation, bytes _data) external payable ifOwner {
        _upgradeTo(_newVersion, _newImplementation);
        /*solium-disable-next-line security/no-call-value*/
        require(address(this).call.value(msg.value)(_data), "Fail in executing the function of implementation contract");
    }

}

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

}

    Contract ABI  
[{"constant":false,"inputs":[],"name":"proxyOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_variable","type":"bytes32"}],"name":"getBoolValues","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_variable","type":"bytes32"}],"name":"getUintValues","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newVersion","type":"string"},{"name":"_newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_variable","type":"bytes32"}],"name":"getStringValues","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newVersion","type":"string"},{"name":"_newImplementation","type":"address"},{"name":"_data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_variable","type":"bytes32"}],"name":"getBytes32Values","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_variable","type":"bytes32"}],"name":"getAddressValues","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_variable","type":"bytes32"}],"name":"getBytesValues","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","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":"_newVersion","type":"string"},{"indexed":true,"name":"_newImplementation","type":"address"}],"name":"Upgraded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526100163364010000000061001b810204565b6100b4565b600160a060020a038116151561009257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b610dfb806100c36000396000f3006080604052600436106100b95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100c35780631d8acf1b146100f457806326839e531461012057806354fd4d501461014a5780635a8b1a9f146101d45780635c60da1b1461020257806369ba0fe914610217578063958a41dd1461022f578063b3447ac91461025b578063baed8bb114610273578063c6cb7ab81461028b578063f1739cae146102a3575b6100c16102c4565b005b3480156100cf57600080fd5b506100d86102d6565b60408051600160a060020a039092168252519081900360200190f35b34801561010057600080fd5b5061010c600435610313565b604080519115158252519081900360200190f35b34801561012c57600080fd5b50610138600435610328565b60408051918252519081900360200190f35b34801561015657600080fd5b5061015f61033a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506100c16024600480358281019291013590600160a060020a039035166103ef565b34801561020e57600080fd5b506100d861045d565b34801561022357600080fd5b5061015f600435610488565b6100c1602460048035828101929082013591600160a060020a038235169160443590810191013561052b565b34801561026757600080fd5b50610138600435610648565b34801561027f57600080fd5b506100d860043561065a565b34801561029757600080fd5b5061015f600435610675565b3480156102af57600080fd5b506100c1600160a060020a03600435166106df565b6102d46102cf6107c4565b6107d3565b565b60006102e06107f7565b600160a060020a031633600160a060020a03161415610308576103016107f7565b9050610310565b6103106102c4565b90565b60009081526004602052604090205460ff1690565b60009081526020819052604090205490565b60606103446107f7565b600160a060020a031633600160a060020a0316141561030857600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b50505050509050610310565b6103f76107f7565b600160a060020a031633600160a060020a031614156104505761044b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437508794506108069350505050565b610458565b6104586102c4565b505050565b60006104676107f7565b600160a060020a031633600160a060020a03161415610308576103016107c4565b60008181526001602081815260409283902080548451600260001995831615610100029590950190911693909304601f8101839004830284018301909452838352606093909183018282801561051f5780601f106104f45761010080835404028352916020019161051f565b820191906000526020600020905b81548152906001019060200180831161050257829003601f168201915b50505050509050919050565b6105336107f7565b600160a060020a031633600160a060020a031614156106395761058785858080601f016020809104026020016040519081016040528093929190818152602001838380828437508994506108069350505050565b30600160a060020a03163483836040518083838082843782019150509250505060006040518083038185875af1925050501515610634576040805160e560020a62461bcd02815260206004820152603960248201527f4661696c20696e20657865637574696e67207468652066756e6374696f6e206f60448201527f6620696d706c656d656e746174696f6e20636f6e747261637400000000000000606482015290519081900360840190fd5b610641565b6106416102c4565b5050505050565b60009081526006602052604090205490565b600090815260026020526040902054600160a060020a031690565b60008181526003602090815260409182902080548351601f600261010060018516150260001901909316929092049182018490048402810184019094528084526060939283018282801561051f5780601f106104f45761010080835404028352916020019161051f565b6106e76107f7565b600160a060020a031633600160a060020a031614156107b957600160a060020a0381161515610760576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96107896107f7565b60408051600160a060020a03928316815291841660208301528051918290030190a16107b481610ca0565b6107c1565b6107c16102c4565b50565b600c54600160a060020a031690565b3660008037600080366000845af43d6000803e8080156107f2573d6000f35b3d6000fd5b600d54600160a060020a031690565b600c54600160a060020a0382811691161480159061082c5750600160a060020a03811615155b15156108ce576040805160e560020a62461bcd02815260206004820152604660248201527f4f6c642061646472657373206973206e6f7420616c6c6f77656420616e64206960448201527f6d706c656d656e746174696f6e20616464726573732073686f756c64206e6f7460648201527f2062652030780000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6108d781610d2f565b1515610953576040805160e560020a62461bcd02815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b81516000106109d2576040805160e560020a62461bcd02815260206004820152602260248201527f56657273696f6e2073686f756c64206e6f7420626520656d707479207374726960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b816040516020018082805190602001908083835b60208310610a055780518252601f1990920191602091820191016109e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610a685780518252601f199092019160209182019101610a49565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916600b6040516020018082805460018160011615610100020316600290048015610af95780601f10610ad7576101008083540402835291820191610af9565b820191906000526020600020905b815481529060010190602001808311610ae5575b50509150506040516020818303038152906040526040518082805190602001908083835b60208310610b3c5780518252601f199092019160209182019101610b1d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151515610bc5576040805160e560020a62461bcd02815260206004820152601d60248201527f4e65772076657273696f6e20657175616c7320746f2063757272656e74000000604482015290519081900360640190fd5b8151610bd890600b906020850190610d37565b50600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560408051602080825285518183015285517f8e05e0e35ff592971ca8b477d4285a33a61ded208d644042667b78693a472f5e938793928392918301919085019080838360005b83811015610c62578181015183820152602001610c4a565b50505050905090810190601f168015610c8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0381161515610d00576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d7857805160ff1916838001178555610da5565b82800160010185558215610da5579182015b82811115610da5578251825591602001919060010190610d8a565b50610db1929150610db5565b5090565b61031091905b80821115610db15760008155600101610dbb5600a165627a7a72305820c0157b60606c5025d2f13e3c90534f739ccb0b39bef31a59c3158218e9fdf7d50029

   Swarm Source:
bzzr://c0157b60606c5025d2f13e3c90534f739ccb0b39bef31a59c3158218e9fdf7d5

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward