Contract Overview
Balance:
0 Ether
EtherValue:
$0.00
More Info
[ Download CSV Export ]
View more zero value Internal Transactions in Advanced View mode
Contract Name:
UserRegistry
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-11-18 */ /** * UserRegistry.sol * Mt Pelerin user registry. * The unflattened code is available through this github tag: * https://github.com/MtPelerin/MtPelerin-protocol/tree/etherscan-verify-batch-1 * @notice Copyright © 2016 - 2018 Mt Pelerin Group SA - All Rights Reserved * @notice All matters regarding the intellectual property of this code * @notice or software are subject to Swiss Law without reference to its * @notice conflicts of law rules. * @notice License for each contract is available in the respective file * @notice or in the LICENSE.md file. * @notice https://github.com/MtPelerin/ * @notice Code by OpenZeppelin is copyrighted and licensed on their repository: * @notice https://github.com/OpenZeppelin/openzeppelin-solidity */ pragma solidity ^0.4.24; // File: contracts/zeppelin/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/Authority.sol /** * @title Authority * @dev The Authority contract has an authority address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". * Authority means to represent a legal entity that is entitled to specific rights * * @author Cyril Lapinte - <[email protected]> * * @notice Copyright © 2016 - 2018 Mt Pelerin Group SA - All Rights Reserved * @notice Please refer to the top of this file for the license. * * Error messages * AU01: Message sender must be an authority */ contract Authority is Ownable { address authority; /** * @dev Throws if called by any account other than the authority. */ modifier onlyAuthority { require(msg.sender == authority, "AU01"); _; } /** * @dev return the address associated to the authority */ function authorityAddress() public view returns (address) { return authority; } /** * @dev rdefines an authority * @param _name the authority name * @param _address the authority address. */ function defineAuthority(string _name, address _address) public onlyOwner { emit AuthorityDefined(_name, _address); authority = _address; } event AuthorityDefined( string name, address _address ); } // File: contracts/interface/IRule.sol /** * @title IRule * @dev IRule interface * @author Cyril Lapinte - <[email protected]> * * @notice Copyright © 2016 - 2018 Mt Pelerin Group SA - All Rights Reserved * @notice Please refer to the top of this file for the license. **/ interface IRule { function isAddressValid(address _address) external view returns (bool); function isTransferValid(address _from, address _to, uint256 _amount) external view returns (bool); } // File: contracts/interface/IUserRegistry.sol /** * @title IUserRegistry * @dev IUserRegistry interface * @author Cyril Lapinte - <[email protected]> * * @notice Copyright © 2016 - 2018 Mt Pelerin Group SA - All Rights Reserved * @notice Please refer to the top of this file for the license. **/ contract IUserRegistry { function registerManyUsers(address[] _addresses, uint256 _validUntilTime) public; function attachManyAddresses(uint256[] _userIds, address[] _addresses) public; function detachManyAddresses(address[] _addresses) public; function userCount() public view returns (uint256); function userId(address _address) public view returns (uint256); function addressConfirmed(address _address) public view returns (bool); function validUntilTime(uint256 _userId) public view returns (uint256); function suspended(uint256 _userId) public view returns (bool); function extended(uint256 _userId, uint256 _key) public view returns (uint256); function isAddressValid(address _address) public view returns (bool); function isValid(uint256 _userId) public view returns (bool); function registerUser(address _address, uint256 _validUntilTime) public; function attachAddress(uint256 _userId, address _address) public; function confirmSelf() public; function detachAddress(address _address) public; function detachSelf() public; function detachSelfAddress(address _address) public; function suspendUser(uint256 _userId) public; function unsuspendUser(uint256 _userId) public; function suspendManyUsers(uint256[] _userIds) public; function unsuspendManyUsers(uint256[] _userIds) public; function updateUser(uint256 _userId, uint256 _validUntil, bool _suspended) public; function updateManyUsers( uint256[] _userIds, uint256 _validUntil, bool _suspended) public; function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value) public; function updateManyUsersExtended( uint256[] _userIds, uint256 _key, uint256 _value) public; } // File: contracts/UserRegistry.sol /** * @title UserRegistry * @dev UserRegistry contract * Configure and manage users * Extended may be used externaly to store data within a user context * * @author Cyril Lapinte - <[email protected]> * * @notice Copyright © 2016 - 2018 Mt Pelerin Group SA - All Rights Reserved * @notice Please refer to the top of this file for the license. * * Error messages * UR01: Users length does not match addresses length * UR02: UserId is invalid * UR03: WalletOwner is invalid * UR04: WalletOwner is already confirmed * UR05: User is already suspended * UR06: User is not suspended */ contract UserRegistry is IUserRegistry, Authority { struct User { uint256 validUntilTime; bool suspended; mapping(uint256 => uint256) extended; } struct WalletOwner { uint256 userId; bool confirmed; } mapping(uint256 => User) internal users; mapping(address => WalletOwner) internal walletOwners; uint256 public userCount; /** * @dev contructor **/ constructor(address[] _addresses, uint256 _validUntilTime) public { for (uint256 i = 0; i < _addresses.length; i++) { registerUserInternal(_addresses[i], _validUntilTime); walletOwners[_addresses[i]].confirmed = true; } } /** * @dev register many users */ function registerManyUsers(address[] _addresses, uint256 _validUntilTime) public onlyAuthority { for (uint256 i = 0; i < _addresses.length; i++) { registerUserInternal(_addresses[i], _validUntilTime); } } /** * @dev attach many addresses to many users */ function attachManyAddresses(uint256[] _userIds, address[] _addresses) public onlyAuthority { require(_addresses.length == _userIds.length, "UR01"); for (uint256 i = 0; i < _addresses.length; i++) { attachAddress(_userIds[i], _addresses[i]); } } /** * @dev detach many addresses association between addresses and their respective users */ function detachManyAddresses(address[] _addresses) public onlyAuthority { for (uint256 i = 0; i < _addresses.length; i++) { detachAddress(_addresses[i]); } } /** * @dev number of user registred */ function userCount() public view returns (uint256) { return userCount; } /** * @dev the userId associated to the provided address */ function userId(address _address) public view returns (uint256) { return walletOwners[_address].userId; } /** * @dev the userId associated to the provided address if the user is valid */ function validUserId(address _address) public view returns (uint256) { if (isAddressValid(_address)) { return walletOwners[_address].userId; } return 0; } /** * @dev the userId associated to the provided address */ function addressConfirmed(address _address) public view returns (bool) { return walletOwners[_address].confirmed; } /** * @dev returns the time at which user validity ends */ function validUntilTime(uint256 _userId) public view returns (uint256) { return users[_userId].validUntilTime; } /** * @dev is the user suspended */ function suspended(uint256 _userId) public view returns (bool) { return users[_userId].suspended; } /** * @dev access to extended user data */ function extended(uint256 _userId, uint256 _key) public view returns (uint256) { return users[_userId].extended[_key]; } /** * @dev validity of the current user */ function isAddressValid(address _address) public view returns (bool) { return walletOwners[_address].confirmed && isValid(walletOwners[_address].userId); } /** * @dev validity of the current user */ function isValid(uint256 _userId) public view returns (bool) { return isValidInternal(users[_userId]); } /** * @dev register a user */ function registerUser(address _address, uint256 _validUntilTime) public onlyAuthority { registerUserInternal(_address, _validUntilTime); } /** * @dev register a user */ function registerUserInternal(address _address, uint256 _validUntilTime) public { require(walletOwners[_address].userId == 0, "UR03"); users[++userCount] = User(_validUntilTime, false); walletOwners[_address] = WalletOwner(userCount, false); } /** * @dev attach an address with a user */ function attachAddress(uint256 _userId, address _address) public onlyAuthority { require(_userId > 0 && _userId <= userCount, "UR02"); require(walletOwners[_address].userId == 0, "UR03"); walletOwners[_address] = WalletOwner(_userId, false); } /** * @dev confirm the address by the user to activate it */ function confirmSelf() public { require(walletOwners[msg.sender].userId != 0, "UR03"); require(!walletOwners[msg.sender].confirmed, "UR04"); walletOwners[msg.sender].confirmed = true; } /** * @dev detach the association between an address and its user */ function detachAddress(address _address) public onlyAuthority { require(walletOwners[_address].userId != 0, "UR03"); delete walletOwners[_address]; } /** * @dev detach the association between an address and its user */ function detachSelf() public { detachSelfAddress(msg.sender); } /** * @dev detach the association between an address and its user */ function detachSelfAddress(address _address) public { uint256 senderUserId = walletOwners[msg.sender].userId; require(senderUserId != 0, "UR03"); require(walletOwners[_address].userId == senderUserId, "UR06"); delete walletOwners[_address]; } /** * @dev suspend a user */ function suspendUser(uint256 _userId) public onlyAuthority { require(_userId > 0 && _userId <= userCount, "UR02"); require(!users[_userId].suspended, "UR06"); users[_userId].suspended = true; } /** * @dev unsuspend a user */ function unsuspendUser(uint256 _userId) public onlyAuthority { require(_userId > 0 && _userId <= userCount, "UR02"); require(users[_userId].suspended, "UR06"); users[_userId].suspended = false; } /** * @dev suspend many users */ function suspendManyUsers(uint256[] _userIds) public onlyAuthority { for (uint256 i = 0; i < _userIds.length; i++) { suspendUser(_userIds[i]); } } /** * @dev unsuspend many users */ function unsuspendManyUsers(uint256[] _userIds) public onlyAuthority { for (uint256 i = 0; i < _userIds.length; i++) { unsuspendUser(_userIds[i]); } } /** * @dev update a user */ function updateUser( uint256 _userId, uint256 _validUntilTime, bool _suspended) public onlyAuthority { require(_userId > 0 && _userId <= userCount, "UR02"); users[_userId].validUntilTime = _validUntilTime; users[_userId].suspended = _suspended; } /** * @dev update many users */ function updateManyUsers( uint256[] _userIds, uint256 _validUntilTime, bool _suspended) public onlyAuthority { for (uint256 i = 0; i < _userIds.length; i++) { updateUser(_userIds[i], _validUntilTime, _suspended); } } /** * @dev update user extended information */ function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value) public onlyAuthority { require(_userId > 0 && _userId <= userCount, "UR02"); users[_userId].extended[_key] = _value; } /** * @dev update many users' extended information */ function updateManyUsersExtended( uint256[] _userIds, uint256 _key, uint256 _value) public onlyAuthority { for (uint256 i = 0; i < _userIds.length; i++) { updateUserExtended(_userIds[i], _key, _value); } } /** * @dev validity of the current user */ function isValidInternal(User user) internal view returns (bool) { // solium-disable-next-line security/no-block-members return !user.suspended && user.validUntilTime > now; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_userId","type":"uint256"}],"name":"suspendUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_userId","type":"uint256"}],"name":"validUntilTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"}],"name":"detachManyAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"userCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_userId","type":"uint256"},{"name":"_key","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"updateUserExtended","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"},{"name":"_validUntilTime","type":"uint256"}],"name":"registerManyUsers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_validUntilTime","type":"uint256"}],"name":"registerUserInternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userId","type":"uint256"},{"name":"_address","type":"address"}],"name":"attachAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"confirmSelf","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userId","type":"uint256"}],"name":"unsuspendUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"detachAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"userId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_userIds","type":"uint256[]"}],"name":"suspendManyUsers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"authorityAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"validUserId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"detachSelf","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"addressConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_userId","type":"uint256"}],"name":"suspended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_userIds","type":"uint256[]"},{"name":"_addresses","type":"address[]"}],"name":"attachManyAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_userId","type":"uint256"},{"name":"_key","type":"uint256"}],"name":"extended","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"detachSelfAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userIds","type":"uint256[]"},{"name":"_validUntilTime","type":"uint256"},{"name":"_suspended","type":"bool"}],"name":"updateManyUsers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userId","type":"uint256"},{"name":"_validUntilTime","type":"uint256"},{"name":"_suspended","type":"bool"}],"name":"updateUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isAddressValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_userIds","type":"uint256[]"},{"name":"_key","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"updateManyUsersExtended","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userIds","type":"uint256[]"}],"name":"unsuspendManyUsers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_userId","type":"uint256"}],"name":"isValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_validUntilTime","type":"uint256"}],"name":"registerUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_address","type":"address"}],"name":"defineAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_addresses","type":"address[]"},{"name":"_validUntilTime","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"_address","type":"address"}],"name":"AuthorityDefined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002f4838038062002f4883398101806040528101908080518201929190602001805190602001909291905050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600090505b82518110156200014857620000c78382815181101515620000a757fe5b906020019060200201518362000151640100000000026401000000009004565b6001600360008584815181101515620000dc57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555080806001019150506200008a565b505050620002fc565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156200020c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230330000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6040805190810160405280828152602001600015158152506002600060046000815460010191905081905581526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050506040805190810160405280600454815260200160001515815250600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050505050565b612c3c806200030c6000396000f300608060405260043610610195576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062a05dc31461019a57806304462608146101c7578063050e388f1461020857806307973ccf1461026e578063161b456b1461029957806322a16d08146102da578063256664921461034a578063278d8a1e146103975780632c15f434146103e457806330010312146103fb578063322a3a5414610428578063376fe1021461046b57806338c34193146104c25780633c695d4e14610528578063560cbd5e1461057f57806357074510146105d65780635efefefe146105ed578063715018a614610648578063848a2d031461065f5780638da5cb5b146106a4578063a319d2ab146106fb578063a77c5265146107a4578063ada70256146107ef578063b9c777e614610832578063c250f1ea146108ae578063cf31ff86146108f1578063d6f0cd021461094c578063e24df2c2146109c6578063f2fde38b14610a2c578063f577a50014610a6f578063fa0b5e5514610ab4578063fc21e16714610b01575b600080fd5b3480156101a657600080fd5b506101c560048036038101908080359060200190929190505050610b8a565b005b3480156101d357600080fd5b506101f260048036038101908080359060200190929190505050610da0565b6040518082815260200191505060405180910390f35b34801561021457600080fd5b5061026c60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610dc0565b005b34801561027a57600080fd5b50610283610ec6565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102d8600480360381019080803590602001909291908035906020019092919080359060200190929190505050610ed0565b005b3480156102e657600080fd5b50610348600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919050505061104c565b005b34801561035657600080fd5b50610395600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611154565b005b3480156103a357600080fd5b506103e260048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112fe565b005b3480156103f057600080fd5b506103f961158b565b005b34801561040757600080fd5b5061042660048036038101908080359060200190929190505050611768565b005b34801561043457600080fd5b50610469600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061197d565b005b34801561047757600080fd5b506104ac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b5e565b6040518082815260200191505060405180910390f35b3480156104ce57600080fd5b5061052660048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611baa565b005b34801561053457600080fd5b5061053d611cb0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058b57600080fd5b506105c0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cda565b6040518082815260200191505060405180910390f35b3480156105e257600080fd5b506105eb611d3e565b005b3480156105f957600080fd5b5061062e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d49565b604051808215151515815260200191505060405180910390f35b34801561065457600080fd5b5061065d611da2565b005b34801561066b57600080fd5b5061068a60048036038101908080359060200190929190505050611ea4565b604051808215151515815260200191505060405180910390f35b3480156106b057600080fd5b506106b9611ed1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561070757600080fd5b506107a26004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611ef6565b005b3480156107b057600080fd5b506107d9600480360381019080803590602001909291908035906020019092919050505061208e565b6040518082815260200191505060405180910390f35b3480156107fb57600080fd5b50610830600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c0565b005b34801561083e57600080fd5b506108ac600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080351515906020019092919050505061229b565b005b3480156108ba57600080fd5b506108ef60048036038101908080359060200190929190803590602001909291908035151590602001909291905050506123a5565b005b3480156108fd57600080fd5b50610932600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061253e565b604051808215151515815260200191505060405180910390f35b34801561095857600080fd5b506109c46004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190929190803590602001909291905050506125ea565b005b3480156109d257600080fd5b50610a2a600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506126f4565b005b348015610a3857600080fd5b50610a6d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127fa565b005b348015610a7b57600080fd5b50610a9a60048036038101908080359060200190929190505050612861565b604051808215151515815260200191505060405180910390f35b348015610ac057600080fd5b50610aff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128b5565b005b348015610b0d57600080fd5b50610b88600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612988565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600081118015610c6157506004548111155b1515610cd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230320000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6002600082815260200190815260200160002060010160009054906101000a900460ff16151515610d6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230360000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016002600083815260200190815260200160002060010160006101000a81548160ff02191690831515021790555050565b600060026000838152602001908152602001600020600001549050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e87576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015610ec257610eb58282815181101515610ea657fe5b9060200190602002015161197d565b8080600101915050610e8c565b5050565b6000600454905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083118015610fa757506004548311155b151561101b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230320000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060026000858152602001908152602001600020600201600084815260200190815260200160002081905550505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611113576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b825181101561114f57611142838281518110151561113257fe5b9060200190602002015183611154565b8080600101915050611118565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561120e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230330000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6040805190810160405280828152602001600015158152506002600060046000815460010191905081905581526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050506040805190810160405280600454815260200160001515815250600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000821180156113d557506004548211155b1515611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230320000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230330000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b604080519081016040528083815260200160001515815250600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055509050505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611646576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230330000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615151561170b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230340000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561182d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008111801561183f57506004548111155b15156118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230320000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6002600082815260200190815260200160002060010160009054906101000a900460ff16151561194b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230360000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002060010160006101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230330000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549060ff0219169055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015611cac57611c9f8282815181101515611c9057fe5b90602001906020020151610b8a565b8080600101915050611c76565b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611ce58261253e565b15611d3457600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611d39565b600090505b919050565b611d47336120c0565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611dfd57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006002600083815260200190815260200160002060010160009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b82518251141515612036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b81518110156120895761207c838281518110151561205557fe5b90602001906020020151838381518110151561206d57fe5b906020019060200201516112fe565b808060010191505061203b565b505050565b600060026000848152602001908152602001600020600201600083815260200190815260200160002054905092915050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060008114151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230330000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515612239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230360000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549060ff021916905550505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b835181101561239f57612392848281518110151561238157fe5b9060200190602002015184846123a5565b8080600101915050612367565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311801561247c57506004548311155b15156124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f555230320000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b816002600085815260200190815260200160002060000181905550806002600085815260200190815260200160002060010160006101000a81548160ff021916908315150217905550505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1680156125e357506125e2600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612861565b5b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b83518110156126ee576126e184828151811015156126d057fe5b906020019060200201518484610ed0565b80806001019150506126b6565b50505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600090505b81518110156127f6576127e982828151811015156127da57fe5b90602001906020020151611768565b80806001019150506127c0565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561285557600080fd5b61285e81612af8565b50565b60006128ae60026000848152602001908152602001600020604080519081016040529081600082015481526020016001820160009054906101000a900460ff161515151581525050612bf2565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561297a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f415530310000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6129848282611154565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129e357600080fd5b7fc8c81ac5a1b95ead7b5f71eafa51c9a1436e443c27ba33460885b9debe345abf828260405180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612a78578082015181840152602081019050612a5d565b50505050905090810190601f168015612aa55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612b3457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008160200151158015612c095750428260000151115b90509190505600a165627a7a72305820003ea36d035c1cda57d299bb611404946b1f7968df454945623923bf5791b2470029000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Swarm Source
bzzr://003ea36d035c1cda57d299bb611404946b1f7968df454945623923bf5791b247
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
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.