Contract 0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b7086

Contract Overview

Balance:
0 Ether
TxHash Block Age From To Value [TxFee]
0x4f38b31c01a7cac3e0f96fc4f8ce8e5d05ea3aed81a12c99e6982aeb7ad2d4849290073134 days 6 hrs ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.0004536
0xc61d73f0949a891a8fb4dcb1e72cb560940688312053f7cd5c8e0f70b5dd78549253509138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0x36d4b653cbe93331c85100be55636d0b5efd1faeaaa6e307a2c4a5543be1f78f9253508138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000560575
0xfc15f56b02fef95dd88629e1d330b9dcb5560f38f69608518cf3688c5a4ff5c79253503138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0xb758c6e20b27bc33d263f5652c16bba01046ac85e4c2aacceea4a648ee0dd8669253502138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.00053457
0x720bd16ef82988f79d445fe027bb93abd35c7e0bf239ba9c0c66f7d5f2e6c2539253500138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0xaf036177c89e638f497e0c4934facc737c4a27c32f5dec40a2af40f75d31ef519253498138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000249775
0x862333c3d7b43c200b0c0883c8b9a46f81550c9b54b73079c72111a2f143861d9253496138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0xffc0a7ed4d845ba9025a14ef251b749524b91859efb1dcc016428fa59b0da7c59253495138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0xbb477f258c044a51694e9f1e5ed88a5433a9f1b9774f1b723c1be7f8fe8bb3379253495138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0x865a470c9e5b57da7d9f009e4a75bd74b4e825dc1ddec83e86f249a988deaecc9253492138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000250095
0xd9d4ecebc5607dc57257c4ff6cd8f7f69b8d57e7f9d4a60028037a61c0fdbc129253491138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000249775
0x747957a4f5256d6c0bbab849059dc4950f8f78b25c27a74a09bacaa2479a60029253490138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.00055931
0x8414ecc7737a78dcd54980a6d469cfbddaf1c4b773eb88e4b08fafbaeab9c7c79253488138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000562945
0x1288d625e18aedda0da9d3986010614fdc02fb20511e4b37d0f7f3f064b8c1879253485138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000533625
0xd33ea53b8a812a2284e6516d7d15fb7284e55e5432d6e558095301039ba726bc9253484138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000533625
0x4861c5660837ac4d5e36f05812447997447cc1eb1f665ba6c9a2763f4f706c769253483138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.00056097
0x1a22424e89fda0bfe16defa2b07bf6103cfa44ca5b9f12a9bb61eef071090bc79253482138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000560575
0x18f4a5e2b160b9275f609867edc98b5376fd8326de839053afbd9ea48653a43c9253478138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.00053457
0xef01ccb44b8fd03a20a203ae361a379c84e569537309f622a12251d96aa998a49253477138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.00048729
0x93543af2ac9e5076f8777b4dabbe0aeed4163a58773d7eb548e1082c33ffa20a9253438138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether0.000708775
0xb29a56a092524b6f177a1f553009718ebe8ab6da1f4a4d1df51cb5cf533b94729253437138 days 1 hr ago0x98e0c47340aa437a1bbd976c69ba686eca996c58 IN  Contract Creation0 Ether0.00515729
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab9490082113 days 4 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab9490082113 days 4 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0x4516b07bc9422a7545d7226e10d9fbea315a2833855e710085e32f7e8d0c19ab9490082113 days 4 hrs ago0xc669c523661970c740e0bfe955348935c661474a0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb9411276121 days 13 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb9411276121 days 13 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0x16f523a62387cb431b45b87f5bc5ef04ff05cda2959bc22486170269c9cf90fb9411276121 days 13 hrs ago0xe9c758b6e1c56d5ed7d1a87011fa2fc52032eade0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
0xd15326c4550dca19da6bdd33e5dd4b1bbe2ff8e2627286cc760febc498aad2f19289898134 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0xd15326c4550dca19da6bdd33e5dd4b1bbe2ff8e2627286cc760febc498aad2f19289898134 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0xd15326c4550dca19da6bdd33e5dd4b1bbe2ff8e2627286cc760febc498aad2f19289898134 days 6 hrs ago0x8986766944498af3ce8d85671a70b41bdc7595270xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
0x32f81417d082ee22ee1b8891659d04f871275ce9673b9edf11ebd55eeb0d54f69289759134 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x32f81417d082ee22ee1b8891659d04f871275ce9673b9edf11ebd55eeb0d54f69289759134 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0x32f81417d082ee22ee1b8891659d04f871275ce9673b9edf11ebd55eeb0d54f69289759134 days 6 hrs ago0xb580989b4592b3cfc95751d4431734758fd31da50xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
0x1d67c0a1357e9e2200ad968487e674b4766216416e54d342d96a2b04408fdd9c9281368135 days 3 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0x1d67c0a1357e9e2200ad968487e674b4766216416e54d342d96a2b04408fdd9c9281368135 days 3 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0x1d67c0a1357e9e2200ad968487e674b4766216416e54d342d96a2b04408fdd9c9281368135 days 3 hrs ago0xa79090d41bba2c6145e5133ef80ce52e9f84b2370xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860x01c17f387224148931ce03788e61836e7fe5d7530 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860x01c17f387224148931ce03788e61836e7fe5d7530 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xf387134212c8ce99366e18d063d43c3259537b7f0 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860x35a8f211763be879541656d692f057d108eec9aa0 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0xa64b9c84ea995cf63ece6a8fe6d518bae44c4b292413a8525a15169efe6686d19261123137 days 6 hrs ago0xf387134212c8ce99366e18d063d43c3259537b7f0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
0xc064034e282e45afcc48acec5caf5d88d6ce2d46b391d5a5a3b1dca9734f90899261082137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a0 Ether
0xc064034e282e45afcc48acec5caf5d88d6ce2d46b391d5a5a3b1dca9734f90899261082137 days 6 hrs ago0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860xc7d0c01ff954142f74f267c1a3019df88df8eeb90 Ether
0xc064034e282e45afcc48acec5caf5d88d6ce2d46b391d5a5a3b1dca9734f90899261082137 days 6 hrs ago0xf387134212c8ce99366e18d063d43c3259537b7f0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b70860 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

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


