Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 211 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mass Transfer | 6009802 | 2385 days ago | IN | 0 ETH | 0.00122604 | ||||
Mass Transfer | 6009798 | 2385 days ago | IN | 0 ETH | 0.01301998 | ||||
Mass Transfer | 6009752 | 2385 days ago | IN | 0 ETH | 0.01277316 | ||||
Mass Transfer | 6009730 | 2385 days ago | IN | 0 ETH | 0.01301562 | ||||
Mass Transfer | 6009689 | 2385 days ago | IN | 0 ETH | 0.01253006 | ||||
Mass Transfer | 6009679 | 2385 days ago | IN | 0 ETH | 0.01289516 | ||||
Mass Transfer | 6009670 | 2385 days ago | IN | 0 ETH | 0.01289388 | ||||
Mass Transfer | 6009662 | 2385 days ago | IN | 0 ETH | 0.01301614 | ||||
Mass Transfer | 6009643 | 2385 days ago | IN | 0 ETH | 0.01289337 | ||||
Mass Transfer | 6009620 | 2385 days ago | IN | 0 ETH | 0.01301511 | ||||
Mass Transfer | 6009575 | 2385 days ago | IN | 0 ETH | 0.01301588 | ||||
Mass Transfer | 6009453 | 2385 days ago | IN | 0 ETH | 0.01265091 | ||||
Mass Transfer | 6009441 | 2385 days ago | IN | 0 ETH | 0.01301409 | ||||
Mass Transfer | 6009419 | 2385 days ago | IN | 0 ETH | 0.01301473 | ||||
Mass Transfer | 6009400 | 2385 days ago | IN | 0 ETH | 0.01289324 | ||||
Mass Transfer | 6009394 | 2385 days ago | IN | 0 ETH | 0.01289414 | ||||
Mass Transfer | 6009251 | 2385 days ago | IN | 0 ETH | 0.01301575 | ||||
Mass Transfer | 6008624 | 2385 days ago | IN | 0 ETH | 0.01277227 | ||||
Mass Transfer | 6008589 | 2385 days ago | IN | 0 ETH | 0.0130146 | ||||
Mass Transfer | 6008519 | 2385 days ago | IN | 0 ETH | 0.01289337 | ||||
Mass Transfer | 6008512 | 2385 days ago | IN | 0 ETH | 0.01265104 | ||||
Mass Transfer | 6008500 | 2385 days ago | IN | 0 ETH | 0.01277368 | ||||
Mass Transfer | 6008445 | 2385 days ago | IN | 0 ETH | 0.01289363 | ||||
Mass Transfer | 6008407 | 2385 days ago | IN | 0 ETH | 0.01301396 | ||||
Mass Transfer | 6008373 | 2385 days ago | IN | 0 ETH | 0.01277291 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CAVPlatform
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-03-16 */ pragma solidity ^0.4.11; // File: contracts/CAVPlatformEmitter.sol //import '../event/MultiEventsHistoryAdapter.sol'; /// @title CAV Platform Emitter. /// /// Contains all the original event emitting function definitions and events. /// In case of new events needed later, additional emitters can be developed. /// All the functions is meant to be called using delegatecall. contract CAVPlatformEmitter { event Transfer(address indexed from, address indexed to, bytes32 indexed symbol, uint value, string reference); event Issue(bytes32 indexed symbol, uint value, address indexed by); event Revoke(bytes32 indexed symbol, uint value, address indexed by); event OwnershipChange(address indexed from, address indexed to, bytes32 indexed symbol); event Approve(address indexed from, address indexed spender, bytes32 indexed symbol, uint value); event Recovery(address indexed from, address indexed to, address by); event Error(uint errorCode); function emitTransfer(address _from, address _to, bytes32 _symbol, uint _value, string _reference) public { Transfer(_from, _to, _symbol, _value, _reference); } function emitIssue(bytes32 _symbol, uint _value, address _by) public { Issue(_symbol, _value, _by); } function emitRevoke(bytes32 _symbol, uint _value, address _by) public { Revoke(_symbol, _value, _by); } function emitOwnershipChange(address _from, address _to, bytes32 _symbol) public { OwnershipChange(_from, _to, _symbol); } function emitApprove(address _from, address _spender, bytes32 _symbol, uint _value) public { Approve(_from, _spender, _symbol, _value); } function emitRecovery(address _from, address _to, address _by) public { Recovery(_from, _to, _by); } function emitError(uint _errorCode) public { Error(_errorCode); } } // File: contracts/ERC20Interface.sol contract ERC20Interface { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, address indexed spender, uint256 value); string public symbol; function decimals() constant returns (uint8); function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); } // File: contracts/Owned.sol /** * @title Owned contract with safe ownership pass. * * Note: all the non constant functions return false instead of throwing in case if state change * didn't happen yet. */ contract Owned { /** * Contract owner address */ address public contractOwner; /** * Contract owner address */ address public pendingContractOwner; function Owned() { contractOwner = msg.sender; } /** * @dev Owner check modifier */ modifier onlyContractOwner() { if (contractOwner == msg.sender) { _; } } /** * @dev Destroy contract and scrub a data * @notice Only owner can call it */ function destroy() onlyContractOwner { suicide(msg.sender); } /** * Prepares ownership pass. * * Can only be called by current owner. * * @param _to address of the next owner. 0x0 is not allowed. * * @return success. */ function changeContractOwnership(address _to) onlyContractOwner public returns (bool) { if (_to == 0x0) { return false; } pendingContractOwner = _to; return true; } /** * Finalize ownership pass. * * Can only be called by pending owner. * * @return success. */ function claimContractOwnership() public returns (bool) { if (pendingContractOwner != msg.sender) { return false; } contractOwner = pendingContractOwner; delete pendingContractOwner; return true; } /** * @dev Direct ownership pass without change/claim pattern. Can be invoked only by current contract owner * * @param _to the next contract owner * * @return `true` if success, `false` otherwise */ function transferContractOwnership(address _to) onlyContractOwner public returns (bool) { if (_to == 0x0) { return false; } if (pendingContractOwner != 0x0) { pendingContractOwner = 0x0; } contractOwner = _to; return true; } } // File: contracts/Object.sol /** * @title Generic owned destroyable contract */ contract Object is Owned { /** * Common result code. Means everything is fine. */ uint constant OK = 1; function withdrawnTokens(address[] tokens, address _to) onlyContractOwner returns(uint) { for(uint i=0;i<tokens.length;i++) { address token = tokens[i]; uint balance = ERC20Interface(token).balanceOf(this); if(balance != 0) ERC20Interface(token).transfer(_to,balance); } return OK; } } // File: contracts/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant 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 c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: contracts/CAVPlatform.sol contract ProxyEventsEmitter { function emitTransfer(address _from, address _to, uint _value) public; function emitApprove(address _from, address _spender, uint _value) public; } /// @title CAV Platform. /// /// The official CAV assets platform powering TIME and LHT tokens, and possibly /// other unknown tokens needed later. /// Platform uses MultiEventsHistory contract to keep events, so that in case it needs to be redeployed /// at some point, all the events keep appearing at the same place. /// /// Every asset is meant to be used through a proxy contract. Only one proxy contract have access /// rights for a particular asset. /// /// Features: transfers, allowances, supply adjustments, lost wallet access recovery. /// /// Note: all the non constant functions return false instead of throwing in case if state change /// didn't happen yet. contract CAVPlatform is Object, CAVPlatformEmitter { using SafeMath for uint; uint constant CAV_PLATFORM_SCOPE = 15000; uint constant CAV_PLATFORM_PROXY_ALREADY_EXISTS = CAV_PLATFORM_SCOPE + 0; uint constant CAV_PLATFORM_CANNOT_APPLY_TO_ONESELF = CAV_PLATFORM_SCOPE + 1; uint constant CAV_PLATFORM_INVALID_VALUE = CAV_PLATFORM_SCOPE + 2; uint constant CAV_PLATFORM_INSUFFICIENT_BALANCE = CAV_PLATFORM_SCOPE + 3; uint constant CAV_PLATFORM_NOT_ENOUGH_ALLOWANCE = CAV_PLATFORM_SCOPE + 4; uint constant CAV_PLATFORM_ASSET_ALREADY_ISSUED = CAV_PLATFORM_SCOPE + 5; uint constant CAV_PLATFORM_CANNOT_ISSUE_FIXED_ASSET_WITH_INVALID_VALUE = CAV_PLATFORM_SCOPE + 6; uint constant CAV_PLATFORM_CANNOT_REISSUE_FIXED_ASSET = CAV_PLATFORM_SCOPE + 7; uint constant CAV_PLATFORM_SUPPLY_OVERFLOW = CAV_PLATFORM_SCOPE + 8; uint constant CAV_PLATFORM_NOT_ENOUGH_TOKENS = CAV_PLATFORM_SCOPE + 9; uint constant CAV_PLATFORM_INVALID_NEW_OWNER = CAV_PLATFORM_SCOPE + 10; uint constant CAV_PLATFORM_ALREADY_TRUSTED = CAV_PLATFORM_SCOPE + 11; uint constant CAV_PLATFORM_SHOULD_RECOVER_TO_NEW_ADDRESS = CAV_PLATFORM_SCOPE + 12; uint constant CAV_PLATFORM_ASSET_IS_NOT_ISSUED = CAV_PLATFORM_SCOPE + 13; uint constant CAV_PLATFORM_INVALID_INVOCATION = CAV_PLATFORM_SCOPE + 17; /// Structure of a particular asset. struct Asset { uint owner; // Asset's owner id. uint totalSupply; // Asset's total supply. string name; // Asset's name, for information purposes. string description; // Asset's description, for information purposes. bool isReissuable; // Indicates if asset have dynamic or fixed supply. uint8 baseUnit; // Proposed number of decimals. mapping(uint => Wallet) wallets; // Holders wallets. mapping(uint => bool) partowners; // Part-owners of an asset; have less access rights than owner } /// Structure of an asset holder wallet for particular asset. struct Wallet { uint balance; mapping(uint => uint) allowance; } /// Structure of an asset holder. struct Holder { address addr; // Current address of the holder. mapping(address => bool) trust; // Addresses that are trusted with recovery proocedure. } /// Iterable mapping pattern is used for holders. uint public holdersCount; mapping(uint => Holder) public holders; /// This is an access address mapping. Many addresses may have access to a single holder. mapping(address => uint) holderIndex; /// List of symbols that exist in a platform bytes32[] public symbols; /// Asset symbol to asset mapping. mapping(bytes32 => Asset) public assets; /// Asset symbol to asset proxy mapping. mapping(bytes32 => address) public proxies; /// Co-owners of a platform. Has less access rights than a root contract owner mapping(address => bool) public partowners; // Should use interface of the emitter, but address of events history. address public eventsHistory; /// Emits Error event with specified error message. /// Should only be used if no state changes happened. /// @param _errorCode code of an error function _error(uint _errorCode) internal returns (uint) { CAVPlatformEmitter(eventsHistory).emitError(_errorCode); return _errorCode; } /// Emits Error if called not by asset owner. modifier onlyOwner(bytes32 _symbol) { if (isOwner(msg.sender, _symbol)) { _; } } /// @dev UNAUTHORIZED if called not by one of symbol's partowners or owner modifier onlyOneOfOwners(bytes32 _symbol) { if (hasAssetRights(msg.sender, _symbol)) { _; } } /// @dev UNAUTHORIZED if called not by one of partowners or contract's owner modifier onlyOneOfContractOwners() { if (contractOwner == msg.sender || partowners[msg.sender]) { _; } } /// Emits Error if called not by asset proxy. modifier onlyProxy(bytes32 _symbol) { if (proxies[_symbol] == msg.sender) { _; } } /// Emits Error if _from doesn't trust _to. modifier checkTrust(address _from, address _to) { if (isTrusted(_from, _to)) { _; } } /// Adds a co-owner of a contract. Might be more than one co-owner /// @dev Allowed to only contract onwer /// @param _partowner a co-owner of a contract /// @return result code of an operation function addPartOwner(address _partowner) onlyContractOwner public returns (uint) { partowners[_partowner] = true; return OK; } /// Removes a co-owner of a contract /// @dev Should be performed only by root contract owner /// @param _partowner a co-owner of a contract /// @return result code of an operation function removePartOwner(address _partowner) onlyContractOwner public returns (uint) { delete partowners[_partowner]; return OK; } /// Sets EventsHstory contract address. /// /// Can be set only by events history admon or owner. /// /// @param _eventsHistory MultiEventsHistory contract address. /// /// @return success. function setupEventsHistory(address _eventsHistory) onlyContractOwner public returns (uint errorCode) { eventsHistory = _eventsHistory; return OK; } /// Provides a cheap way to get number of symbols registered in a platform /// @return number of symbols function symbolsCount() public view returns (uint) { return symbols.length; } /// Check asset existance. /// /// @param _symbol asset symbol. /// /// @return asset existance. function isCreated(bytes32 _symbol) public view returns (bool) { return assets[_symbol].owner != 0; } /// Returns asset decimals. /// /// @param _symbol asset symbol. /// /// @return asset decimals. function baseUnit(bytes32 _symbol) public view returns (uint8) { return assets[_symbol].baseUnit; } /// Returns asset name. /// /// @param _symbol asset symbol. /// /// @return asset name. function name(bytes32 _symbol) public view returns (string) { return assets[_symbol].name; } /// Returns asset description. /// /// @param _symbol asset symbol. /// /// @return asset description. function description(bytes32 _symbol) public view returns (string) { return assets[_symbol].description; } /// Returns asset reissuability. /// /// @param _symbol asset symbol. /// /// @return asset reissuability. function isReissuable(bytes32 _symbol) public view returns (bool) { return assets[_symbol].isReissuable; } /// Returns asset owner address. /// @param _symbol asset symbol. /// @return asset owner address. function owner(bytes32 _symbol) public view returns (address) { return holders[assets[_symbol].owner].addr; } /// Check if specified address has asset owner rights. /// @param _owner address to check. /// @param _symbol asset symbol. /// @return owner rights availability. function isOwner(address _owner, bytes32 _symbol) public view returns (bool) { return isCreated(_symbol) && (assets[_symbol].owner == getHolderId(_owner)); } /// Checks if a specified address has asset owner or co-owner rights. /// @param _owner address to check. /// @param _symbol asset symbol. /// @return owner rights availability. function hasAssetRights(address _owner, bytes32 _symbol) public view returns (bool) { uint holderId = getHolderId(_owner); return isCreated(_symbol) && (assets[_symbol].owner == holderId || assets[_symbol].partowners[holderId]); } /// Returns asset total supply. /// /// @param _symbol asset symbol. /// /// @return asset total supply. function totalSupply(bytes32 _symbol) public view returns (uint) { return assets[_symbol].totalSupply; } /// Returns asset balance for a particular holder. /// /// @param _holder holder address. /// @param _symbol asset symbol. /// /// @return holder balance. function balanceOf(address _holder, bytes32 _symbol) public view returns (uint) { return _balanceOf(getHolderId(_holder), _symbol); } /// Returns asset balance for a particular holder id. /// /// @param _holderId holder id. /// @param _symbol asset symbol. /// /// @return holder balance. function _balanceOf(uint _holderId, bytes32 _symbol) public view returns (uint) { return assets[_symbol].wallets[_holderId].balance; } /// Returns current address for a particular holder id. /// /// @param _holderId holder id. /// /// @return holder address. function _address(uint _holderId) public view returns (address) { return holders[_holderId].addr; } /// Adds a co-owner for an asset with provided symbol. /// @dev Should be performed by a contract owner or its co-owners /// /// @param _symbol asset's symbol /// @param _partowner a co-owner of an asset /// /// @return errorCode result code of an operation function addAssetPartOwner(bytes32 _symbol, address _partowner) onlyOneOfOwners(_symbol) public returns (uint) { uint holderId = _createHolderId(_partowner); assets[_symbol].partowners[holderId] = true; CAVPlatformEmitter(eventsHistory).emitOwnershipChange(0x0, _partowner, _symbol); return OK; } /// Removes a co-owner for an asset with provided symbol. /// @dev Should be performed by a contract owner or its co-owners /// /// @param _symbol asset's symbol /// @param _partowner a co-owner of an asset /// /// @return errorCode result code of an operation function removeAssetPartOwner(bytes32 _symbol, address _partowner) onlyOneOfOwners(_symbol) public returns (uint) { uint holderId = getHolderId(_partowner); delete assets[_symbol].partowners[holderId]; CAVPlatformEmitter(eventsHistory).emitOwnershipChange(_partowner, 0x0, _symbol); return OK; } /// Sets Proxy contract address for a particular asset. /// /// Can be set only once for each asset, and only by contract owner. /// /// @param _proxyAddress Proxy contract address. /// @param _symbol asset symbol. /// /// @return success. function setProxy(address _proxyAddress, bytes32 _symbol) public onlyOneOfContractOwners returns (uint) { if (proxies[_symbol] != 0x0) { return CAV_PLATFORM_PROXY_ALREADY_EXISTS; } proxies[_symbol] = _proxyAddress; return OK; } /// Transfers asset balance between holders wallets. /// /// @param _fromId holder id to take from. /// @param _toId holder id to give to. /// @param _value amount to transfer. /// @param _symbol asset symbol. function _transferDirect(uint _fromId, uint _toId, uint _value, bytes32 _symbol) internal { assets[_symbol].wallets[_fromId].balance = assets[_symbol].wallets[_fromId].balance.sub(_value); assets[_symbol].wallets[_toId].balance = assets[_symbol].wallets[_toId].balance.add(_value); } /// Transfers asset balance between holders wallets. /// /// Performs sanity checks and takes care of allowances adjustment. /// /// @param _fromId holder id to take from. /// @param _toId holder id to give to. /// @param _value amount to transfer. /// @param _symbol asset symbol. /// @param _reference transfer comment to be included in a Transfer event. /// @param _senderId transfer initiator holder id. /// /// @return success. function _transfer(uint _fromId, uint _toId, uint _value, bytes32 _symbol, string _reference, uint _senderId) internal returns (uint) { // Should not allow to send to oneself. if (_fromId == _toId) { return _error(CAV_PLATFORM_CANNOT_APPLY_TO_ONESELF); } // Should have positive value. if (_value == 0) { return _error(CAV_PLATFORM_INVALID_VALUE); } // Should have enough balance. if (_balanceOf(_fromId, _symbol) < _value) { return _error(CAV_PLATFORM_INSUFFICIENT_BALANCE); } // Should have enough allowance. if (_fromId != _senderId && _allowance(_fromId, _senderId, _symbol) < _value) { return _error(CAV_PLATFORM_NOT_ENOUGH_ALLOWANCE); } _transferDirect(_fromId, _toId, _value, _symbol); // Adjust allowance. if (_fromId != _senderId) { assets[_symbol].wallets[_fromId].allowance[_senderId] = assets[_symbol].wallets[_fromId].allowance[_senderId].sub(_value); } // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitTransfer(_address(_fromId), _address(_toId), _symbol, _value, _reference); _proxyTransferEvent(_fromId, _toId, _value, _symbol); return OK; } /// Transfers asset balance between holders wallets. /// /// Can only be called by asset proxy. /// /// @param _to holder address to give to. /// @param _value amount to transfer. /// @param _symbol asset symbol. /// @param _reference transfer comment to be included in a Transfer event. /// @param _sender transfer initiator address. /// /// @return success. function proxyTransferWithReference(address _to, uint _value, bytes32 _symbol, string _reference, address _sender) public onlyProxy(_symbol) returns (uint) { return _transfer(getHolderId(_sender), _createHolderId(_to), _value, _symbol, _reference, getHolderId(_sender)); } /// Ask asset Proxy contract to emit ERC20 compliant Transfer event. /// /// @param _fromId holder id to take from. /// @param _toId holder id to give to. /// @param _value amount to transfer. /// @param _symbol asset symbol. function _proxyTransferEvent(uint _fromId, uint _toId, uint _value, bytes32 _symbol) internal { if (proxies[_symbol] != 0x0) { // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. ProxyEventsEmitter(proxies[_symbol]).emitTransfer(_address(_fromId), _address(_toId), _value); } } /// Returns holder id for the specified address. /// /// @param _holder holder address. /// /// @return holder id. function getHolderId(address _holder) public view returns (uint) { return holderIndex[_holder]; } /// Returns holder id for the specified address, creates it if needed. /// /// @param _holder holder address. /// /// @return holder id. function _createHolderId(address _holder) internal returns (uint) { uint holderId = holderIndex[_holder]; if (holderId == 0) { holderId = ++holdersCount; holders[holderId].addr = _holder; holderIndex[_holder] = holderId; } return holderId; } /// Issues new asset token on the platform. /// /// Tokens issued with this call go straight to contract owner. /// Each symbol can be issued only once, and only by contract owner. /// /// @param _symbol asset symbol. /// @param _value amount of tokens to issue immediately. /// @param _name name of the asset. /// @param _description description for the asset. /// @param _baseUnit number of decimals. /// @param _isReissuable dynamic or fixed supply. /// /// @return success. function issueAsset(bytes32 _symbol, uint _value, string _name, string _description, uint8 _baseUnit, bool _isReissuable) public returns (uint) { return issueAsset(_symbol, _value, _name, _description, _baseUnit, _isReissuable, msg.sender); } /// Issues new asset token on the platform. /// /// Tokens issued with this call go straight to contract owner. /// Each symbol can be issued only once, and only by contract owner. /// /// @param _symbol asset symbol. /// @param _value amount of tokens to issue immediately. /// @param _name name of the asset. /// @param _description description for the asset. /// @param _baseUnit number of decimals. /// @param _isReissuable dynamic or fixed supply. /// @param _account address where issued balance will be held /// /// @return success. function issueAsset(bytes32 _symbol, uint _value, string _name, string _description, uint8 _baseUnit, bool _isReissuable, address _account) onlyOneOfContractOwners public returns (uint) { // Should have positive value if supply is going to be fixed. if (_value == 0 && !_isReissuable) { return _error(CAV_PLATFORM_CANNOT_ISSUE_FIXED_ASSET_WITH_INVALID_VALUE); } // Should not be issued yet. if (isCreated(_symbol)) { return _error(CAV_PLATFORM_ASSET_ALREADY_ISSUED); } uint holderId = _createHolderId(_account); uint creatorId = _account == msg.sender ? holderId : _createHolderId(msg.sender); symbols.push(_symbol); assets[_symbol] = Asset(creatorId, _value, _name, _description, _isReissuable, _baseUnit); assets[_symbol].wallets[holderId].balance = _value; // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitIssue(_symbol, _value, _address(holderId)); return OK; } /// Issues additional asset tokens if the asset have dynamic supply. /// /// Tokens issued with this call go straight to asset owner. /// Can only be called by asset owner. /// /// @param _symbol asset symbol. /// @param _value amount of additional tokens to issue. /// /// @return success. function reissueAsset(bytes32 _symbol, uint _value) onlyOneOfOwners(_symbol) public returns (uint) { // Should have positive value. if (_value == 0) { return _error(CAV_PLATFORM_INVALID_VALUE); } Asset storage asset = assets[_symbol]; // Should have dynamic supply. if (!asset.isReissuable) { return _error(CAV_PLATFORM_CANNOT_REISSUE_FIXED_ASSET); } // Resulting total supply should not overflow. if (asset.totalSupply + _value < asset.totalSupply) { return _error(CAV_PLATFORM_SUPPLY_OVERFLOW); } uint holderId = getHolderId(msg.sender); asset.wallets[holderId].balance = asset.wallets[holderId].balance.add(_value); asset.totalSupply = asset.totalSupply.add(_value); // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitIssue(_symbol, _value, _address(holderId)); _proxyTransferEvent(0, holderId, _value, _symbol); return OK; } /// Destroys specified amount of senders asset tokens. /// /// @param _symbol asset symbol. /// @param _value amount of tokens to destroy. /// /// @return success. function revokeAsset(bytes32 _symbol, uint _value) public returns (uint) { // Should have positive value. if (_value == 0) { return _error(CAV_PLATFORM_INVALID_VALUE); } Asset storage asset = assets[_symbol]; uint holderId = getHolderId(msg.sender); // Should have enough tokens. if (asset.wallets[holderId].balance < _value) { return _error(CAV_PLATFORM_NOT_ENOUGH_TOKENS); } asset.wallets[holderId].balance = asset.wallets[holderId].balance.sub(_value); asset.totalSupply = asset.totalSupply.sub(_value); // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitRevoke(_symbol, _value, _address(holderId)); _proxyTransferEvent(holderId, 0, _value, _symbol); return OK; } /// Passes asset ownership to specified address. /// /// Only ownership is changed, balances are not touched. /// Can only be called by asset owner. /// /// @param _symbol asset symbol. /// @param _newOwner address to become a new owner. /// /// @return success. function changeOwnership(bytes32 _symbol, address _newOwner) public onlyOwner(_symbol) returns (uint) { if (_newOwner == 0x0) { return _error(CAV_PLATFORM_INVALID_NEW_OWNER); } Asset storage asset = assets[_symbol]; uint newOwnerId = _createHolderId(_newOwner); // Should pass ownership to another holder. if (asset.owner == newOwnerId) { return _error(CAV_PLATFORM_CANNOT_APPLY_TO_ONESELF); } address oldOwner = _address(asset.owner); asset.owner = newOwnerId; // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitOwnershipChange(oldOwner, _newOwner, _symbol); return OK; } /// Check if specified holder trusts an address with recovery procedure. /// /// @param _from truster. /// @param _to trustee. /// /// @return trust existance. function isTrusted(address _from, address _to) public view returns (bool) { return holders[getHolderId(_from)].trust[_to]; } /// Trust an address to perform recovery procedure for the caller. /// /// @param _to trustee. /// /// @return success. function trust(address _to) public returns (uint) { uint fromId = _createHolderId(msg.sender); // Should trust to another address. if (fromId == getHolderId(_to)) { return _error(CAV_PLATFORM_CANNOT_APPLY_TO_ONESELF); } // Should trust to yet untrusted. if (isTrusted(msg.sender, _to)) { return _error(CAV_PLATFORM_ALREADY_TRUSTED); } holders[fromId].trust[_to] = true; return OK; } /// Revoke trust to perform recovery procedure from an address. /// /// @param _to trustee. /// /// @return success. function distrust(address _to) checkTrust(msg.sender, _to) public returns (uint) { holders[getHolderId(msg.sender)].trust[_to] = false; return OK; } function massTransfer(address[] addresses, uint[] values, bytes32 _symbol) external onlyOneOfOwners(_symbol) returns (uint errorCode, uint count) { require(addresses.length == values.length); require(_symbol != 0x0); uint senderId = _createHolderId(msg.sender); uint success = 0; for(uint idx = 0; idx < addresses.length && msg.gas > 110000; idx++) { uint value = values[idx]; if (value == 0) { _error(CAV_PLATFORM_INVALID_VALUE); continue; } if (_balanceOf(senderId, _symbol) < value) { _error(CAV_PLATFORM_INSUFFICIENT_BALANCE); continue; } if (msg.sender == addresses[idx]) { _error(CAV_PLATFORM_CANNOT_APPLY_TO_ONESELF); continue; } uint holderId = _createHolderId(addresses[idx]); _transferDirect(senderId, holderId, value, _symbol); CAVPlatformEmitter(eventsHistory).emitTransfer(msg.sender, addresses[idx], _symbol, value, ""); success++; } return (OK, success); } /// Perform recovery procedure. /// /// This function logic is actually more of an addAccess(uint _holderId, address _to). /// It grants another address access to recovery subject wallets. /// Can only be called by trustee of recovery subject. /// /// @param _from holder address to recover from. /// @param _to address to grant access to. /// /// @return success. function recover(address _from, address _to) checkTrust(_from, msg.sender) public returns (uint errorCode) { // Should recover to previously unused address. if (getHolderId(_to) != 0) { return _error(CAV_PLATFORM_SHOULD_RECOVER_TO_NEW_ADDRESS); } // We take current holder address because it might not equal _from. // It is possible to recover from any old holder address, but event should have the current one. address from = holders[getHolderId(_from)].addr; holders[getHolderId(_from)].addr = _to; holderIndex[_to] = getHolderId(_from); // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: revert this transaction too; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitRecovery(from, _to, msg.sender); return OK; } /// Sets asset spending allowance for a specified spender. /// /// Note: to revoke allowance, one needs to set allowance to 0. /// /// @param _spenderId holder id to set allowance for. /// @param _value amount to allow. /// @param _symbol asset symbol. /// @param _senderId approve initiator holder id. /// /// @return success. function _approve(uint _spenderId, uint _value, bytes32 _symbol, uint _senderId) internal returns (uint) { // Asset should exist. if (!isCreated(_symbol)) { return _error(CAV_PLATFORM_ASSET_IS_NOT_ISSUED); } // Should allow to another holder. if (_senderId == _spenderId) { return _error(CAV_PLATFORM_CANNOT_APPLY_TO_ONESELF); } // Double Spend Attack checkpoint if (assets[_symbol].wallets[_senderId].allowance[_spenderId] != 0 && _value != 0) { return _error(CAV_PLATFORM_INVALID_INVOCATION); } assets[_symbol].wallets[_senderId].allowance[_spenderId] = _value; // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: revert this transaction too; // Recursive Call: safe, all changes already made. CAVPlatformEmitter(eventsHistory).emitApprove(_address(_senderId), _address(_spenderId), _symbol, _value); if (proxies[_symbol] != 0x0) { // Internal Out Of Gas/Throw: revert this transaction too; // Call Stack Depth Limit reached: n/a after HF 4; // Recursive Call: safe, all changes already made. ProxyEventsEmitter(proxies[_symbol]).emitApprove(_address(_senderId), _address(_spenderId), _value); } return OK; } /// Sets asset spending allowance for a specified spender. /// /// Can only be called by asset proxy. /// /// @param _spender holder address to set allowance to. /// @param _value amount to allow. /// @param _symbol asset symbol. /// @param _sender approve initiator address. /// /// @return success. function proxyApprove(address _spender, uint _value, bytes32 _symbol, address _sender) onlyProxy(_symbol) public returns (uint) { return _approve(_createHolderId(_spender), _value, _symbol, _createHolderId(_sender)); } /// Returns asset allowance from one holder to another. /// /// @param _from holder that allowed spending. /// @param _spender holder that is allowed to spend. /// @param _symbol asset symbol. /// /// @return holder to spender allowance. function allowance(address _from, address _spender, bytes32 _symbol) public view returns (uint) { return _allowance(getHolderId(_from), getHolderId(_spender), _symbol); } /// Returns asset allowance from one holder to another. /// /// @param _fromId holder id that allowed spending. /// @param _toId holder id that is allowed to spend. /// @param _symbol asset symbol. /// /// @return holder to spender allowance. function _allowance(uint _fromId, uint _toId, bytes32 _symbol) internal view returns (uint) { return assets[_symbol].wallets[_fromId].allowance[_toId]; } /// Prforms allowance transfer of asset balance between holders wallets. /// /// Can only be called by asset proxy. /// /// @param _from holder address to take from. /// @param _to holder address to give to. /// @param _value amount to transfer. /// @param _symbol asset symbol. /// @param _reference transfer comment to be included in a Transfer event. /// @param _sender allowance transfer initiator address. /// /// @return success. function proxyTransferFromWithReference(address _from, address _to, uint _value, bytes32 _symbol, string _reference, address _sender) onlyProxy(_symbol) public returns (uint) { return _transfer(getHolderId(_from), _createHolderId(_to), _value, _symbol, _reference, getHolderId(_sender)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_eventsHistory","type":"address"}],"name":"setupEventsHistory","outputs":[{"name":"errorCode","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_partowner","type":"address"}],"name":"addAssetPartOwner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_name","type":"string"},{"name":"_description","type":"string"},{"name":"_baseUnit","type":"uint8"},{"name":"_isReissuable","type":"bool"}],"name":"issueAsset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"getHolderId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_partowner","type":"address"}],"name":"removePartOwner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_symbol","type":"bytes32"},{"name":"_sender","type":"address"}],"name":"proxyApprove","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_symbol","type":"bytes32"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"proxyTransferFromWithReference","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_spender","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"holders","outputs":[{"name":"addr","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"isCreated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimContractOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"trust","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"emitTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"changeContractOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_symbol","type":"bytes32"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"proxyTransferWithReference","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingContractOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_holderId","type":"uint256"},{"name":"_symbol","type":"bytes32"}],"name":"_balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proxyAddress","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"setProxy","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"recover","outputs":[{"name":"errorCode","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"isTrusted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_holderId","type":"uint256"}],"name":"_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"proxies","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"holdersCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"assets","outputs":[{"name":"owner","type":"uint256"},{"name":"totalSupply","type":"uint256"},{"name":"name","type":"string"},{"name":"description","type":"string"},{"name":"isReissuable","type":"bool"},{"name":"baseUnit","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_name","type":"string"},{"name":"_description","type":"string"},{"name":"_baseUnit","type":"uint8"},{"name":"_isReissuable","type":"bool"},{"name":"_account","type":"address"}],"name":"issueAsset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_partowner","type":"address"}],"name":"addPartOwner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transferContractOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"emitOwnershipChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_by","type":"address"}],"name":"emitIssue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"description","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"isReissuable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_by","type":"address"}],"name":"emitRevoke","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"revokeAsset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"partowners","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"hasAssetRights","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"symbols","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"values","type":"uint256[]"},{"name":"_symbol","type":"bytes32"}],"name":"massTransfer","outputs":[{"name":"errorCode","type":"uint256"},{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_spender","type":"address"},{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"emitApprove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokens","type":"address[]"},{"name":"_to","type":"address"}],"name":"withdrawnTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"baseUnit","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_errorCode","type":"uint256"}],"name":"emitError","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"reissueAsset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_by","type":"address"}],"name":"emitRecovery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_partowner","type":"address"}],"name":"removeAssetPartOwner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbolsCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"eventsHistory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"distrust","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"changeOwnership","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"symbol","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"reference","type":"string"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"symbol","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"by","type":"address"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"symbol","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"by","type":"address"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"symbol","type":"bytes32"}],"name":"OwnershipChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":true,"name":"symbol","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approve","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"by","type":"address"}],"name":"Recovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"errorCode","type":"uint256"}],"name":"Error","type":"event"}]
Contract Creation Code
606060405260008054600160a060020a033316600160a060020a0319909116179055612b20806100306000396000f3006060604052600436106102795763ffffffff60e060020a60003504166302571be3811461027e57806302927d20146102b0578063048ae1bb146102e1578063085a4705146103035780630af3e660146103ad5780631286e393146103cc57806314712e2f146103eb578063161ff662146104185780631c8d5d38146104945780632a11ced0146104bc5780632f553d31146104d25780634592cd1d146104fc5780634637d8271461050f5780634d30b6be1461052e578063515c145714610550578063557f4bc9146105c357806357a96dd0146105e25780635aa77d3c146106555780635b7da33814610668578063638a9ce914610681578063648bf774146106a35780636713e230146106c85780636825c843146106ed578063691f3431146107035780636932af36146107905780636b4ed21b146107a657806383197ef0146107b95780639fda5b66146107cc578063a3ff0ea214610907578063a831751d146109c0578063a843c51f146109df578063a9612f72146109fe578063abafaa1614610a26578063b524abcf14610a4b578063bebcc04514610a61578063c4eeeeb914610a77578063c70bbc1314610a8d578063ca448a8814610ab2578063cb59646614610acb578063ccc11f1114610aea578063ccce413b14610b0c578063cdeb148514610b22578063ce606ee014610b67578063d54c8c8714610b7a578063d8f9659b14610ba5578063dc86e6f014610bff578063df26ca0814610c2b578063e0873c0614610c41578063e96b462a14610c5a578063ea14457e14610c7c578063ec77809f14610ca7578063ecac7f4b14610cc9578063f07629f814610cdc578063f0c06aa514610cef578063fd83915e14610d0e575b600080fd5b341561028957600080fd5b610294600435610d30565b604051600160a060020a03909116815260200160405180910390f35b34156102bb57600080fd5b6102cf600160a060020a0360043516610d5b565b60405190815260200160405180910390f35b34156102ec57600080fd5b6102cf600435600160a060020a0360243516610d98565b341561030e57600080fd5b6102cf600480359060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505060ff853516946020013515159350610e6692505050565b34156103b857600080fd5b6102cf600160a060020a0360043516610e84565b34156103d757600080fd5b6102cf600160a060020a0360043516610e9f565b34156103f657600080fd5b6102cf600160a060020a03600435811690602435906044359060643516610edc565b341561042357600080fd5b6102cf600160a060020a0360048035821691602480359091169160443591606435919060a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250610f29915050565b341561049f57600080fd5b6102cf600160a060020a0360043581169060243516604435610f82565b34156104c757600080fd5b610294600435610fa7565b34156104dd57600080fd5b6104e8600435610fc2565b604051901515815260200160405180910390f35b341561050757600080fd5b6104e8610fd6565b341561051a57600080fd5b6102cf600160a060020a0360043516611021565b341561053957600080fd5b6102cf600160a060020a03600435166024356110a6565b341561055b57600080fd5b6105c1600160a060020a0360048035821691602480359091169160443591606435919060a49060843590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506110c395505050505050565b005b34156105ce57600080fd5b6104e8600160a060020a0360043516611179565b34156105ed57600080fd5b6102cf60048035600160a060020a03169060248035916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506111cc915050565b341561066057600080fd5b61029461120a565b341561067357600080fd5b6102cf600435602435611219565b341561068c57600080fd5b6102cf600160a060020a0360043516602435611239565b34156106ae57600080fd5b6102cf600160a060020a03600435811690602435166112cc565b34156106d357600080fd5b6104e8600160a060020a036004358116906024351661140e565b34156106f857600080fd5b610294600435611452565b341561070e57600080fd5b61071960043561146d565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561075557808201518382015260200161073d565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561079b57600080fd5b610294600435611533565b34156107b157600080fd5b6102cf61154e565b34156107c457600080fd5b6105c1611554565b34156107d757600080fd5b6107e2600435611579565b60405186815260208101869052821515608082015260ff821660a082015260c06040820181815286546002600019610100600184161502019091160491830182905290606083019060e08401908890801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b50508381038252865460026000196101006001841615020190911604808252602090910190879080156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b50509850505050505050505060405180910390f35b341561091257600080fd5b6102cf600480359060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833560ff169360208101351515935060400135600160a060020a031691506115af9050565b34156109cb57600080fd5b6102cf600160a060020a03600435166117f1565b34156109ea57600080fd5b6104e8600160a060020a0360043516611832565b3415610a0957600080fd5b6105c1600160a060020a03600435811690602435166044356118a9565b3415610a3157600080fd5b6105c1600435602435600160a060020a03604435166118e9565b3415610a5657600080fd5b6102cf60043561192c565b3415610a6c57600080fd5b610719600435611941565b3415610a8257600080fd5b6104e86004356119d0565b3415610a9857600080fd5b6105c1600435602435600160a060020a03604435166119e8565b3415610abd57600080fd5b6102cf600435602435611a2b565b3415610ad657600080fd5b6104e8600160a060020a0360043516611b68565b3415610af557600080fd5b6104e8600160a060020a0360043516602435611b7d565b3415610b1757600080fd5b6102cf600435611bd9565b3415610b2d57600080fd5b610b4f6024600480358281019290820135918135918201910135604435611bf8565b60405191825260208201526040908101905180910390f35b3415610b7257600080fd5b610294611de5565b3415610b8557600080fd5b6105c1600160a060020a0360043581169060243516604435606435611df4565b3415610bb057600080fd5b6102cf600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250611e3c915050565b3415610c0a57600080fd5b610c15600435611f89565b60405160ff909116815260200160405180910390f35b3415610c3657600080fd5b6105c1600435611fa6565b3415610c4c57600080fd5b6102cf600435602435611fdc565b3415610c6557600080fd5b6104e8600160a060020a0360043516602435612127565b3415610c8757600080fd5b6105c1600160a060020a036004358116906024358116906044351661215a565b3415610cb257600080fd5b6102cf600435600160a060020a03602435166121b0565b3415610cd457600080fd5b6102cf612259565b3415610ce757600080fd5b61029461225f565b3415610cfa57600080fd5b6102cf600160a060020a036004351661226e565b3415610d1957600080fd5b6102cf600435600160a060020a03602435166122d4565b60008181526006602090815260408083205483526003909152902054600160a060020a03165b919050565b6000805433600160a060020a0390811691161415610d56575060098054600160a060020a038316600160a060020a03199091161790556001919050565b60008083610da63382611b7d565b15610e5e57610db4846123d3565b60008681526006602081815260408084208585529092019052808220805460ff19166001179055600954929450600160a060020a039092169163a9612f729190879089905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610e4557600080fd5b6102c65a03f11515610e5657600080fd5b505050600192505b505092915050565b6000610e77878787878787336115af565b90505b9695505050505050565b600160a060020a031660009081526004602052604090205490565b6000805433600160a060020a0390811691161415610d565750600160a060020a03166000908152600860205260409020805460ff19169055600190565b600082815260076020526040812054839033600160a060020a0390811691161415610f2057610f1d610f0d876123d3565b8686610f18876123d3565b61243e565b91505b50949350505050565b600083815260076020526040812054849033600160a060020a0390811691161415610f7757610f74610f5a89610e84565b610f63896123d3565b888888610f6f89610e84565b61262b565b91505b509695505050505050565b6000610f9f610f9085610e84565b610f9985610e84565b8461282c565b949350505050565b600360205260009081526040902054600160a060020a031681565b600090815260066020526040902054151590565b60015460009033600160a060020a03908116911614610ff75750600061101e565b506001805460008054600160a060020a0319908116600160a060020a038416179091551681555b90565b60008061102d336123d3565b905061103883610e84565b8114156110515761104a613a9961285a565b91506110a0565b61105b338461140e565b1561106b5761104a613aa361285a565b6000818152600360209081526040808320600160a060020a03871684526001908101909252909120805460ff19168217905591505b50919050565b60006110ba6110b484610e84565b83611219565b90505b92915050565b82600160a060020a038086169087167f8f1b83868d2ecc962fd90cfee71c9c52455fe10940937bc7571d90ba404c5c3b858560405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561113757808201518382015260200161111f565b50505050905090810190601f1680156111645780820380516001836020036101000a031916815260200191505b50935050505060405180910390a45050505050565b6000805433600160a060020a0390811691161415610d5657600160a060020a03821615156111a957506000610d56565b5060018054600160a060020a038316600160a060020a0319909116178155919050565b600083815260076020526040812054849033600160a060020a0390811691161415611200576111fd610f5a84610e84565b91505b5095945050505050565b600154600160a060020a031681565b600090815260066020908152604080832093835260059093019052205490565b6000805433600160a060020a039081169116148061126f5750600160a060020a03331660009081526008602052604090205460ff165b156110bd57600082815260076020526040902054600160a060020a03161561129a5750613a986110bd565b5060008181526007602052604090208054600160a060020a038416600160a060020a0319909116179055600192915050565b60008083336112db828261140e565b15611405576112e985610e84565b15611300576112f9613aa461285a565b9350611405565b6003600061130d88610e84565b81526020810191909152604001600090812054600160a060020a03169350859060039061133989610e84565b815260208101919091526040016000208054600160a060020a031916600160a060020a039290921691909117905561137086610e84565b600160a060020a038087166000908152600460205260409081902092909255600954169063ea14457e908590889033905160e060020a63ffffffff8616028152600160a060020a03938416600482015291831660248301529091166044820152606401600060405180830381600087803b15156113ec57600080fd5b6102c65a03f115156113fd57600080fd5b505050600193505b50505092915050565b60006003600061141d85610e84565b815260208082019290925260409081016000908120600160a060020a038616825260010190925290205460ff16905092915050565b600090815260036020526040902054600160a060020a031690565b611475612a21565b6006600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115275780601f106114fc57610100808354040283529160200191611527565b820191906000526020600020905b81548152906001019060200180831161150a57829003601f168201915b50505050509050919050565b600760205260009081526040902054600160a060020a031681565b60025481565b60005433600160a060020a03908116911614156115775733600160a060020a0316ff5b565b60066020526000908152604090208054600182015460048301549192909160028201916003019060ff8082169161010090041686565b600080548190819033600160a060020a03908116911614806115e95750600160a060020a03331660009081526008602052604090205460ff165b156117e457881580156115fa575084155b156116115761160a613a9e61285a565b92506117e4565b61161a8a610fc2565b1561162a5761160a613a9d61285a565b611633846123d3565b915033600160a060020a031684600160a060020a03161461165c57611657336123d3565b61165e565b815b9050600580548060010182816116749190612a33565b5060009182526020909120018a905560c0604051908101604090815282825260208083018c90528183018b9052606083018a9052871515608084015260ff891660a084015260008d815260069091522081518155602082015181600101556040820151816002019080516116ec929160200190612a5c565b50606082015181600301908051611707929160200190612a5c565b50608082015160048201805460ff191691151591909117905560a08201516004909101805460ff929092166101000261ff00199092169190911790555060008a81526006602090815260408083208584526005019091529020899055600954600160a060020a031663abafaa168b8b61177f86611452565b60405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b15156117cb57600080fd5b6102c65a03f115156117dc57600080fd5b505050600192505b5050979650505050505050565b6000805433600160a060020a0390811691161415610d565750600160a060020a03166000908152600860205260409020805460ff1916600190811790915590565b6000805433600160a060020a0390811691161415610d5657600160a060020a038216151561186257506000610d56565b600154600160a060020a0316156118845760018054600160a060020a03191690555b5060008054600160a060020a038316600160a060020a03199091161790556001919050565b80600160a060020a038084169085167f0de92ba2d86c482d7f947cc22a580692bb78d6277988023434905f44b8cd261a60405160405180910390a4505050565b600160a060020a038116837fd03c2206e12a8eb3553d780874e1a7941b9c67f3a726ce6edb4a9fd65e25ec988460405190815260200160405180910390a3505050565b60009081526006602052604090206001015490565b611949612a21565b6006600083600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115275780601f106114fc57610100808354040283529160200191611527565b60009081526006602052604090206004015460ff1690565b600160a060020a038116837fa4e2520a41c90422e37fc8ba7153c519a427a62ea5f494a14a218a7b9bceb6ca8460405190815260200160405180910390a3505050565b60008080831515611a4857611a41613a9a61285a565b9250610e5e565b60008581526006602052604090209150611a6133610e84565b600081815260058401602052604090205490915084901015611a8857611a41613aa161285a565b6000818152600583016020526040902054611aa9908563ffffffff6128bf16565b60008281526005840160205260409020556001820154611acf908563ffffffff6128bf16565b6001830155600954600160a060020a031663c70bbc138686611af085611452565b60405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b1515611b3c57600080fd5b6102c65a03f11515611b4d57600080fd5b505050611b5d81600086886128d1565b506001949350505050565b60086020526000908152604090205460ff1681565b600080611b8984610e84565b9050611b9483610fc2565b8015610f9f5750600083815260066020526040902054811480610f9f57506000838152600660208181526040808420858552909201905290205460ff16949350505050565b6005805482908110611be757fe5b600091825260209091200154905081565b600080600080600080600087611c0e3382611b7d565b15611dd5578b8a14611c1f57600080fd5b881515611c2b57600080fd5b611c34336123d3565b955060009450600093505b8b84108015611c5057506201adb05a115b15611dcd578a8a85818110611c6157fe5b9050602002013592508260001415611c8457611c7e613a9a61285a565b50611dc2565b82611c8f878b611219565b1015611ca057611c7e613a9b61285a565b8c8c85818110611cac57fe5b90506020020135600160a060020a0316600160a060020a031633600160a060020a03161415611ce057611c7e613a9961285a565b611d048d8d86818110611cef57fe5b90506020020135600160a060020a03166123d3565b9150611d128683858c612988565b600954600160a060020a031663515c1457338f8f88818110611d3057fe5b90506020020135600160a060020a03168c8760405160e060020a63ffffffff8716028152600160a060020a0394851660048201529290931660248301526044820152606481019190915260a06084820152600060a4820181905260e49091019060405180830381600087803b1515611da757600080fd5b6102c65a03f11515611db857600080fd5b5050600190950194505b600190930192611c3f565b600185975097505b5050505050509550959350505050565b600054600160a060020a031681565b81600160a060020a038085169086167f859b1cddb4da93a04541d62c27d7d83aa8173a1b37bbccd3c60ceb4ee19ee13e8460405190815260200160405180910390a450505050565b6000805481908190819033600160a060020a039081169116141561140557600092505b8551831015611f7d57858381518110611e7457fe5b90602001906020020151915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611ed757600080fd5b6102c65a03f11515611ee857600080fd5b50505060405180519150508015611f725781600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611f5657600080fd5b6102c65a03f11515611f6757600080fd5b505050604051805150505b600190920191611e5f565b50600195945050505050565b600090815260066020526040902060040154610100900460ff1690565b7f2e36a7093f25f22bd4cbdeb6040174c3ba4c5fe8f1abc04e7c3c48f26c7413e08160405190815260200160405180910390a150565b600080600084611fec3382611b7d565b1561140557841515612003576112f9613a9a61285a565b6000868152600660205260409020600481015490935060ff16151561202d576112f9613a9f61285a565b60018301548581011015612046576112f9613aa061285a565b61204f33610e84565b6000818152600585016020526040902054909250612073908663ffffffff612a0b16565b60008381526005850160205260409020556001830154612099908663ffffffff612a0b16565b6001840155600954600160a060020a031663abafaa1687876120ba86611452565b60405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b151561210657600080fd5b6102c65a03f1151561211757600080fd5b505050611f7d60008387896128d1565b600061213282610fc2565b80156110ba575061214283610e84565b60008381526006602052604090205414905092915050565b81600160a060020a031683600160a060020a03167f6c0468512076e943ed3d1c5aae1d6903c72162713d86aedd1381b3ac19e10cec83604051600160a060020a03909116815260200160405180910390a3505050565b600080836121be3382611b7d565b15610e5e576121cc84610e84565b60008681526006602081815260408084208585529092019052808220805460ff19169055600954929450600160a060020a039092169163a9612f7291879189905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610e4557600080fd5b60055490565b600954600160a060020a031681565b6000338261227c828261140e565b156122cd5760006003600061229033610e84565b815260208082019290925260409081016000908120600160a060020a0389168252600190810190935220805460ff19169215159290921790915592505b5050919050565b600080600080856122e53382612127565b156123c957600160a060020a038616151561230c57612305613aa261285a565b94506123c9565b60008781526006602052604090209350612325866123d3565b845490935083141561233c57612305613a9961285a565b835461234790611452565b838555600954909250600160a060020a031663a9612f7283888a60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b15156123b057600080fd5b6102c65a03f115156123c157600080fd5b505050600194505b5050505092915050565b600160a060020a0381166000908152600460205260408120548015156110bd5750600280546001019081905560008181526003602090815260408083208054600160a060020a031916600160a060020a03881690811790915583526004909152902081905592915050565b600061244983610fc2565b15156124615761245a613aa561285a565b9050610f9f565b848214156124745761245a613a9961285a565b60008381526006602090815260408083208584526005018252808320888452600101909152902054158015906124a957508315155b156124b95761245a613aa961285a565b600083815260066020908152604080832085845260050182528083208884526001019091529020849055600954600160a060020a031663d54c8c876124fd84611452565b61250688611452565b868860405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401600060405180830381600087803b151561255c57600080fd5b6102c65a03f1151561256d57600080fd5b505050600083815260076020526040902054600160a060020a031615611b5d57600083815260076020526040902054600160a060020a031663233850896125b384611452565b6125bc88611452565b8760405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561260c57600080fd5b6102c65a03f1151561261d57600080fd5b505050506001949350505050565b60008587141561264757612640613a9961285a565b9050610e7a565b84151561265957612640613a9a61285a565b846126648886611219565b101561267557612640613a9b61285a565b81871415801561268e57508461268c88848761282c565b105b1561269e57612640613a9c61285a565b6126aa87878787612988565b8682146127125760008481526006602090815260408083208a845260050182528083208584526001019091529020546126e9908663ffffffff6128bf16565b60008581526006602090815260408083208b845260050182528083208684526001019091529020555b600954600160a060020a031663515c145761272c89611452565b61273589611452565b87898860405160e060020a63ffffffff8816028152600160a060020a03808716600483019081529086166024830152604482018590526064820184905260a060848301908152909160a40183818151815260200191508051906020019080838360005b838110156127b0578082015183820152602001612798565b50505050905090810190601f1680156127dd5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15156127ff57600080fd5b6102c65a03f1151561281057600080fd5b50505061281f878787876128d1565b5060019695505050505050565b6000908152600660209081526040808320948352600590940181528382209282526001909201909152205490565b600954600090600160a060020a031663df26ca088360405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b15156128a557600080fd5b6102c65a03f115156128b657600080fd5b50929392505050565b6000828211156128cb57fe5b50900390565b600081815260076020526040902054600160a060020a03161561298257600081815260076020526040902054600160a060020a03166323de665161291486611452565b61291d86611452565b8560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561296d57600080fd5b6102c65a03f1151561297e57600080fd5b5050505b50505050565b60008181526006602090815260408083208784526005019091529020546129b5908363ffffffff6128bf16565b60008281526006602090815260408083208884526005019091528082209290925584815220546129e59083612a0b565b600091825260066020908152604080842095845260059095019052929020919091555050565b600082820183811015612a1a57fe5b9392505050565b60206040519081016040526000815290565b815481835581811511612a5757600083815260209020612a57918101908301612ada565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a9d57805160ff1916838001178555612aca565b82800160010185558215612aca579182015b82811115612aca578251825591602001919060010190612aaf565b50612ad6929150612ada565b5090565b61101e91905b80821115612ad65760008155600101612ae05600a165627a7a723058206aae976c16e8c07327c074bb015463740b047fa06a6e0cd1b3b22c8e4f2a8f2a0029
Deployed Bytecode
0x6060604052600436106102795763ffffffff60e060020a60003504166302571be3811461027e57806302927d20146102b0578063048ae1bb146102e1578063085a4705146103035780630af3e660146103ad5780631286e393146103cc57806314712e2f146103eb578063161ff662146104185780631c8d5d38146104945780632a11ced0146104bc5780632f553d31146104d25780634592cd1d146104fc5780634637d8271461050f5780634d30b6be1461052e578063515c145714610550578063557f4bc9146105c357806357a96dd0146105e25780635aa77d3c146106555780635b7da33814610668578063638a9ce914610681578063648bf774146106a35780636713e230146106c85780636825c843146106ed578063691f3431146107035780636932af36146107905780636b4ed21b146107a657806383197ef0146107b95780639fda5b66146107cc578063a3ff0ea214610907578063a831751d146109c0578063a843c51f146109df578063a9612f72146109fe578063abafaa1614610a26578063b524abcf14610a4b578063bebcc04514610a61578063c4eeeeb914610a77578063c70bbc1314610a8d578063ca448a8814610ab2578063cb59646614610acb578063ccc11f1114610aea578063ccce413b14610b0c578063cdeb148514610b22578063ce606ee014610b67578063d54c8c8714610b7a578063d8f9659b14610ba5578063dc86e6f014610bff578063df26ca0814610c2b578063e0873c0614610c41578063e96b462a14610c5a578063ea14457e14610c7c578063ec77809f14610ca7578063ecac7f4b14610cc9578063f07629f814610cdc578063f0c06aa514610cef578063fd83915e14610d0e575b600080fd5b341561028957600080fd5b610294600435610d30565b604051600160a060020a03909116815260200160405180910390f35b34156102bb57600080fd5b6102cf600160a060020a0360043516610d5b565b60405190815260200160405180910390f35b34156102ec57600080fd5b6102cf600435600160a060020a0360243516610d98565b341561030e57600080fd5b6102cf600480359060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505060ff853516946020013515159350610e6692505050565b34156103b857600080fd5b6102cf600160a060020a0360043516610e84565b34156103d757600080fd5b6102cf600160a060020a0360043516610e9f565b34156103f657600080fd5b6102cf600160a060020a03600435811690602435906044359060643516610edc565b341561042357600080fd5b6102cf600160a060020a0360048035821691602480359091169160443591606435919060a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250610f29915050565b341561049f57600080fd5b6102cf600160a060020a0360043581169060243516604435610f82565b34156104c757600080fd5b610294600435610fa7565b34156104dd57600080fd5b6104e8600435610fc2565b604051901515815260200160405180910390f35b341561050757600080fd5b6104e8610fd6565b341561051a57600080fd5b6102cf600160a060020a0360043516611021565b341561053957600080fd5b6102cf600160a060020a03600435166024356110a6565b341561055b57600080fd5b6105c1600160a060020a0360048035821691602480359091169160443591606435919060a49060843590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506110c395505050505050565b005b34156105ce57600080fd5b6104e8600160a060020a0360043516611179565b34156105ed57600080fd5b6102cf60048035600160a060020a03169060248035916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506111cc915050565b341561066057600080fd5b61029461120a565b341561067357600080fd5b6102cf600435602435611219565b341561068c57600080fd5b6102cf600160a060020a0360043516602435611239565b34156106ae57600080fd5b6102cf600160a060020a03600435811690602435166112cc565b34156106d357600080fd5b6104e8600160a060020a036004358116906024351661140e565b34156106f857600080fd5b610294600435611452565b341561070e57600080fd5b61071960043561146d565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561075557808201518382015260200161073d565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561079b57600080fd5b610294600435611533565b34156107b157600080fd5b6102cf61154e565b34156107c457600080fd5b6105c1611554565b34156107d757600080fd5b6107e2600435611579565b60405186815260208101869052821515608082015260ff821660a082015260c06040820181815286546002600019610100600184161502019091160491830182905290606083019060e08401908890801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b50508381038252865460026000196101006001841615020190911604808252602090910190879080156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b50509850505050505050505060405180910390f35b341561091257600080fd5b6102cf600480359060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050833560ff169360208101351515935060400135600160a060020a031691506115af9050565b34156109cb57600080fd5b6102cf600160a060020a03600435166117f1565b34156109ea57600080fd5b6104e8600160a060020a0360043516611832565b3415610a0957600080fd5b6105c1600160a060020a03600435811690602435166044356118a9565b3415610a3157600080fd5b6105c1600435602435600160a060020a03604435166118e9565b3415610a5657600080fd5b6102cf60043561192c565b3415610a6c57600080fd5b610719600435611941565b3415610a8257600080fd5b6104e86004356119d0565b3415610a9857600080fd5b6105c1600435602435600160a060020a03604435166119e8565b3415610abd57600080fd5b6102cf600435602435611a2b565b3415610ad657600080fd5b6104e8600160a060020a0360043516611b68565b3415610af557600080fd5b6104e8600160a060020a0360043516602435611b7d565b3415610b1757600080fd5b6102cf600435611bd9565b3415610b2d57600080fd5b610b4f6024600480358281019290820135918135918201910135604435611bf8565b60405191825260208201526040908101905180910390f35b3415610b7257600080fd5b610294611de5565b3415610b8557600080fd5b6105c1600160a060020a0360043581169060243516604435606435611df4565b3415610bb057600080fd5b6102cf600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250611e3c915050565b3415610c0a57600080fd5b610c15600435611f89565b60405160ff909116815260200160405180910390f35b3415610c3657600080fd5b6105c1600435611fa6565b3415610c4c57600080fd5b6102cf600435602435611fdc565b3415610c6557600080fd5b6104e8600160a060020a0360043516602435612127565b3415610c8757600080fd5b6105c1600160a060020a036004358116906024358116906044351661215a565b3415610cb257600080fd5b6102cf600435600160a060020a03602435166121b0565b3415610cd457600080fd5b6102cf612259565b3415610ce757600080fd5b61029461225f565b3415610cfa57600080fd5b6102cf600160a060020a036004351661226e565b3415610d1957600080fd5b6102cf600435600160a060020a03602435166122d4565b60008181526006602090815260408083205483526003909152902054600160a060020a03165b919050565b6000805433600160a060020a0390811691161415610d56575060098054600160a060020a038316600160a060020a03199091161790556001919050565b60008083610da63382611b7d565b15610e5e57610db4846123d3565b60008681526006602081815260408084208585529092019052808220805460ff19166001179055600954929450600160a060020a039092169163a9612f729190879089905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610e4557600080fd5b6102c65a03f11515610e5657600080fd5b505050600192505b505092915050565b6000610e77878787878787336115af565b90505b9695505050505050565b600160a060020a031660009081526004602052604090205490565b6000805433600160a060020a0390811691161415610d565750600160a060020a03166000908152600860205260409020805460ff19169055600190565b600082815260076020526040812054839033600160a060020a0390811691161415610f2057610f1d610f0d876123d3565b8686610f18876123d3565b61243e565b91505b50949350505050565b600083815260076020526040812054849033600160a060020a0390811691161415610f7757610f74610f5a89610e84565b610f63896123d3565b888888610f6f89610e84565b61262b565b91505b509695505050505050565b6000610f9f610f9085610e84565b610f9985610e84565b8461282c565b949350505050565b600360205260009081526040902054600160a060020a031681565b600090815260066020526040902054151590565b60015460009033600160a060020a03908116911614610ff75750600061101e565b506001805460008054600160a060020a0319908116600160a060020a038416179091551681555b90565b60008061102d336123d3565b905061103883610e84565b8114156110515761104a613a9961285a565b91506110a0565b61105b338461140e565b1561106b5761104a613aa361285a565b6000818152600360209081526040808320600160a060020a03871684526001908101909252909120805460ff19168217905591505b50919050565b60006110ba6110b484610e84565b83611219565b90505b92915050565b82600160a060020a038086169087167f8f1b83868d2ecc962fd90cfee71c9c52455fe10940937bc7571d90ba404c5c3b858560405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561113757808201518382015260200161111f565b50505050905090810190601f1680156111645780820380516001836020036101000a031916815260200191505b50935050505060405180910390a45050505050565b6000805433600160a060020a0390811691161415610d5657600160a060020a03821615156111a957506000610d56565b5060018054600160a060020a038316600160a060020a0319909116178155919050565b600083815260076020526040812054849033600160a060020a0390811691161415611200576111fd610f5a84610e84565b91505b5095945050505050565b600154600160a060020a031681565b600090815260066020908152604080832093835260059093019052205490565b6000805433600160a060020a039081169116148061126f5750600160a060020a03331660009081526008602052604090205460ff165b156110bd57600082815260076020526040902054600160a060020a03161561129a5750613a986110bd565b5060008181526007602052604090208054600160a060020a038416600160a060020a0319909116179055600192915050565b60008083336112db828261140e565b15611405576112e985610e84565b15611300576112f9613aa461285a565b9350611405565b6003600061130d88610e84565b81526020810191909152604001600090812054600160a060020a03169350859060039061133989610e84565b815260208101919091526040016000208054600160a060020a031916600160a060020a039290921691909117905561137086610e84565b600160a060020a038087166000908152600460205260409081902092909255600954169063ea14457e908590889033905160e060020a63ffffffff8616028152600160a060020a03938416600482015291831660248301529091166044820152606401600060405180830381600087803b15156113ec57600080fd5b6102c65a03f115156113fd57600080fd5b505050600193505b50505092915050565b60006003600061141d85610e84565b815260208082019290925260409081016000908120600160a060020a038616825260010190925290205460ff16905092915050565b600090815260036020526040902054600160a060020a031690565b611475612a21565b6006600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115275780601f106114fc57610100808354040283529160200191611527565b820191906000526020600020905b81548152906001019060200180831161150a57829003601f168201915b50505050509050919050565b600760205260009081526040902054600160a060020a031681565b60025481565b60005433600160a060020a03908116911614156115775733600160a060020a0316ff5b565b60066020526000908152604090208054600182015460048301549192909160028201916003019060ff8082169161010090041686565b600080548190819033600160a060020a03908116911614806115e95750600160a060020a03331660009081526008602052604090205460ff165b156117e457881580156115fa575084155b156116115761160a613a9e61285a565b92506117e4565b61161a8a610fc2565b1561162a5761160a613a9d61285a565b611633846123d3565b915033600160a060020a031684600160a060020a03161461165c57611657336123d3565b61165e565b815b9050600580548060010182816116749190612a33565b5060009182526020909120018a905560c0604051908101604090815282825260208083018c90528183018b9052606083018a9052871515608084015260ff891660a084015260008d815260069091522081518155602082015181600101556040820151816002019080516116ec929160200190612a5c565b50606082015181600301908051611707929160200190612a5c565b50608082015160048201805460ff191691151591909117905560a08201516004909101805460ff929092166101000261ff00199092169190911790555060008a81526006602090815260408083208584526005019091529020899055600954600160a060020a031663abafaa168b8b61177f86611452565b60405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b15156117cb57600080fd5b6102c65a03f115156117dc57600080fd5b505050600192505b5050979650505050505050565b6000805433600160a060020a0390811691161415610d565750600160a060020a03166000908152600860205260409020805460ff1916600190811790915590565b6000805433600160a060020a0390811691161415610d5657600160a060020a038216151561186257506000610d56565b600154600160a060020a0316156118845760018054600160a060020a03191690555b5060008054600160a060020a038316600160a060020a03199091161790556001919050565b80600160a060020a038084169085167f0de92ba2d86c482d7f947cc22a580692bb78d6277988023434905f44b8cd261a60405160405180910390a4505050565b600160a060020a038116837fd03c2206e12a8eb3553d780874e1a7941b9c67f3a726ce6edb4a9fd65e25ec988460405190815260200160405180910390a3505050565b60009081526006602052604090206001015490565b611949612a21565b6006600083600019166000191681526020019081526020016000206003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115275780601f106114fc57610100808354040283529160200191611527565b60009081526006602052604090206004015460ff1690565b600160a060020a038116837fa4e2520a41c90422e37fc8ba7153c519a427a62ea5f494a14a218a7b9bceb6ca8460405190815260200160405180910390a3505050565b60008080831515611a4857611a41613a9a61285a565b9250610e5e565b60008581526006602052604090209150611a6133610e84565b600081815260058401602052604090205490915084901015611a8857611a41613aa161285a565b6000818152600583016020526040902054611aa9908563ffffffff6128bf16565b60008281526005840160205260409020556001820154611acf908563ffffffff6128bf16565b6001830155600954600160a060020a031663c70bbc138686611af085611452565b60405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b1515611b3c57600080fd5b6102c65a03f11515611b4d57600080fd5b505050611b5d81600086886128d1565b506001949350505050565b60086020526000908152604090205460ff1681565b600080611b8984610e84565b9050611b9483610fc2565b8015610f9f5750600083815260066020526040902054811480610f9f57506000838152600660208181526040808420858552909201905290205460ff16949350505050565b6005805482908110611be757fe5b600091825260209091200154905081565b600080600080600080600087611c0e3382611b7d565b15611dd5578b8a14611c1f57600080fd5b881515611c2b57600080fd5b611c34336123d3565b955060009450600093505b8b84108015611c5057506201adb05a115b15611dcd578a8a85818110611c6157fe5b9050602002013592508260001415611c8457611c7e613a9a61285a565b50611dc2565b82611c8f878b611219565b1015611ca057611c7e613a9b61285a565b8c8c85818110611cac57fe5b90506020020135600160a060020a0316600160a060020a031633600160a060020a03161415611ce057611c7e613a9961285a565b611d048d8d86818110611cef57fe5b90506020020135600160a060020a03166123d3565b9150611d128683858c612988565b600954600160a060020a031663515c1457338f8f88818110611d3057fe5b90506020020135600160a060020a03168c8760405160e060020a63ffffffff8716028152600160a060020a0394851660048201529290931660248301526044820152606481019190915260a06084820152600060a4820181905260e49091019060405180830381600087803b1515611da757600080fd5b6102c65a03f11515611db857600080fd5b5050600190950194505b600190930192611c3f565b600185975097505b5050505050509550959350505050565b600054600160a060020a031681565b81600160a060020a038085169086167f859b1cddb4da93a04541d62c27d7d83aa8173a1b37bbccd3c60ceb4ee19ee13e8460405190815260200160405180910390a450505050565b6000805481908190819033600160a060020a039081169116141561140557600092505b8551831015611f7d57858381518110611e7457fe5b90602001906020020151915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611ed757600080fd5b6102c65a03f11515611ee857600080fd5b50505060405180519150508015611f725781600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611f5657600080fd5b6102c65a03f11515611f6757600080fd5b505050604051805150505b600190920191611e5f565b50600195945050505050565b600090815260066020526040902060040154610100900460ff1690565b7f2e36a7093f25f22bd4cbdeb6040174c3ba4c5fe8f1abc04e7c3c48f26c7413e08160405190815260200160405180910390a150565b600080600084611fec3382611b7d565b1561140557841515612003576112f9613a9a61285a565b6000868152600660205260409020600481015490935060ff16151561202d576112f9613a9f61285a565b60018301548581011015612046576112f9613aa061285a565b61204f33610e84565b6000818152600585016020526040902054909250612073908663ffffffff612a0b16565b60008381526005850160205260409020556001830154612099908663ffffffff612a0b16565b6001840155600954600160a060020a031663abafaa1687876120ba86611452565b60405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b151561210657600080fd5b6102c65a03f1151561211757600080fd5b505050611f7d60008387896128d1565b600061213282610fc2565b80156110ba575061214283610e84565b60008381526006602052604090205414905092915050565b81600160a060020a031683600160a060020a03167f6c0468512076e943ed3d1c5aae1d6903c72162713d86aedd1381b3ac19e10cec83604051600160a060020a03909116815260200160405180910390a3505050565b600080836121be3382611b7d565b15610e5e576121cc84610e84565b60008681526006602081815260408084208585529092019052808220805460ff19169055600954929450600160a060020a039092169163a9612f7291879189905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610e4557600080fd5b60055490565b600954600160a060020a031681565b6000338261227c828261140e565b156122cd5760006003600061229033610e84565b815260208082019290925260409081016000908120600160a060020a0389168252600190810190935220805460ff19169215159290921790915592505b5050919050565b600080600080856122e53382612127565b156123c957600160a060020a038616151561230c57612305613aa261285a565b94506123c9565b60008781526006602052604090209350612325866123d3565b845490935083141561233c57612305613a9961285a565b835461234790611452565b838555600954909250600160a060020a031663a9612f7283888a60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b15156123b057600080fd5b6102c65a03f115156123c157600080fd5b505050600194505b5050505092915050565b600160a060020a0381166000908152600460205260408120548015156110bd5750600280546001019081905560008181526003602090815260408083208054600160a060020a031916600160a060020a03881690811790915583526004909152902081905592915050565b600061244983610fc2565b15156124615761245a613aa561285a565b9050610f9f565b848214156124745761245a613a9961285a565b60008381526006602090815260408083208584526005018252808320888452600101909152902054158015906124a957508315155b156124b95761245a613aa961285a565b600083815260066020908152604080832085845260050182528083208884526001019091529020849055600954600160a060020a031663d54c8c876124fd84611452565b61250688611452565b868860405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401600060405180830381600087803b151561255c57600080fd5b6102c65a03f1151561256d57600080fd5b505050600083815260076020526040902054600160a060020a031615611b5d57600083815260076020526040902054600160a060020a031663233850896125b384611452565b6125bc88611452565b8760405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561260c57600080fd5b6102c65a03f1151561261d57600080fd5b505050506001949350505050565b60008587141561264757612640613a9961285a565b9050610e7a565b84151561265957612640613a9a61285a565b846126648886611219565b101561267557612640613a9b61285a565b81871415801561268e57508461268c88848761282c565b105b1561269e57612640613a9c61285a565b6126aa87878787612988565b8682146127125760008481526006602090815260408083208a845260050182528083208584526001019091529020546126e9908663ffffffff6128bf16565b60008581526006602090815260408083208b845260050182528083208684526001019091529020555b600954600160a060020a031663515c145761272c89611452565b61273589611452565b87898860405160e060020a63ffffffff8816028152600160a060020a03808716600483019081529086166024830152604482018590526064820184905260a060848301908152909160a40183818151815260200191508051906020019080838360005b838110156127b0578082015183820152602001612798565b50505050905090810190601f1680156127dd5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15156127ff57600080fd5b6102c65a03f1151561281057600080fd5b50505061281f878787876128d1565b5060019695505050505050565b6000908152600660209081526040808320948352600590940181528382209282526001909201909152205490565b600954600090600160a060020a031663df26ca088360405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b15156128a557600080fd5b6102c65a03f115156128b657600080fd5b50929392505050565b6000828211156128cb57fe5b50900390565b600081815260076020526040902054600160a060020a03161561298257600081815260076020526040902054600160a060020a03166323de665161291486611452565b61291d86611452565b8560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561296d57600080fd5b6102c65a03f1151561297e57600080fd5b5050505b50505050565b60008181526006602090815260408083208784526005019091529020546129b5908363ffffffff6128bf16565b60008281526006602090815260408083208884526005019091528082209290925584815220546129e59083612a0b565b600091825260066020908152604080842095845260059095019052929020919091555050565b600082820183811015612a1a57fe5b9392505050565b60206040519081016040526000815290565b815481835581811511612a5757600083815260209020612a57918101908301612ada565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a9d57805160ff1916838001178555612aca565b82800160010185558215612aca579182015b82811115612aca578251825591602001919060010190612aaf565b50612ad6929150612ada565b5090565b61101e91905b80821115612ad65760008155600101612ae05600a165627a7a723058206aae976c16e8c07327c074bb015463740b047fa06a6e0cd1b3b22c8e4f2a8f2a0029
Swarm Source
bzzr://6aae976c16e8c07327c074bb015463740b047fa06a6e0cd1b3b22c8e4f2a8f2a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.