ETH Price: $2,590.21 (+1.11%)

Contract

0x4566d68EA96Fc2213f2446F0DD0F482146CeE96d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Proxy O...67479872018-11-21 21:57:102131 days ago1542837430IN
0x4566d68E...146CeE96d
0 ETH0.000617620
Transfer Ownersh...67474262018-11-21 19:49:502131 days ago1542829790IN
0x4566d68E...146CeE96d
0 ETH0.0006962620
Upgrade To67474182018-11-21 19:47:232131 days ago1542829643IN
0x4566d68E...146CeE96d
0 ETH0.0009068820
Version67473832018-11-21 19:40:302131 days ago1542829230IN
0x4566d68E...146CeE96d
0 ETH0.000092054
Version67473772018-11-21 19:39:082131 days ago1542829148IN
0x4566d68E...146CeE96d
0 ETH0.0004602820
Transfer Ownersh...67471532018-11-21 18:41:482131 days ago1542825708IN
0x4566d68E...146CeE96d
0 ETH0.0004944820
Transfer Ownersh...67471422018-11-21 18:39:342131 days ago1542825574IN
0x4566d68E...146CeE96d
0 ETH0.000453620
Verify Module66742872018-11-09 20:02:442143 days ago1541793764IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Register Module66742842018-11-09 20:02:092143 days ago1541793729IN
0x4566d68E...146CeE96d
0 ETH0.0028028725
Verify Module66742582018-11-09 19:56:292143 days ago1541793389IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Register Module66742542018-11-09 19:55:432143 days ago1541793343IN
0x4566d68E...146CeE96d
0 ETH0.0027928525
Verify Module66742462018-11-09 19:53:212143 days ago1541793201IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Verify Module66742332018-11-09 19:49:182143 days ago1541792958IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Verify Module66742272018-11-09 19:47:142143 days ago1541792834IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Verify Module66742222018-11-09 19:46:122143 days ago1541792772IN
0x4566d68E...146CeE96d
0 ETH0.0012488725
Verify Module66742192018-11-09 19:45:222143 days ago1541792722IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Verify Module66742132018-11-09 19:43:562143 days ago1541792636IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Verify Module66742092018-11-09 19:43:142143 days ago1541792594IN
0x4566d68E...146CeE96d
0 ETH0.0012504725
Register Module66742062018-11-09 19:42:482143 days ago1541792568IN
0x4566d68E...146CeE96d
0 ETH0.0027981525
Register Module66741982018-11-09 19:41:072143 days ago1541792467IN
0x4566d68E...146CeE96d
0 ETH0.0028147225
Register Module66741972018-11-09 19:41:032143 days ago1541792463IN
0x4566d68E...146CeE96d
0 ETH0.0027881225
Register Module66741932018-11-09 19:40:262143 days ago1541792426IN
0x4566d68E...146CeE96d
0 ETH0.0027865225
Register Module66741892018-11-09 19:39:502143 days ago1541792390IN
0x4566d68E...146CeE96d
0 ETH0.0028064525
Register Module66741872018-11-09 19:39:032143 days ago1541792343IN
0x4566d68E...146CeE96d
0 ETH0.0028028725
Register Module66741802018-11-09 19:37:382143 days ago1541792258IN
0x4566d68E...146CeE96d
0 ETH0.0027928525
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:
ModuleRegistryProxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-12
*/

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 Security Audit

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"}]