Contract Source Code
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 ModuleRegistryProxy
 * @dev This proxy holds the storage of the ModuleRegistry contract and delegates every call to the current implementation set.
 * Besides, it allows upgrading the contract's behaviour towards further implementations, and provides basic
 * authorization control functionalities
 */
/*solium-disable-next-line no-empty-blocks*/
contract ModuleRegistryProxy 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
60806040526100163364010000000061001b810204565b6100b4565b600160a060020a038116151561009257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b610dfb806100c36000396000f3006080604052600436106100b95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100c35780631d8acf1b146100f457806326839e531461012057806354fd4d501461014a5780635a8b1a9f146101d45780635c60da1b1461020257806369ba0fe914610217578063958a41dd1461022f578063b3447ac91461025b578063baed8bb114610273578063c6cb7ab81461028b578063f1739cae146102a3575b6100c16102c4565b005b3480156100cf57600080fd5b506100d86102d6565b60408051600160a060020a039092168252519081900360200190f35b34801561010057600080fd5b5061010c600435610313565b604080519115158252519081900360200190f35b34801561012c57600080fd5b50610138600435610328565b60408051918252519081900360200190f35b34801561015657600080fd5b5061015f61033a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506100c16024600480358281019291013590600160a060020a039035166103ef565b34801561020e57600080fd5b506100d861045d565b34801561022357600080fd5b5061015f600435610488565b6100c1602460048035828101929082013591600160a060020a038235169160443590810191013561052b565b34801561026757600080fd5b50610138600435610648565b34801561027f57600080fd5b506100d860043561065a565b34801561029757600080fd5b5061015f600435610675565b3480156102af57600080fd5b506100c1600160a060020a03600435166106df565b6102d46102cf6107c4565b6107d3565b565b60006102e06107f7565b600160a060020a031633600160a060020a03161415610308576103016107f7565b9050610310565b6103106102c4565b90565b60009081526004602052604090205460ff1690565b60009081526020819052604090205490565b60606103446107f7565b600160a060020a031633600160a060020a0316141561030857600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b50505050509050610310565b6103f76107f7565b600160a060020a031633600160a060020a031614156104505761044b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437508794506108069350505050565b610458565b6104586102c4565b505050565b60006104676107f7565b600160a060020a031633600160a060020a03161415610308576103016107c4565b60008181526001602081815260409283902080548451600260001995831615610100029590950190911693909304601f8101839004830284018301909452838352606093909183018282801561051f5780601f106104f45761010080835404028352916020019161051f565b820191906000526020600020905b81548152906001019060200180831161050257829003601f168201915b50505050509050919050565b6105336107f7565b600160a060020a031633600160a060020a031614156106395761058785858080601f016020809104026020016040519081016040528093929190818152602001838380828437508994506108069350505050565b30600160a060020a03163483836040518083838082843782019150509250505060006040518083038185875af1925050501515610634576040805160e560020a62461bcd02815260206004820152603960248201527f4661696c20696e20657865637574696e67207468652066756e6374696f6e206f60448201527f6620696d706c656d656e746174696f6e20636f6e747261637400000000000000606482015290519081900360840190fd5b610641565b6106416102c4565b5050505050565b60009081526006602052604090205490565b600090815260026020526040902054600160a060020a031690565b60008181526003602090815260409182902080548351601f600261010060018516150260001901909316929092049182018490048402810184019094528084526060939283018282801561051f5780601f106104f45761010080835404028352916020019161051f565b6106e76107f7565b600160a060020a031633600160a060020a031614156107b957600160a060020a0381161515610760576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96107896107f7565b60408051600160a060020a03928316815291841660208301528051918290030190a16107b481610ca0565b6107c1565b6107c16102c4565b50565b600c54600160a060020a031690565b3660008037600080366000845af43d6000803e8080156107f2573d6000f35b3d6000fd5b600d54600160a060020a031690565b600c54600160a060020a0382811691161480159061082c5750600160a060020a03811615155b15156108ce576040805160e560020a62461bcd02815260206004820152604660248201527f4f6c642061646472657373206973206e6f7420616c6c6f77656420616e64206960448201527f6d706c656d656e746174696f6e20616464726573732073686f756c64206e6f7460648201527f2062652030780000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6108d781610d2f565b1515610953576040805160e560020a62461bcd02815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b81516000106109d2576040805160e560020a62461bcd02815260206004820152602260248201527f56657273696f6e2073686f756c64206e6f7420626520656d707479207374726960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b816040516020018082805190602001908083835b60208310610a055780518252601f1990920191602091820191016109e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610a685780518252601f199092019160209182019101610a49565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916600b6040516020018082805460018160011615610100020316600290048015610af95780601f10610ad7576101008083540402835291820191610af9565b820191906000526020600020905b815481529060010190602001808311610ae5575b50509150506040516020818303038152906040526040518082805190602001908083835b60208310610b3c5780518252601f199092019160209182019101610b1d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151515610bc5576040805160e560020a62461bcd02815260206004820152601d60248201527f4e65772076657273696f6e20657175616c7320746f2063757272656e74000000604482015290519081900360640190fd5b8151610bd890600b906020850190610d37565b50600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560408051602080825285518183015285517f8e05e0e35ff592971ca8b477d4285a33a61ded208d644042667b78693a472f5e938793928392918301919085019080838360005b83811015610c62578181015183820152602001610c4a565b50505050905090810190601f168015610c8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0381161515610d00576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d7857805160ff1916838001178555610da5565b82800160010185558215610da5579182015b82811115610da5578251825591602001919060010190610d8a565b50610db1929150610db5565b5090565b61031091905b80821115610db15760008155600101610dbb5600a165627a7a72305820e5343f1a791e80d37ed22d19b5b82616a96002df85f9d211517f55176bbc0eb90029


   Swarm Source:
bzzr://e5343f1a791e80d37ed22d19b5b82616a96002df85f9d211517f55176bbc0eb9
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward