Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 780 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Exchange ... | 9976657 | 1763 days ago | IN | 0 ETH | 0.00011773 | ||||
Update Exchange ... | 9929051 | 1771 days ago | IN | 0 ETH | 0.00011778 | ||||
Update Exchange ... | 9883603 | 1778 days ago | IN | 0 ETH | 0.00011778 | ||||
Delete Product | 9876614 | 1779 days ago | IN | 0 ETH | 0.00011592 | ||||
Delete Product | 9876614 | 1779 days ago | IN | 0 ETH | 0.00011592 | ||||
Buy | 9850484 | 1783 days ago | IN | 0 ETH | 0.00025162 | ||||
Buy | 9850467 | 1783 days ago | IN | 0 ETH | 0.00019179 | ||||
Buy | 9843791 | 1784 days ago | IN | 0 ETH | 0.00032736 | ||||
Update Product | 9843776 | 1784 days ago | IN | 0 ETH | 0.00021502 | ||||
Buy | 9832973 | 1786 days ago | IN | 0 ETH | 0.00032736 | ||||
Update Exchange ... | 9831640 | 1786 days ago | IN | 0 ETH | 0.00011778 | ||||
Create Product | 9829594 | 1786 days ago | IN | 0 ETH | 0.00017818 | ||||
Buy | 9824347 | 1787 days ago | IN | 0 ETH | 0.00032736 | ||||
Buy | 9819672 | 1788 days ago | IN | 0 ETH | 0.00058936 | ||||
Buy | 9805902 | 1790 days ago | IN | 0 ETH | 0.00025534 | ||||
Update Exchange ... | 9794643 | 1791 days ago | IN | 0 ETH | 0.00011778 | ||||
Update Exchange ... | 9794639 | 1791 days ago | IN | 0 ETH | 0.00011778 | ||||
Update Exchange ... | 9794603 | 1791 days ago | IN | 0 ETH | 0.00011778 | ||||
Update Exchange ... | 9794597 | 1791 days ago | IN | 0 ETH | 0.00011778 | ||||
Update Exchange ... | 9794562 | 1791 days ago | IN | 0 ETH | 0.00011773 | ||||
Buy | 9747264 | 1799 days ago | IN | 0 ETH | 0.00050485 | ||||
Delete Product | 9746791 | 1799 days ago | IN | 0 ETH | 0.00005234 | ||||
Create Product | 9745971 | 1799 days ago | IN | 0 ETH | 0.00070934 | ||||
Buy | 9734217 | 1801 days ago | IN | 0 ETH | 0.00032668 | ||||
Buy | 9730228 | 1801 days ago | IN | 0 ETH | 0.00006547 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Marketplace
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-25 */ pragma solidity ^0.4.22; // File: node_modules/zeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: node_modules/zeppelin-solidity/contracts/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 OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() 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 transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Marketplace.sol // Note about numbers: // All prices and exchange rates are in "decimal fixed-point", that is, scaled by 10^18, like ETH vs wei. // Seconds are integers as usual. contract Marketplace is Ownable { using SafeMath for uint256; // product events event ProductCreated(address indexed owner, bytes32 indexed id, string name, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds); event ProductUpdated(address indexed owner, bytes32 indexed id, string name, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds); event ProductDeleted(address indexed owner, bytes32 indexed id, string name, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds); event ProductRedeployed(address indexed owner, bytes32 indexed id, string name, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds); event ProductOwnershipOffered(address indexed owner, bytes32 indexed id, address indexed to); event ProductOwnershipChanged(address indexed newOwner, bytes32 indexed id, address indexed oldOwner); // subscription events event Subscribed(bytes32 indexed productId, address indexed subscriber, uint endTimestamp); event NewSubscription(bytes32 indexed productId, address indexed subscriber, uint endTimestamp); event SubscriptionExtended(bytes32 indexed productId, address indexed subscriber, uint endTimestamp); event SubscriptionTransferred(bytes32 indexed productId, address indexed from, address indexed to, uint secondsTransferred); // currency events event ExchangeRatesUpdated(uint timestamp, uint dataInUsd); enum ProductState { NotDeployed, // non-existent or deleted Deployed // created or redeployed } enum Currency { DATA, // "token wei" (10^-18 DATA) USD // attodollars (10^-18 USD) } struct Product { bytes32 id; string name; address owner; address beneficiary; // account where revenue is directed to uint pricePerSecond; Currency priceCurrency; uint minimumSubscriptionSeconds; ProductState state; mapping(address => TimeBasedSubscription) subscriptions; address newOwnerCandidate; // Two phase hand-over to minimize the chance that the product ownership is lost to a non-existent address. } struct TimeBasedSubscription { uint endTimestamp; } /////////////// Marketplace lifecycle ///////////////// ERC20 public datacoin; address public currencyUpdateAgent; function Marketplace(address datacoinAddress, address currencyUpdateAgentAddress) Ownable() public { _initialize(datacoinAddress, currencyUpdateAgentAddress); } function _initialize(address datacoinAddress, address currencyUpdateAgentAddress) internal { currencyUpdateAgent = currencyUpdateAgentAddress; datacoin = ERC20(datacoinAddress); } ////////////////// Product management ///////////////// mapping (bytes32 => Product) public products; function getProduct(bytes32 id) public view returns (string name, address owner, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds, ProductState state) { return ( products[id].name, products[id].owner, products[id].beneficiary, products[id].pricePerSecond, products[id].priceCurrency, products[id].minimumSubscriptionSeconds, products[id].state ); } // also checks that p exists: p.owner == 0 for non-existent products modifier onlyProductOwner(bytes32 productId) { Product storage p = products[productId]; require(p.id != 0x0, "error_notFound"); require(p.owner == msg.sender || owner == msg.sender, "error_productOwnersOnly"); _; } function createProduct(bytes32 id, string name, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds) public whenNotHalted { require(id != 0x0, "error_nullProductId"); require(pricePerSecond > 0, "error_freeProductsNotSupported"); Product storage p = products[id]; require(p.id == 0x0, "error_alreadyExists"); products[id] = Product(id, name, msg.sender, beneficiary, pricePerSecond, currency, minimumSubscriptionSeconds, ProductState.Deployed, 0); emit ProductCreated(msg.sender, id, name, beneficiary, pricePerSecond, currency, minimumSubscriptionSeconds); } /** * Stop offering the product */ function deleteProduct(bytes32 productId) public onlyProductOwner(productId) { Product storage p = products[productId]; require(p.state == ProductState.Deployed, "error_notDeployed"); p.state = ProductState.NotDeployed; emit ProductDeleted(p.owner, productId, p.name, p.beneficiary, p.pricePerSecond, p.priceCurrency, p.minimumSubscriptionSeconds); } /** * Return product to market */ function redeployProduct(bytes32 productId) public onlyProductOwner(productId) { Product storage p = products[productId]; require(p.state == ProductState.NotDeployed, "error_mustBeNotDeployed"); p.state = ProductState.Deployed; emit ProductRedeployed(p.owner, productId, p.name, p.beneficiary, p.pricePerSecond, p.priceCurrency, p.minimumSubscriptionSeconds); } function updateProduct(bytes32 productId, string name, address beneficiary, uint pricePerSecond, Currency currency, uint minimumSubscriptionSeconds) public onlyProductOwner(productId) { require(pricePerSecond > 0, "error_freeProductsNotSupported"); Product storage p = products[productId]; p.name = name; p.beneficiary = beneficiary; p.pricePerSecond = pricePerSecond; p.priceCurrency = currency; p.minimumSubscriptionSeconds = minimumSubscriptionSeconds; emit ProductUpdated(p.owner, p.id, name, beneficiary, pricePerSecond, currency, minimumSubscriptionSeconds); } /** * Changes ownership of the product. Two phase hand-over minimizes the chance that the product ownership is lost to a non-existent address. */ function offerProductOwnership(bytes32 productId, address newOwnerCandidate) public onlyProductOwner(productId) { // that productId exists is already checked in onlyProductOwner products[productId].newOwnerCandidate = newOwnerCandidate; emit ProductOwnershipOffered(products[productId].owner, productId, newOwnerCandidate); } /** * Changes ownership of the product. Two phase hand-over minimizes the chance that the product ownership is lost to a non-existent address. */ function claimProductOwnership(bytes32 productId) public whenNotHalted { // also checks that productId exists (newOwnerCandidate is zero for non-existent) Product storage p = products[productId]; require(msg.sender == p.newOwnerCandidate, "error_notPermitted"); emit ProductOwnershipChanged(msg.sender, productId, p.owner); p.owner = msg.sender; p.newOwnerCandidate = 0; } /////////////// Subscription management /////////////// function getSubscription(bytes32 productId, address subscriber) public view returns (bool isValid, uint endTimestamp) { TimeBasedSubscription storage sub; (isValid, , sub) = _getSubscription(productId, subscriber); endTimestamp = sub.endTimestamp; } function getSubscriptionTo(bytes32 productId) public view returns (bool isValid, uint endTimestamp) { return getSubscription(productId, msg.sender); } /** * Purchases access to this stream for msg.sender. * If the address already has a valid subscription, extends the subscription by the given period. */ function buy(bytes32 productId, uint subscriptionSeconds) public whenNotHalted { var (, product, sub) = _getSubscription(productId, msg.sender); require(product.state == ProductState.Deployed, "error_notDeployed"); _addSubscription(product, msg.sender, subscriptionSeconds, sub); uint price = getPriceInData(subscriptionSeconds, product.pricePerSecond, product.priceCurrency); require(datacoin.transferFrom(msg.sender, product.beneficiary, price), "error_paymentFailed"); } /** * Checks if the given address currently has a valid subscription */ function hasValidSubscription(bytes32 productId, address subscriber) public constant returns (bool isValid) { (isValid, ,) = _getSubscription(productId, subscriber); } /** * Transfer a valid subscription from msg.sender to a new address. * If the address already has a valid subscription, extends the subscription by the msg.sender's remaining period. */ function transferSubscription(bytes32 productId, address newSubscriber) public whenNotHalted { var (isValid, product, sub) = _getSubscription(productId, msg.sender); require(isValid, "error_subscriptionNotValid"); uint secondsLeft = sub.endTimestamp.sub(block.timestamp); TimeBasedSubscription storage newSub = product.subscriptions[newSubscriber]; _addSubscription(product, newSubscriber, secondsLeft, newSub); delete product.subscriptions[msg.sender]; emit SubscriptionTransferred(productId, msg.sender, newSubscriber, secondsLeft); } function _getSubscription(bytes32 productId, address subscriber) internal constant returns (bool subIsValid, Product storage, TimeBasedSubscription storage) { Product storage p = products[productId]; require(p.id != 0x0, "error_notFound"); TimeBasedSubscription storage s = p.subscriptions[subscriber]; return (s.endTimestamp >= block.timestamp, p, s); } function _addSubscription(Product storage p, address subscriber, uint addSeconds, TimeBasedSubscription storage oldSub) internal { uint endTimestamp; if (oldSub.endTimestamp > block.timestamp) { require(addSeconds > 0, "error_topUpTooSmall"); endTimestamp = oldSub.endTimestamp.add(addSeconds); oldSub.endTimestamp = endTimestamp; emit SubscriptionExtended(p.id, subscriber, endTimestamp); } else { require(addSeconds >= p.minimumSubscriptionSeconds, "error_newSubscriptionTooSmall"); endTimestamp = block.timestamp.add(addSeconds); TimeBasedSubscription memory newSub = TimeBasedSubscription(endTimestamp); p.subscriptions[subscriber] = newSub; emit NewSubscription(p.id, subscriber, endTimestamp); } emit Subscribed(p.id, subscriber, endTimestamp); } // TODO: transfer allowance to another Marketplace contract // Mechanism basically is that this Marketplace draws from the allowance and credits // the account on another Marketplace; OR that there is a central credit pool (say, an ERC20 token) // Creating another ERC20 token for this could be a simple fix: it would need the ability to transfer allowances /////////////// Currency management /////////////// // Exchange rates are formatted as "decimal fixed-point", that is, scaled by 10^18, like ether. // Exponent: 10^18 15 12 9 6 3 0 // | | | | | | | uint public dataPerUsd = 100000000000000000; // ~= 0.1 DATA/USD /** * Update currency exchange rates; all purchases are still billed in DATAcoin * @param timestamp in seconds when the exchange rates were last updated * @param dataUsd how many data atoms (10^-18 DATA) equal one USD dollar */ function updateExchangeRates(uint timestamp, uint dataUsd) public { require(msg.sender == currencyUpdateAgent, "error_notPermitted"); require(dataUsd > 0); dataPerUsd = dataUsd; emit ExchangeRatesUpdated(timestamp, dataUsd); } /** * Helper function to calculate (hypothetical) subscription cost for given seconds and price, using current exchange rates. * @param subscriptionSeconds length of hypothetical subscription, as a non-scaled integer * @param price nominal price scaled by 10^18 ("token wei" or "attodollars") * @param unit unit of the number price */ function getPriceInData(uint subscriptionSeconds, uint price, Currency unit) public view returns (uint datacoinAmount) { if (unit == Currency.DATA) { return price.mul(subscriptionSeconds); } return price.mul(dataPerUsd).div(10**18).mul(subscriptionSeconds); } /////////////// Admin functionality /////////////// event Halted(); event Resumed(); bool public halted = false; modifier whenNotHalted() { require(!halted || owner == msg.sender, "error_halted"); _; } function halt() public onlyOwner { halted = true; emit Halted(); } function resume() public onlyOwner { halted = false; emit Resumed(); } function reInitialize(address datacoinAddress, address currencyUpdateAgentAddress) public onlyOwner { _initialize(datacoinAddress, currencyUpdateAgentAddress); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[],"name":"resume","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"productId","type":"bytes32"},{"name":"subscriptionSeconds","type":"uint256"}],"name":"buy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"productId","type":"bytes32"}],"name":"claimProductOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"productId","type":"bytes32"},{"name":"newSubscriber","type":"address"}],"name":"transferSubscription","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"bytes32"}],"name":"getProduct","outputs":[{"name":"name","type":"string"},{"name":"owner","type":"address"},{"name":"beneficiary","type":"address"},{"name":"pricePerSecond","type":"uint256"},{"name":"currency","type":"uint8"},{"name":"minimumSubscriptionSeconds","type":"uint256"},{"name":"state","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"productId","type":"bytes32"},{"name":"name","type":"string"},{"name":"beneficiary","type":"address"},{"name":"pricePerSecond","type":"uint256"},{"name":"currency","type":"uint8"},{"name":"minimumSubscriptionSeconds","type":"uint256"}],"name":"updateProduct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"productId","type":"bytes32"}],"name":"getSubscriptionTo","outputs":[{"name":"isValid","type":"bool"},{"name":"endTimestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"productId","type":"bytes32"}],"name":"redeployProduct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"productId","type":"bytes32"},{"name":"subscriber","type":"address"}],"name":"getSubscription","outputs":[{"name":"isValid","type":"bool"},{"name":"endTimestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"datacoinAddress","type":"address"},{"name":"currencyUpdateAgentAddress","type":"address"}],"name":"reInitialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"products","outputs":[{"name":"id","type":"bytes32"},{"name":"name","type":"string"},{"name":"owner","type":"address"},{"name":"beneficiary","type":"address"},{"name":"pricePerSecond","type":"uint256"},{"name":"priceCurrency","type":"uint8"},{"name":"minimumSubscriptionSeconds","type":"uint256"},{"name":"state","type":"uint8"},{"name":"newOwnerCandidate","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"datacoin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currencyUpdateAgent","outputs":[{"name":"","type":"address"}],"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":"productId","type":"bytes32"}],"name":"deleteProduct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"productId","type":"bytes32"},{"name":"newOwnerCandidate","type":"address"}],"name":"offerProductOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"productId","type":"bytes32"},{"name":"subscriber","type":"address"}],"name":"hasValidSubscription","outputs":[{"name":"isValid","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"subscriptionSeconds","type":"uint256"},{"name":"price","type":"uint256"},{"name":"unit","type":"uint8"}],"name":"getPriceInData","outputs":[{"name":"datacoinAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"name","type":"string"},{"name":"beneficiary","type":"address"},{"name":"pricePerSecond","type":"uint256"},{"name":"currency","type":"uint8"},{"name":"minimumSubscriptionSeconds","type":"uint256"}],"name":"createProduct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dataPerUsd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint256"},{"name":"dataUsd","type":"uint256"}],"name":"updateExchangeRates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"datacoinAddress","type":"address"},{"name":"currencyUpdateAgentAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"pricePerSecond","type":"uint256"},{"indexed":false,"name":"currency","type":"uint8"},{"indexed":false,"name":"minimumSubscriptionSeconds","type":"uint256"}],"name":"ProductCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"pricePerSecond","type":"uint256"},{"indexed":false,"name":"currency","type":"uint8"},{"indexed":false,"name":"minimumSubscriptionSeconds","type":"uint256"}],"name":"ProductUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"pricePerSecond","type":"uint256"},{"indexed":false,"name":"currency","type":"uint8"},{"indexed":false,"name":"minimumSubscriptionSeconds","type":"uint256"}],"name":"ProductDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"pricePerSecond","type":"uint256"},{"indexed":false,"name":"currency","type":"uint8"},{"indexed":false,"name":"minimumSubscriptionSeconds","type":"uint256"}],"name":"ProductRedeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":true,"name":"to","type":"address"}],"name":"ProductOwnershipOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newOwner","type":"address"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":true,"name":"oldOwner","type":"address"}],"name":"ProductOwnershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"productId","type":"bytes32"},{"indexed":true,"name":"subscriber","type":"address"},{"indexed":false,"name":"endTimestamp","type":"uint256"}],"name":"Subscribed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"productId","type":"bytes32"},{"indexed":true,"name":"subscriber","type":"address"},{"indexed":false,"name":"endTimestamp","type":"uint256"}],"name":"NewSubscription","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"productId","type":"bytes32"},{"indexed":true,"name":"subscriber","type":"address"},{"indexed":false,"name":"endTimestamp","type":"uint256"}],"name":"SubscriptionExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"productId","type":"bytes32"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"secondsTransferred","type":"uint256"}],"name":"SubscriptionTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"dataInUsd","type":"uint256"}],"name":"ExchangeRatesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Halted","type":"event"},{"anonymous":false,"inputs":[],"name":"Resumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405267016345785d8a00006004556000600560006101000a81548160ff0219169083151502179055503480156200003857600080fd5b50604051604080620039578339810180604052810190808051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000c18282620000c9640100000000026401000000009004565b50506200014f565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6137f8806200015f6000396000f30060806040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063046f7da2146101435780630ddeb6321461015a5780631a464fa11461019557806325017e10146101c65780633a20e9df146102175780634a54fb0a1461035f57806353f81ef81461041757806358f816bf146104675780635ed7ca5b146104985780635f28cb74146104af57806361362b681461051f578063790543911461058257806379c88f201461070c57806389aaad29146107635780638da5cb5b146107ba57806394727b411461081157806396002aef14610842578063b14f843214610893578063b9b8af0b146108fc578063bee7d4331461092b578063cafbc49d14610983578063d50a04f414610a3b578063db6c709c14610a66578063f2fde38b14610a9d575b600080fd5b34801561014f57600080fd5b50610158610ae0565b005b34801561016657600080fd5b50610193600480360381019080803560001916906020019092919080359060200190929190505050610b84565b005b3480156101a157600080fd5b506101c46004803603810190808035600019169060200190929190505050610f13565b005b3480156101d257600080fd5b506102156004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e2565b005b34801561022357600080fd5b506102466004803603810190808035600019169060200190929190505050611472565b60405180806020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018560018111156102c457fe5b60ff1681526020018481526020018360018111156102de57fe5b60ff168152602001828103825289818151815260200191508051906020019080838360005b8381101561031e578082015181840152602081019050610303565b50505050905090810190601f16801561034b5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561036b57600080fd5b506104156004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff16906020019092919080359060200190929190505050611664565b005b34801561042357600080fd5b506104466004803603810190808035600019169060200190929190505050611a95565b60405180831515151581526020018281526020019250505060405180910390f35b34801561047357600080fd5b506104966004803603810190808035600019169060200190929190505050611aab565b005b3480156104a457600080fd5b506104ad611eea565b005b3480156104bb57600080fd5b506104fe6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f8e565b60405180831515151581526020018281526020019250505060405180910390f35b34801561052b57600080fd5b50610580600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb6565b005b34801561058e57600080fd5b506105b1600480360381019080803560001916906020019092919050505061201f565b604051808a60001916600019168152602001806020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186600181111561063d57fe5b60ff16815260200185815260200184600181111561065757fe5b60ff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182810382528a818151815260200191508051906020019080838360005b838110156106c95780820151818401526020810190506106ae565b50505050905090810190601f1680156106f65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561071857600080fd5b5061072161217f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076f57600080fd5b506107786121a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107c657600080fd5b506107cf6121cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081d57600080fd5b5061084060048036038101908080356000191690602001909291905050506121f0565b005b34801561084e57600080fd5b506108916004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262e565b005b34801561089f57600080fd5b506108e26004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f0565b604051808215151515815260200191505060405180910390f35b34801561090857600080fd5b50610911612909565b604051808215151515815260200191505060405180910390f35b34801561093757600080fd5b5061096d6004803603810190808035906020019092919080359060200190929190803560ff16906020019092919050505061291c565b6040518082815260200191505060405180910390f35b34801561098f57600080fd5b50610a396004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff169060200190929190803590602001909291905050506129a1565b005b348015610a4757600080fd5b50610a50612f57565b6040518082815260200191505060405180910390f35b348015610a7257600080fd5b50610a9b6004803603810190808035906020019092919080359060200190929190505050612f5d565b005b348015610aa957600080fd5b50610ade600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061307b565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b3b57600080fd5b6000600560006101000a81548160ff0219169083151502179055507f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f960405160405180910390a1565b6000806000600560009054906101000a900460ff161580610bf157503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515610c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b610c6f85336131d0565b9350935050600180811115610c8057fe5b8360070160009054906101000a900460ff166001811115610c9d57fe5b141515610d12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6572726f725f6e6f744465706c6f79656400000000000000000000000000000081525060200191505060405180910390fd5b610d1e833386856132d5565b610d3e8484600401548560050160009054906101000a900460ff1661291c565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd338560030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d6020811015610e8757600080fd5b81019080805190602001909291905050501515610f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f7061796d656e744661696c65640000000000000000000000000081525060200191505060405180910390fd5b5050505050565b6000600560009054906101000a900460ff161580610f7d57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515610ff1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60036000836000191660001916815260200190815260200160002090508060090160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6572726f725f6e6f745065726d6974746564000000000000000000000000000081525060200191505060405180910390fd5b8060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600019163373ffffffffffffffffffffffffffffffffffffffff167eaf27297c740fbece798135b71b06164310e0591b6c729e50b8026dcc60be5060405160405180910390a4338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008160090160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000806000806000600560009054906101000a900460ff16158061125257503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15156112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112d087336131d0565b94509450945084151561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6572726f725f737562736372697074696f6e4e6f7456616c696400000000000081525060200191505060405180910390fd5b61136242846000015461358a90919063ffffffff16565b91508360080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506113b3848784846132d5565b8360080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905550508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1688600019167f748c12d8611352a3ff4f8d6d8405f8fd259695b031b2000827b207975a05cea0856040518082815260200191505060405180910390a450505050505050565b6060600080600080600080600360008960001916600019168152602001908152602001600020600101600360008a6000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008b6000191660001916815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008c6000191660001916815260200190815260200160002060040154600360008d6000191660001916815260200190815260200160002060050160009054906101000a900460ff16600360008e6000191660001916815260200190815260200160002060060154600360008f6000191660001916815260200190815260200160002060070160009054906101000a900460ff16868054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116445780601f1061161957610100808354040283529160200191611644565b820191906000526020600020905b81548152906001019060200180831161162757829003601f168201915b505050505096509650965096509650965096509650919395979092949650565b6000866000600360008360001916600019168152602001908152602001600020905060006001028160000154600019161415151561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117b457503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515611828576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b6000861115156118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6572726f725f6672656550726f64756374734e6f74537570706f72746564000081525060200191505060405180910390fd5b600360008a600019166000191681526020019081526020016000209250878360010190805190602001906118d5929190613693565b50868360030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858360040181905550848360050160006101000a81548160ff0219169083600181111561194257fe5b02179055508383600601819055508260000154600019168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f21953ef62f6c172d864b9ae2181d3c7114ef506c3546057e354cf6b5bab03ec48a8a8a8a8a60405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115611a0657fe5b60ff168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015611a4c578082015181840152602081019050611a31565b50505050905090810190601f168015611a795780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050505050565b600080611aa28333611f8e565b91509150915091565b60008160006003600083600019166000191681526020019081526020016000209050600060010281600001546000191614151515611b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611bfb57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515611c6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b600360008560001916600019168152602001908152602001600020925060006001811115611c9957fe5b8360070160009054906101000a900460ff166001811115611cb657fe5b141515611d2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f6d75737442654e6f744465706c6f79656400000000000000000081525060200191505060405180910390fd5b60018360070160006101000a81548160ff02191690836001811115611d4c57fe5b021790555083600019168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f07ace6911e28d0d5b2e773ce49cdfa29db157b38bffccd5f0b56f02cfba8a64f856001018660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687600401548860050160009054906101000a900460ff16896006015460405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115611e4357fe5b60ff168152602001838152602001828103825287818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611ed25780601f10611ea757610100808354040283529160200191611ed2565b820191906000526020600020905b815481529060010190602001808311611eb557829003601f168201915b5050965050505050505060405180910390a350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f4557600080fd5b6001600560006101000a81548160ff0219169083151502179055507f1ee9080f6b55ca44ce58681c8162e6c1ac1c47e1da791a4a1c1ec6186d8af1f360405160405180910390a1565b6000806000611f9d85856131d0565b9050809250819450505080600001549150509250929050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561201157600080fd5b61201b82826135a3565b5050565b6003602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120d15780601f106120a6576101008083540402835291602001916120d1565b820191906000526020600020905b8154815290600101906020018083116120b457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050160009054906101000a900460ff16908060060154908060070160009054906101000a900460ff16908060090160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905089565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008160006003600083600019166000191681526020019081526020016000209050600060010281600001546000191614151515612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061234057503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15156123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b60036000856000191660001916815260200190815260200160002092506001808111156123dd57fe5b8360070160009054906101000a900460ff1660018111156123fa57fe5b14151561246f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6572726f725f6e6f744465706c6f79656400000000000000000000000000000081525060200191505060405180910390fd5b60008360070160006101000a81548160ff0219169083600181111561249057fe5b021790555083600019168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffc64345d61f75f77f5039b0e23107d4abd73ecb7cd6c94fd44e8a6dd85918f6a856001018660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687600401548860050160009054906101000a900460ff16896006015460405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184600181111561258757fe5b60ff1681526020018381526020018281038252878181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156126165780601f106125eb57610100808354040283529160200191612616565b820191906000526020600020905b8154815290600101906020018083116125f957829003601f168201915b5050965050505050505060405180910390a350505050565b81600060036000836000191660001916815260200190815260200160002090506000600102816000015460001916141515156126d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061277c57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b8260036000866000191660001916815260200190815260200160002060090160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff16846000191660036000876000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f62160e4abadfc3a6afc583d10586d737c813753fe64d93f4283282b2b600a34460405160405180910390a450505050565b60006128fc83836131d0565b9050508091505092915050565b600560009054906101000a900460ff1681565b600080600181111561292a57fe5b82600181111561293657fe5b14156129565761294f848461362990919063ffffffff16565b905061299a565b61299784612989670de0b6b3a764000061297b6004548861362990919063ffffffff16565b61366190919063ffffffff16565b61362990919063ffffffff16565b90505b9392505050565b6000600560009054906101000a900460ff161580612a0b57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515612a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600102876000191614151515612aff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f6e756c6c50726f6475637449640000000000000000000000000081525060200191505060405180910390fd5b600084111515612b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6572726f725f6672656550726f64756374734e6f74537570706f72746564000081525060200191505060405180910390fd5b60036000886000191660001916815260200190815260200160002090506000600102816000015460001916141515612c17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f616c72656164794578697374730000000000000000000000000081525060200191505060405180910390fd5b61012060405190810160405280886000191681526020018781526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115612c7e57fe5b8152602001838152602001600180811115612c9557fe5b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250600360008960001916600019168152602001908152602001600020600082015181600001906000191690556020820151816001019080519060200190612cfc929190613713565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a08201518160050160006101000a81548160ff02191690836001811115612db957fe5b021790555060c0820151816006015560e08201518160070160006101000a81548160ff02191690836001811115612dec57fe5b02179055506101008201518160090160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505086600019163373ffffffffffffffffffffffffffffffffffffffff167f397627c8e8e4324a0f8a98a8274c00e4cee798d000625304ffbae6144ec64e54888888888860405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115612eca57fe5b60ff168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015612f10578082015181840152602081019050612ef5565b50505050905090810190601f168015612f3d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a350505050505050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6572726f725f6e6f745065726d6974746564000000000000000000000000000081525060200191505060405180910390fd5b60008111151561303157600080fd5b806004819055507fc84d758f9836fe65b8f2be13d5e364b9373411e1158b63c1c5abbbae789496098282604051808381526020018281526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561311257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006003600088600019166000191681526020019081526020016000209150600060010282600001546000191614151515613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b8160080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090504281600001541015828294509450945050509250925092565b60006132df613793565b42836000015411156133e157600084111515613363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f746f705570546f6f536d616c6c0000000000000000000000000081525060200191505060405180910390fd5b61337a84846000015461367790919063ffffffff16565b91508183600001819055508473ffffffffffffffffffffffffffffffffffffffff168660000154600019167f602ca7f17c81aa5e62b3381000dd445f5af7c333574da85f4b246288afc07322846040518082815260200191505060405180910390a361352b565b8560060154841015151561345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6572726f725f6e6577537562736372697074696f6e546f6f536d616c6c00000081525060200191505060405180910390fd5b613470844261367790919063ffffffff16565b9150602060405190810160405280838152509050808660080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001559050508473ffffffffffffffffffffffffffffffffffffffff168660000154600019167f9c3ab7e86c11d820cc311335294ebdf7299d8637d47253b930c4120b775d7cca846040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff168660000154600019167fe22e8c2d8a284063fec10f270bc3c776ffb40bcf816b73eef36354d5f3d7b3d4846040518082815260200191505060405180910390a3505050505050565b600082821115151561359857fe5b818303905092915050565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008083141561363c576000905061365b565b818302905081838281151561364d57fe5b0414151561365757fe5b8090505b92915050565b6000818381151561366e57fe5b04905092915050565b6000818301905082811015151561368a57fe5b80905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106136d457805160ff1916838001178555613702565b82800160010185558215613702579182015b828111156137015782518255916020019190600101906136e6565b5b50905061370f91906137a7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061375457805160ff1916838001178555613782565b82800160010185558215613782579182015b82811115613781578251825591602001919060010190613766565b5b50905061378f91906137a7565b5090565b602060405190810160405280600081525090565b6137c991905b808211156137c55760008160009055506001016137ad565b5090565b905600a165627a7a723058208d6a5a6643f2c5d8c642cbdca66bb2a3a69f9eea1b3059621e2a06cf39f7e76f00290000000000000000000000000cf0ee63788a0849fe5297f3407f701e122cc023000000000000000000000000b6aa9d2708475fb026a8052e20e63aea23233613
Deployed Bytecode
0x60806040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063046f7da2146101435780630ddeb6321461015a5780631a464fa11461019557806325017e10146101c65780633a20e9df146102175780634a54fb0a1461035f57806353f81ef81461041757806358f816bf146104675780635ed7ca5b146104985780635f28cb74146104af57806361362b681461051f578063790543911461058257806379c88f201461070c57806389aaad29146107635780638da5cb5b146107ba57806394727b411461081157806396002aef14610842578063b14f843214610893578063b9b8af0b146108fc578063bee7d4331461092b578063cafbc49d14610983578063d50a04f414610a3b578063db6c709c14610a66578063f2fde38b14610a9d575b600080fd5b34801561014f57600080fd5b50610158610ae0565b005b34801561016657600080fd5b50610193600480360381019080803560001916906020019092919080359060200190929190505050610b84565b005b3480156101a157600080fd5b506101c46004803603810190808035600019169060200190929190505050610f13565b005b3480156101d257600080fd5b506102156004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e2565b005b34801561022357600080fd5b506102466004803603810190808035600019169060200190929190505050611472565b60405180806020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018560018111156102c457fe5b60ff1681526020018481526020018360018111156102de57fe5b60ff168152602001828103825289818151815260200191508051906020019080838360005b8381101561031e578082015181840152602081019050610303565b50505050905090810190601f16801561034b5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561036b57600080fd5b506104156004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff16906020019092919080359060200190929190505050611664565b005b34801561042357600080fd5b506104466004803603810190808035600019169060200190929190505050611a95565b60405180831515151581526020018281526020019250505060405180910390f35b34801561047357600080fd5b506104966004803603810190808035600019169060200190929190505050611aab565b005b3480156104a457600080fd5b506104ad611eea565b005b3480156104bb57600080fd5b506104fe6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f8e565b60405180831515151581526020018281526020019250505060405180910390f35b34801561052b57600080fd5b50610580600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb6565b005b34801561058e57600080fd5b506105b1600480360381019080803560001916906020019092919050505061201f565b604051808a60001916600019168152602001806020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186600181111561063d57fe5b60ff16815260200185815260200184600181111561065757fe5b60ff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182810382528a818151815260200191508051906020019080838360005b838110156106c95780820151818401526020810190506106ae565b50505050905090810190601f1680156106f65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561071857600080fd5b5061072161217f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076f57600080fd5b506107786121a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107c657600080fd5b506107cf6121cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081d57600080fd5b5061084060048036038101908080356000191690602001909291905050506121f0565b005b34801561084e57600080fd5b506108916004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262e565b005b34801561089f57600080fd5b506108e26004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f0565b604051808215151515815260200191505060405180910390f35b34801561090857600080fd5b50610911612909565b604051808215151515815260200191505060405180910390f35b34801561093757600080fd5b5061096d6004803603810190808035906020019092919080359060200190929190803560ff16906020019092919050505061291c565b6040518082815260200191505060405180910390f35b34801561098f57600080fd5b50610a396004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff169060200190929190803590602001909291905050506129a1565b005b348015610a4757600080fd5b50610a50612f57565b6040518082815260200191505060405180910390f35b348015610a7257600080fd5b50610a9b6004803603810190808035906020019092919080359060200190929190505050612f5d565b005b348015610aa957600080fd5b50610ade600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061307b565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b3b57600080fd5b6000600560006101000a81548160ff0219169083151502179055507f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f960405160405180910390a1565b6000806000600560009054906101000a900460ff161580610bf157503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515610c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b610c6f85336131d0565b9350935050600180811115610c8057fe5b8360070160009054906101000a900460ff166001811115610c9d57fe5b141515610d12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6572726f725f6e6f744465706c6f79656400000000000000000000000000000081525060200191505060405180910390fd5b610d1e833386856132d5565b610d3e8484600401548560050160009054906101000a900460ff1661291c565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd338560030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d6020811015610e8757600080fd5b81019080805190602001909291905050501515610f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f7061796d656e744661696c65640000000000000000000000000081525060200191505060405180910390fd5b5050505050565b6000600560009054906101000a900460ff161580610f7d57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515610ff1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60036000836000191660001916815260200190815260200160002090508060090160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6572726f725f6e6f745065726d6974746564000000000000000000000000000081525060200191505060405180910390fd5b8060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600019163373ffffffffffffffffffffffffffffffffffffffff167eaf27297c740fbece798135b71b06164310e0591b6c729e50b8026dcc60be5060405160405180910390a4338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008160090160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000806000806000600560009054906101000a900460ff16158061125257503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15156112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112d087336131d0565b94509450945084151561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6572726f725f737562736372697074696f6e4e6f7456616c696400000000000081525060200191505060405180910390fd5b61136242846000015461358a90919063ffffffff16565b91508360080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506113b3848784846132d5565b8360080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905550508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1688600019167f748c12d8611352a3ff4f8d6d8405f8fd259695b031b2000827b207975a05cea0856040518082815260200191505060405180910390a450505050505050565b6060600080600080600080600360008960001916600019168152602001908152602001600020600101600360008a6000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008b6000191660001916815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008c6000191660001916815260200190815260200160002060040154600360008d6000191660001916815260200190815260200160002060050160009054906101000a900460ff16600360008e6000191660001916815260200190815260200160002060060154600360008f6000191660001916815260200190815260200160002060070160009054906101000a900460ff16868054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116445780601f1061161957610100808354040283529160200191611644565b820191906000526020600020905b81548152906001019060200180831161162757829003601f168201915b505050505096509650965096509650965096509650919395979092949650565b6000866000600360008360001916600019168152602001908152602001600020905060006001028160000154600019161415151561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117b457503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515611828576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b6000861115156118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6572726f725f6672656550726f64756374734e6f74537570706f72746564000081525060200191505060405180910390fd5b600360008a600019166000191681526020019081526020016000209250878360010190805190602001906118d5929190613693565b50868360030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858360040181905550848360050160006101000a81548160ff0219169083600181111561194257fe5b02179055508383600601819055508260000154600019168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f21953ef62f6c172d864b9ae2181d3c7114ef506c3546057e354cf6b5bab03ec48a8a8a8a8a60405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115611a0657fe5b60ff168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015611a4c578082015181840152602081019050611a31565b50505050905090810190601f168015611a795780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050505050565b600080611aa28333611f8e565b91509150915091565b60008160006003600083600019166000191681526020019081526020016000209050600060010281600001546000191614151515611b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611bfb57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515611c6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b600360008560001916600019168152602001908152602001600020925060006001811115611c9957fe5b8360070160009054906101000a900460ff166001811115611cb657fe5b141515611d2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f6d75737442654e6f744465706c6f79656400000000000000000081525060200191505060405180910390fd5b60018360070160006101000a81548160ff02191690836001811115611d4c57fe5b021790555083600019168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f07ace6911e28d0d5b2e773ce49cdfa29db157b38bffccd5f0b56f02cfba8a64f856001018660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687600401548860050160009054906101000a900460ff16896006015460405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115611e4357fe5b60ff168152602001838152602001828103825287818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611ed25780601f10611ea757610100808354040283529160200191611ed2565b820191906000526020600020905b815481529060010190602001808311611eb557829003601f168201915b5050965050505050505060405180910390a350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f4557600080fd5b6001600560006101000a81548160ff0219169083151502179055507f1ee9080f6b55ca44ce58681c8162e6c1ac1c47e1da791a4a1c1ec6186d8af1f360405160405180910390a1565b6000806000611f9d85856131d0565b9050809250819450505080600001549150509250929050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561201157600080fd5b61201b82826135a3565b5050565b6003602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120d15780601f106120a6576101008083540402835291602001916120d1565b820191906000526020600020905b8154815290600101906020018083116120b457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050160009054906101000a900460ff16908060060154908060070160009054906101000a900460ff16908060090160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905089565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008160006003600083600019166000191681526020019081526020016000209050600060010281600001546000191614151515612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061234057503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15156123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b60036000856000191660001916815260200190815260200160002092506001808111156123dd57fe5b8360070160009054906101000a900460ff1660018111156123fa57fe5b14151561246f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6572726f725f6e6f744465706c6f79656400000000000000000000000000000081525060200191505060405180910390fd5b60008360070160006101000a81548160ff0219169083600181111561249057fe5b021790555083600019168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffc64345d61f75f77f5039b0e23107d4abd73ecb7cd6c94fd44e8a6dd85918f6a856001018660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687600401548860050160009054906101000a900460ff16896006015460405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184600181111561258757fe5b60ff1681526020018381526020018281038252878181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156126165780601f106125eb57610100808354040283529160200191612616565b820191906000526020600020905b8154815290600101906020018083116125f957829003601f168201915b5050965050505050505060405180910390a350505050565b81600060036000836000191660001916815260200190815260200160002090506000600102816000015460001916141515156126d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061277c57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6572726f725f70726f647563744f776e6572734f6e6c7900000000000000000081525060200191505060405180910390fd5b8260036000866000191660001916815260200190815260200160002060090160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff16846000191660036000876000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f62160e4abadfc3a6afc583d10586d737c813753fe64d93f4283282b2b600a34460405160405180910390a450505050565b60006128fc83836131d0565b9050508091505092915050565b600560009054906101000a900460ff1681565b600080600181111561292a57fe5b82600181111561293657fe5b14156129565761294f848461362990919063ffffffff16565b905061299a565b61299784612989670de0b6b3a764000061297b6004548861362990919063ffffffff16565b61366190919063ffffffff16565b61362990919063ffffffff16565b90505b9392505050565b6000600560009054906101000a900460ff161580612a0b57503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1515612a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f68616c746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600102876000191614151515612aff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f6e756c6c50726f6475637449640000000000000000000000000081525060200191505060405180910390fd5b600084111515612b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6572726f725f6672656550726f64756374734e6f74537570706f72746564000081525060200191505060405180910390fd5b60036000886000191660001916815260200190815260200160002090506000600102816000015460001916141515612c17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f616c72656164794578697374730000000000000000000000000081525060200191505060405180910390fd5b61012060405190810160405280886000191681526020018781526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115612c7e57fe5b8152602001838152602001600180811115612c9557fe5b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250600360008960001916600019168152602001908152602001600020600082015181600001906000191690556020820151816001019080519060200190612cfc929190613713565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a08201518160050160006101000a81548160ff02191690836001811115612db957fe5b021790555060c0820151816006015560e08201518160070160006101000a81548160ff02191690836001811115612dec57fe5b02179055506101008201518160090160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505086600019163373ffffffffffffffffffffffffffffffffffffffff167f397627c8e8e4324a0f8a98a8274c00e4cee798d000625304ffbae6144ec64e54888888888860405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846001811115612eca57fe5b60ff168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015612f10578082015181840152602081019050612ef5565b50505050905090810190601f168015612f3d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a350505050505050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6572726f725f6e6f745065726d6974746564000000000000000000000000000081525060200191505060405180910390fd5b60008111151561303157600080fd5b806004819055507fc84d758f9836fe65b8f2be13d5e364b9373411e1158b63c1c5abbbae789496098282604051808381526020018281526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130d657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561311257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006003600088600019166000191681526020019081526020016000209150600060010282600001546000191614151515613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f6e6f74466f756e6400000000000000000000000000000000000081525060200191505060405180910390fd5b8160080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090504281600001541015828294509450945050509250925092565b60006132df613793565b42836000015411156133e157600084111515613363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f746f705570546f6f536d616c6c0000000000000000000000000081525060200191505060405180910390fd5b61337a84846000015461367790919063ffffffff16565b91508183600001819055508473ffffffffffffffffffffffffffffffffffffffff168660000154600019167f602ca7f17c81aa5e62b3381000dd445f5af7c333574da85f4b246288afc07322846040518082815260200191505060405180910390a361352b565b8560060154841015151561345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6572726f725f6e6577537562736372697074696f6e546f6f536d616c6c00000081525060200191505060405180910390fd5b613470844261367790919063ffffffff16565b9150602060405190810160405280838152509050808660080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001559050508473ffffffffffffffffffffffffffffffffffffffff168660000154600019167f9c3ab7e86c11d820cc311335294ebdf7299d8637d47253b930c4120b775d7cca846040518082815260200191505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff168660000154600019167fe22e8c2d8a284063fec10f270bc3c776ffb40bcf816b73eef36354d5f3d7b3d4846040518082815260200191505060405180910390a3505050505050565b600082821115151561359857fe5b818303905092915050565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008083141561363c576000905061365b565b818302905081838281151561364d57fe5b0414151561365757fe5b8090505b92915050565b6000818381151561366e57fe5b04905092915050565b6000818301905082811015151561368a57fe5b80905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106136d457805160ff1916838001178555613702565b82800160010185558215613702579182015b828111156137015782518255916020019190600101906136e6565b5b50905061370f91906137a7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061375457805160ff1916838001178555613782565b82800160010185558215613782579182015b82811115613781578251825591602001919060010190613766565b5b50905061378f91906137a7565b5090565b602060405190810160405280600081525090565b6137c991905b808211156137c55760008160009055506001016137ad565b5090565b905600a165627a7a723058208d6a5a6643f2c5d8c642cbdca66bb2a3a69f9eea1b3059621e2a06cf39f7e76f0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000cf0ee63788a0849fe5297f3407f701e122cc023000000000000000000000000b6aa9d2708475fb026a8052e20e63aea23233613
-----Decoded View---------------
Arg [0] : datacoinAddress (address): 0x0Cf0Ee63788A0849fE5297F3407f701E122cC023
Arg [1] : currencyUpdateAgentAddress (address): 0xb6aA9D2708475fB026a8052E20e63AeA23233613
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000cf0ee63788a0849fe5297f3407f701e122cc023
Arg [1] : 000000000000000000000000b6aa9d2708475fb026a8052e20e63aea23233613
Swarm Source
bzzr://8d6a5a6643f2c5d8c642cbdca66bb2a3a69f9eea1b3059621e2a06cf39f7e76f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.