60806040526100163364010000000061001b810204565b6100b4565b600160a060020a038116151561009257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b610dfb806100c36000396000f3006080604052600436106100b95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100c35780631d8acf1b146100f457806326839e531461012057806354fd4d501461014a5780635a8b1a9f146101d45780635c60da1b1461020257806369ba0fe914610217578063958a41dd1461022f578063b3447ac91461025b578063baed8bb114610273578063c6cb7ab81461028b578063f1739cae146102a3575b6100c16102c4565b005b3480156100cf57600080fd5b506100d86102d6565b60408051600160a060020a039092168252519081900360200190f35b34801561010057600080fd5b5061010c600435610313565b604080519115158252519081900360200190f35b34801561012c57600080fd5b50610138600435610328565b60408051918252519081900360200190f35b34801561015657600080fd5b5061015f61033a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506100c16024600480358281019291013590600160a060020a039035166103ef565b34801561020e57600080fd5b506100d861045d565b34801561022357600080fd5b5061015f600435610488565b6100c1602460048035828101929082013591600160a060020a038235169160443590810191013561052b565b34801561026757600080fd5b50610138600435610648565b34801561027f57600080fd5b506100d860043561065a565b34801561029757600080fd5b5061015f600435610675565b3480156102af57600080fd5b506100c1600160a060020a03600435166106df565b6102d46102cf6107c4565b6107d3565b565b60006102e06107f7565b600160a060020a031633600160a060020a03161415610308576103016107f7565b9050610310565b6103106102c4565b90565b60009081526004602052604090205460ff1690565b60009081526020819052604090205490565b60606103446107f7565b600160a060020a031633600160a060020a0316141561030857600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b50505050509050610310565b6103f76107f7565b600160a060020a031633600160a060020a031614156104505761044b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437508794506108069350505050565b610458565b6104586102c4565b505050565b60006104676107f7565b600160a060020a031633600160a060020a03161415610308576103016107c4565b60008181526001602081815260409283902080548451600260001995831615610100029590950190911693909304601f8101839004830284018301909452838352606093909183018282801561051f5780601f106104f45761010080835404028352916020019161051f565b820191906000526020600020905b81548152906001019060200180831161050257829003601f168201915b50505050509050919050565b6105336107f7565b600160a060020a031633600160a060020a031614156106395761058785858080601f016020809104026020016040519081016040528093929190818152602001838380828437508994506108069350505050565b30600160a060020a03163483836040518083838082843782019150509250505060006040518083038185875af1925050501515610634576040805160e560020a62461bcd02815260206004820152603960248201527f4661696c20696e20657865637574696e67207468652066756e6374696f6e206f60448201527f6620696d706c656d656e746174696f6e20636f6e747261637400000000000000606482015290519081900360840190fd5b610641565b6106416102c4565b5050505050565b60009081526006602052604090205490565b600090815260026020526040902054600160a060020a031690565b60008181526003602090815260409182902080548351601f600261010060018516150260001901909316929092049182018490048402810184019094528084526060939283018282801561051f5780601f106104f45761010080835404028352916020019161051f565b6106e76107f7565b600160a060020a031633600160a060020a031614156107b957600160a060020a0381161515610760576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96107896107f7565b60408051600160a060020a03928316815291841660208301528051918290030190a16107b481610ca0565b6107c1565b6107c16102c4565b50565b600c54600160a060020a031690565b3660008037600080366000845af43d6000803e8080156107f2573d6000f35b3d6000fd5b600d54600160a060020a031690565b600c54600160a060020a0382811691161480159061082c5750600160a060020a03811615155b15156108ce576040805160e560020a62461bcd02815260206004820152604660248201527f4f6c642061646472657373206973206e6f7420616c6c6f77656420616e64206960448201527f6d706c656d656e746174696f6e20616464726573732073686f756c64206e6f7460648201527f2062652030780000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6108d781610d2f565b1515610953576040805160e560020a62461bcd02815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b81516000106109d2576040805160e560020a62461bcd02815260206004820152602260248201527f56657273696f6e2073686f756c64206e6f7420626520656d707479207374726960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b816040516020018082805190602001908083835b60208310610a055780518252601f1990920191602091820191016109e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610a685780518252601f199092019160209182019101610a49565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916600b6040516020018082805460018160011615610100020316600290048015610af95780601f10610ad7576101008083540402835291820191610af9565b820191906000526020600020905b815481529060010190602001808311610ae5575b50509150506040516020818303038152906040526040518082805190602001908083835b60208310610b3c5780518252601f199092019160209182019101610b1d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151515610bc5576040805160e560020a62461bcd02815260206004820152601d60248201527f4e65772076657273696f6e20657175616c7320746f2063757272656e74000000604482015290519081900360640190fd5b8151610bd890600b906020850190610d37565b50600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560408051602080825285518183015285517f8e05e0e35ff592971ca8b477d4285a33a61ded208d644042667b78693a472f5e938793928392918301919085019080838360005b83811015610c62578181015183820152602001610c4a565b50505050905090810190601f168015610c8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0381161515610d00576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d7857805160ff1916838001178555610da5565b82800160010185558215610da5579182015b82811115610da5578251825591602001919060010190610d8a565b50610db1929150610db5565b5090565b61031091905b80821115610db15760008155600101610dbb5600a165627a7a72305820e5343f1a791e80d37ed22d19b5b82616a96002df85f9d211517f55176bbc0eb90029

Deployed Bytecode

0x6080604052600436106100b95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100c35780631d8acf1b146100f457806326839e531461012057806354fd4d501461014a5780635a8b1a9f146101d45780635c60da1b1461020257806369ba0fe914610217578063958a41dd1461022f578063b3447ac91461025b578063baed8bb114610273578063c6cb7ab81461028b578063f1739cae146102a3575b6100c16102c4565b005b3480156100cf57600080fd5b506100d86102d6565b60408051600160a060020a039092168252519081900360200190f35b34801561010057600080fd5b5061010c600435610313565b604080519115158252519081900360200190f35b34801561012c57600080fd5b50610138600435610328565b60408051918252519081900360200190f35b34801561015657600080fd5b5061015f61033a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506100c16024600480358281019291013590600160a060020a039035166103ef565b34801561020e57600080fd5b506100d861045d565b34801561022357600080fd5b5061015f600435610488565b6100c1602460048035828101929082013591600160a060020a038235169160443590810191013561052b565b34801561026757600080fd5b50610138600435610648565b34801561027f57600080fd5b506100d860043561065a565b34801561029757600080fd5b5061015f600435610675565b3480156102af57600080fd5b506100c1600160a060020a03600435166106df565b6102d46102cf6107c4565b6107d3565b565b60006102e06107f7565b600160a060020a031633600160a060020a03161415610308576103016107f7565b9050610310565b6103106102c4565b90565b60009081526004602052604090205460ff1690565b60009081526020819052604090205490565b60606103446107f7565b600160a060020a031633600160a060020a0316141561030857600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b50505050509050610310565b6103f76107f7565b600160a060020a031633600160a060020a031614156104505761044b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437508794506108069350505050565b610458565b6104586102c4565b505050565b60006104676107f7565b600160a060020a031633600160a060020a03161415610308576103016107c4565b60008181526001602081815260409283902080548451600260001995831615610100029590950190911693909304601f8101839004830284018301909452838352606093909183018282801561051f5780601f106104f45761010080835404028352916020019161051f565b820191906000526020600020905b81548152906001019060200180831161050257829003601f168201915b50505050509050919050565b6105336107f7565b600160a060020a031633600160a060020a031614156106395761058785858080601f016020809104026020016040519081016040528093929190818152602001838380828437508994506108069350505050565b30600160a060020a03163483836040518083838082843782019150509250505060006040518083038185875af1925050501515610634576040805160e560020a62461bcd02815260206004820152603960248201527f4661696c20696e20657865637574696e67207468652066756e6374696f6e206f60448201527f6620696d706c656d656e746174696f6e20636f6e747261637400000000000000606482015290519081900360840190fd5b610641565b6106416102c4565b5050505050565b60009081526006602052604090205490565b600090815260026020526040902054600160a060020a031690565b60008181526003602090815260409182902080548351601f600261010060018516150260001901909316929092049182018490048402810184019094528084526060939283018282801561051f5780601f106104f45761010080835404028352916020019161051f565b6106e76107f7565b600160a060020a031633600160a060020a031614156107b957600160a060020a0381161515610760576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96107896107f7565b60408051600160a060020a03928316815291841660208301528051918290030190a16107b481610ca0565b6107c1565b6107c16102c4565b50565b600c54600160a060020a031690565b3660008037600080366000845af43d6000803e8080156107f2573d6000f35b3d6000fd5b600d54600160a060020a031690565b600c54600160a060020a0382811691161480159061082c5750600160a060020a03811615155b15156108ce576040805160e560020a62461bcd02815260206004820152604660248201527f4f6c642061646472657373206973206e6f7420616c6c6f77656420616e64206960448201527f6d706c656d656e746174696f6e20616464726573732073686f756c64206e6f7460648201527f2062652030780000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6108d781610d2f565b1515610953576040805160e560020a62461bcd02815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b81516000106109d2576040805160e560020a62461bcd02815260206004820152602260248201527f56657273696f6e2073686f756c64206e6f7420626520656d707479207374726960448201527f6e67000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b816040516020018082805190602001908083835b60208310610a055780518252601f1990920191602091820191016109e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610a685780518252601f199092019160209182019101610a49565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916600b6040516020018082805460018160011615610100020316600290048015610af95780601f10610ad7576101008083540402835291820191610af9565b820191906000526020600020905b815481529060010190602001808311610ae5575b50509150506040516020818303038152906040526040518082805190602001908083835b60208310610b3c5780518252601f199092019160209182019101610b1d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151515610bc5576040805160e560020a62461bcd02815260206004820152601d60248201527f4e65772076657273696f6e20657175616c7320746f2063757272656e74000000604482015290519081900360640190fd5b8151610bd890600b906020850190610d37565b50600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560408051602080825285518183015285517f8e05e0e35ff592971ca8b477d4285a33a61ded208d644042667b78693a472f5e938793928392918301919085019080838360005b83811015610c62578181015183820152602001610c4a565b50505050905090810190601f168015610c8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0381161515610d00576040805160e560020a62461bcd02815260206004820152601860248201527f416464726573732073686f756c64206e6f742062652030780000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d7857805160ff1916838001178555610da5565b82800160010185558215610da5579182015b82811115610da5578251825591602001919060010190610d8a565b50610db1929150610db5565b5090565b61031091905b80821115610db15760008155600101610dbb5600a165627a7a72305820e5343f1a791e80d37ed22d19b5b82616a96002df85f9d211517f55176bbc0eb90029

Swarm Source

bzzr://e5343f1a791e80d37ed22d19b5b82616a96002df85f9d211517f55176bbc0eb9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.