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 56,948 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Proxy Transfer F... | 18642802 | 320 days ago | IN | 0 ETH | 0.00212752 | ||||
Change Ownership | 18320770 | 365 days ago | IN | 0 ETH | 0.00099457 | ||||
Set Proxy | 18320770 | 365 days ago | IN | 0 ETH | 0.00087959 | ||||
Issue Asset | 18320770 | 365 days ago | IN | 0 ETH | 0.00470022 | ||||
Enable Switch | 18222032 | 379 days ago | IN | 0 ETH | 0.00078991 | ||||
Enable Switch | 18222032 | 379 days ago | IN | 0 ETH | 0.00079009 | ||||
Enable Switch | 18222032 | 379 days ago | IN | 0 ETH | 0.00079009 | ||||
Enable Switch | 18222032 | 379 days ago | IN | 0 ETH | 0.00079009 | ||||
Enable Switch | 18222032 | 379 days ago | IN | 0 ETH | 0.00079009 | ||||
Enable Switch | 18222032 | 379 days ago | IN | 0 ETH | 0.00079009 | ||||
Change Ownership | 18112956 | 394 days ago | IN | 0 ETH | 0.00243266 | ||||
Set Proxy | 18112953 | 394 days ago | IN | 0 ETH | 0.00215137 | ||||
Issue Asset | 18112952 | 394 days ago | IN | 0 ETH | 0.00779276 | ||||
Enable Switch | 18112952 | 394 days ago | IN | 0 ETH | 0.00216486 | ||||
Enable Switch | 18112952 | 394 days ago | IN | 0 ETH | 0.00216486 | ||||
Enable Switch | 18112952 | 394 days ago | IN | 0 ETH | 0.00216486 | ||||
Enable Switch | 18112951 | 394 days ago | IN | 0 ETH | 0.00216486 | ||||
Enable Switch | 18112951 | 394 days ago | IN | 0 ETH | 0.00216436 | ||||
Enable Switch | 18112951 | 394 days ago | IN | 0 ETH | 0.00216486 | ||||
Change Ownership | 16973941 | 554 days ago | IN | 0 ETH | 0.00243266 | ||||
Set Proxy | 16973940 | 554 days ago | IN | 0 ETH | 0.00215088 | ||||
Issue Asset | 16973939 | 554 days ago | IN | 0 ETH | 0.00778092 | ||||
Enable Switch | 16973939 | 554 days ago | IN | 0 ETH | 0.00216486 | ||||
Enable Switch | 16973939 | 554 days ago | IN | 0 ETH | 0.00216486 | ||||
Enable Switch | 16973939 | 554 days ago | IN | 0 ETH | 0.00216486 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EToken2
Compiler Version
v0.4.8+commit.60cc1668
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-07-17 */ // This software is a subject to Ambisafe License Agreement. // No use or distribution is allowed without written permission from Ambisafe. // https://ambisafe.com/terms.pdf pragma solidity 0.4.8; contract Ambi2 { function claimFor(address _address, address _owner) returns(bool); function hasRole(address _from, bytes32 _role, address _to) constant returns(bool); function isOwner(address _node, address _owner) constant returns(bool); } contract Ambi2Enabled { Ambi2 ambi2; modifier onlyRole(bytes32 _role) { if (address(ambi2) != 0x0 && ambi2.hasRole(this, _role, msg.sender)) { _; } } // Perform only after claiming the node, or claim in the same tx. function setupAmbi2(Ambi2 _ambi2) returns(bool) { if (address(ambi2) != 0x0) { return false; } ambi2 = _ambi2; return true; } } contract Ambi2EnabledFull is Ambi2Enabled { // Setup and claim atomically. function setupAmbi2(Ambi2 _ambi2) returns(bool) { if (address(ambi2) != 0x0) { return false; } if (!_ambi2.claimFor(this, msg.sender) && !_ambi2.isOwner(this, msg.sender)) { return false; } ambi2 = _ambi2; return true; } } contract RegistryICAPInterface { function parse(bytes32 _icap) constant returns(address, bytes32, bool); function institutions(bytes32 _institution) constant returns(address); } contract Cosigner { function consumeOperation(bytes32 _opHash, uint _required) returns(bool); } contract Emitter { function emitTransfer(address _from, address _to, bytes32 _symbol, uint _value, string _reference); function emitTransferToICAP(address _from, address _to, bytes32 _icap, uint _value, string _reference); function emitIssue(bytes32 _symbol, uint _value, address _by); function emitRevoke(bytes32 _symbol, uint _value, address _by); function emitOwnershipChange(address _from, address _to, bytes32 _symbol); function emitApprove(address _from, address _spender, bytes32 _symbol, uint _value); function emitRecovery(address _from, address _to, address _by); function emitError(bytes32 _message); function emitChange(bytes32 _symbol); } contract Proxy { function emitTransfer(address _from, address _to, uint _value); function emitApprove(address _from, address _spender, uint _value); } /** * @title EToken2. * * The official Ambisafe assets platform powering all kinds of tokens. * EToken2 uses EventsHistory 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: assets issuance, transfers, allowances, supply adjustments, lost wallet access recovery. * cosignature check, ICAP. * * Note: all the non constant functions return false instead of throwing in case if state change * didn't happen yet. */ contract EToken2 is Ambi2EnabledFull { mapping(bytes32 => bool) switches; function isEnabled(bytes32 _switch) constant returns(bool) { return switches[_switch]; } function enableSwitch(bytes32 _switch) onlyRole('issuance') returns(bool) { switches[_switch] = true; return true; } modifier checkEnabledSwitch(bytes32 _switch) { if (!isEnabled(_switch)) { _error('Feature is disabled'); } else { _; } } enum Features { Issue, TransferWithReference, Revoke, ChangeOwnership, Allowances, ICAP } // 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 of fixed supply. uint8 baseUnit; // Proposed number of decimals. bool isLocked; // Are changes still allowed. mapping(uint => Wallet) wallets; // Holders wallets. } // 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. Cosigner cosigner; // Cosigner contract for 2FA and recovery. 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; // Asset symbol to asset mapping. mapping(bytes32 => Asset) public assets; // Asset symbol to asset proxy mapping. mapping(bytes32 => address) public proxies; // ICAP registry contract. RegistryICAPInterface public registryICAP; // Should use interface of the emitter, but address of events history. Emitter public eventsHistory; /** * Emits Error event with specified error message. * * Should only be used if no state changes happened. * * @param _message error message. */ function _error(bytes32 _message) internal { eventsHistory.emitError(_message); } /** * Sets EventsHstory contract address. * * Can be set only once, and only by contract owner. * * @param _eventsHistory EventsHistory contract address. * * @return success. */ function setupEventsHistory(Emitter _eventsHistory) onlyRole('setup') returns(bool) { if (address(eventsHistory) != 0) { return false; } eventsHistory = _eventsHistory; return true; } /** * Sets RegistryICAP contract address. * * Can be set only once, and only by contract owner. * * @param _registryICAP RegistryICAP contract address. * * @return success. */ function setupRegistryICAP(RegistryICAPInterface _registryICAP) onlyRole('setup') returns(bool) { if (address(registryICAP) != 0) { return false; } registryICAP = _registryICAP; return true; } /** * Emits Error if called not by asset owner. */ modifier onlyOwner(bytes32 _symbol) { if (_isSignedOwner(_symbol)) { _; } else { _error('Only owner: access denied'); } } /** * Emits Error if called not by asset proxy. */ modifier onlyProxy(bytes32 _symbol) { if (_isProxy(_symbol)) { _; } else { _error('Only proxy: access denied'); } } /** * Emits Error if _from doesn't trust _to. */ modifier checkTrust(address _from, address _to) { if (isTrusted(_from, _to)) { _; } else { _error('Only trusted: access denied'); } } function _isSignedOwner(bytes32 _symbol) internal checkSigned(getHolderId(msg.sender), 1) returns(bool) { return isOwner(msg.sender, _symbol); } /** * Check asset existance. * * @param _symbol asset symbol. * * @return asset existance. */ function isCreated(bytes32 _symbol) constant returns(bool) { return assets[_symbol].owner != 0; } function isLocked(bytes32 _symbol) constant returns(bool) { return assets[_symbol].isLocked; } /** * Returns asset decimals. * * @param _symbol asset symbol. * * @return asset decimals. */ function baseUnit(bytes32 _symbol) constant returns(uint8) { return assets[_symbol].baseUnit; } /** * Returns asset name. * * @param _symbol asset symbol. * * @return asset name. */ function name(bytes32 _symbol) constant returns(string) { return assets[_symbol].name; } /** * Returns asset description. * * @param _symbol asset symbol. * * @return asset description. */ function description(bytes32 _symbol) constant returns(string) { return assets[_symbol].description; } /** * Returns asset reissuability. * * @param _symbol asset symbol. * * @return asset reissuability. */ function isReissuable(bytes32 _symbol) constant returns(bool) { return assets[_symbol].isReissuable; } /** * Returns asset owner address. * * @param _symbol asset symbol. * * @return asset owner address. */ function owner(bytes32 _symbol) constant 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) constant returns(bool) { return isCreated(_symbol) && (assets[_symbol].owner == getHolderId(_owner)); } /** * Returns asset total supply. * * @param _symbol asset symbol. * * @return asset total supply. */ function totalSupply(bytes32 _symbol) constant returns(uint) { return assets[_symbol].totalSupply; } /** * Returns asset balance for current address of a particular holder. * * @param _holder holder address. * @param _symbol asset symbol. * * @return holder balance. */ function balanceOf(address _holder, bytes32 _symbol) constant returns(uint) { uint holderId = getHolderId(_holder); return holders[holderId].addr == _holder ? _balanceOf(holderId, _symbol) : 0; } /** * 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) constant internal 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) constant internal returns(address) { return holders[_holderId].addr; } function _isProxy(bytes32 _symbol) constant internal returns(bool) { return proxies[_symbol] == msg.sender; } /** * Sets Proxy contract address for a particular asset. * * Can be set only once for each asset, and only by contract owner. * * @param _address Proxy contract address. * @param _symbol asset symbol. * * @return success. */ function setProxy(address _address, bytes32 _symbol) onlyOwner(_symbol) returns(bool) { if (proxies[_symbol] != 0x0 && assets[_symbol].isLocked) { return false; } proxies[_symbol] = _address; return true; } /** * 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 -= _value; assets[_symbol].wallets[_toId].balance += _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 checkSigned(_senderId, 1) returns(bool) { // Should not allow to send to oneself. if (_fromId == _toId) { _error('Cannot send to oneself'); return false; } // Should have positive value. if (_value == 0) { _error('Cannot send 0 value'); return false; } // Should have enough balance. if (_balanceOf(_fromId, _symbol) < _value) { _error('Insufficient balance'); return false; } // Should allow references. if (bytes(_reference).length > 0 && !isEnabled(sha3(_symbol, Features.TransferWithReference))) { _error('References feature is disabled'); return false; } // Should have enough allowance. if (_fromId != _senderId && _allowance(_fromId, _senderId, _symbol) < _value) { _error('Not enough allowance'); return false; } // Adjust allowance. if (_fromId != _senderId) { assets[_symbol].wallets[_fromId].allowance[_senderId] -= _value; } _transferDirect(_fromId, _toId, _value, _symbol); // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitTransfer(_address(_fromId), _address(_toId), _symbol, _value, _reference); _proxyTransferEvent(_fromId, _toId, _value, _symbol); return true; } // Feature and proxy checks done internally due to unknown symbol when the function is called. function _transferToICAP(uint _fromId, bytes32 _icap, uint _value, string _reference, uint _senderId) internal returns(bool) { var (to, symbol, success) = registryICAP.parse(_icap); if (!success) { _error('ICAP is not registered'); return false; } if (!isEnabled(sha3(symbol, Features.ICAP))) { _error('ICAP feature is disabled'); return false; } if (!_isProxy(symbol)) { _error('Only proxy: access denied'); return false; } uint toId = _createHolderId(to); if (!_transfer(_fromId, toId, _value, symbol, _reference, _senderId)) { return false; } // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitTransferToICAP(_address(_fromId), _address(toId), _icap, _value, _reference); return true; } function proxyTransferFromToICAPWithReference(address _from, bytes32 _icap, uint _value, string _reference, address _sender) returns(bool) { return _transferToICAP(getHolderId(_from), _icap, _value, _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; // Recursive Call: safe, all changes already made. Proxy(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) constant 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. * * _isReissuable is included in checkEnabledSwitch because it should be * explicitly allowed before issuing new asset. * * @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) checkEnabledSwitch(sha3(_symbol, _isReissuable, Features.Issue)) returns(bool) { // Should have positive value if supply is going to be fixed. if (_value == 0 && !_isReissuable) { _error('Cannot issue 0 value fixed asset'); return false; } // Should not be issued yet. if (isCreated(_symbol)) { _error('Asset already issued'); return false; } uint holderId = _createHolderId(msg.sender); assets[_symbol] = Asset(holderId, _value, _name, _description, _isReissuable, _baseUnit, false); assets[_symbol].wallets[holderId].balance = _value; // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitIssue(_symbol, _value, _address(holderId)); return true; } function changeAsset(bytes32 _symbol, string _name, string _description, uint8 _baseUnit) onlyOwner(_symbol) returns(bool) { if (isLocked(_symbol)) { _error('Asset is locked'); return false; } assets[_symbol].name = _name; assets[_symbol].description = _description; assets[_symbol].baseUnit = _baseUnit; eventsHistory.emitChange(_symbol); return true; } function lockAsset(bytes32 _symbol) onlyOwner(_symbol) returns(bool) { if (isLocked(_symbol)) { _error('Asset is locked'); return false; } assets[_symbol].isLocked = true; return true; } /** * 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) onlyOwner(_symbol) returns(bool) { // Should have positive value. if (_value == 0) { _error('Cannot reissue 0 value'); return false; } Asset asset = assets[_symbol]; // Should have dynamic supply. if (!asset.isReissuable) { _error('Cannot reissue fixed asset'); return false; } // Resulting total supply should not overflow. if (asset.totalSupply + _value < asset.totalSupply) { _error('Total supply overflow'); return false; } uint holderId = getHolderId(msg.sender); asset.wallets[holderId].balance += _value; asset.totalSupply += _value; // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitIssue(_symbol, _value, _address(holderId)); _proxyTransferEvent(0, holderId, _value, _symbol); return true; } /** * 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) checkEnabledSwitch(sha3(_symbol, Features.Revoke)) checkSigned(getHolderId(msg.sender), 1) returns(bool) { // Should have positive value. if (_value == 0) { _error('Cannot revoke 0 value'); return false; } Asset asset = assets[_symbol]; uint holderId = getHolderId(msg.sender); // Should have enough tokens. if (asset.wallets[holderId].balance < _value) { _error('Not enough tokens to revoke'); return false; } asset.wallets[holderId].balance -= _value; asset.totalSupply -= _value; // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitRevoke(_symbol, _value, _address(holderId)); _proxyTransferEvent(holderId, 0, _value, _symbol); return true; } /** * 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) checkEnabledSwitch(sha3(_symbol, Features.ChangeOwnership)) onlyOwner(_symbol) returns(bool) { Asset asset = assets[_symbol]; uint newOwnerId = _createHolderId(_newOwner); // Should pass ownership to another holder. if (asset.owner == newOwnerId) { _error('Cannot pass ownership to oneself'); return false; } address oldOwner = _address(asset.owner); asset.owner = newOwnerId; // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitOwnershipChange(oldOwner, _address(newOwnerId), _symbol); return true; } function setCosignerAddress(Cosigner _cosigner) checkSigned(_createHolderId(msg.sender), 1) returns(bool) { if (!_checkSigned(_cosigner, getHolderId(msg.sender), 1)) { _error('Invalid cosigner'); return false; } holders[_createHolderId(msg.sender)].cosigner = _cosigner; return true; } function isCosignerSet(uint _holderId) constant returns(bool) { return address(holders[_holderId].cosigner) != 0x0; } function _checkSigned(Cosigner _cosigner, uint _holderId, uint _required) internal returns(bool) { return _cosigner.consumeOperation(sha3(msg.data, _holderId), _required); } modifier checkSigned(uint _holderId, uint _required) { if (!isCosignerSet(_holderId) || _checkSigned(holders[_holderId].cosigner, _holderId, _required)) { _; } else { _error('Cosigner: access denied'); } } /** * 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) constant 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) returns(bool) { uint fromId = _createHolderId(msg.sender); // Should trust to another address. if (fromId == getHolderId(_to)) { _error('Cannot trust to oneself'); return false; } // Should trust to yet untrusted. if (isTrusted(msg.sender, _to)) { _error('Already trusted'); return false; } holders[fromId].trust[_to] = true; return true; } /** * Revoke trust to perform recovery procedure from an address. * * @param _to trustee. * * @return success. */ function distrust(address _to) checkTrust(msg.sender, _to) returns(bool) { holders[getHolderId(msg.sender)].trust[_to] = false; return true; } /** * Perform recovery procedure. * * This function logic is actually more of an grantAccess(uint _holderId, address _to). * It grants another address access to recovery subject wallets. * Can only be called by trustee of recovery subject. * If cosigning is enabled, should have atleast 2 confirmations. * * @dev Deprecated. Backward compatibility. * * @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) returns(bool) { return _grantAccess(getHolderId(_from), _to); } /** * Perform recovery procedure. * * This function logic is actually more of an grantAccess(uint _holderId, address _to). * It grants another address access to subject holder wallets. * Can only be called if pre-confirmed by atleast 2 cosign oracles. * * @param _from holder address to recover from. * @param _to address to grant access to. * * @return success. */ function grantAccess(address _from, address _to) returns(bool) { if (!isCosignerSet(getHolderId(_from))) { _error('Cosigner not set'); return false; } return _grantAccess(getHolderId(_from), _to); } function _grantAccess(uint _fromId, address _to) internal checkSigned(_fromId, 2) returns(bool) { // Should recover to previously unused address. if (getHolderId(_to) != 0) { _error('Should recover to new address'); return false; } // 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[_fromId].addr; holders[_fromId].addr = _to; holderIndex[_to] = _fromId; // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitRecovery(from, _to, msg.sender); return true; } /** * 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 checkEnabledSwitch(sha3(_symbol, Features.Allowances)) checkSigned(_senderId, 1) returns(bool) { // Asset should exist. if (!isCreated(_symbol)) { _error('Asset is not issued'); return false; } // Should allow to another holder. if (_senderId == _spenderId) { _error('Cannot approve to oneself'); return false; } assets[_symbol].wallets[_senderId].allowance[_spenderId] = _value; // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. eventsHistory.emitApprove(_address(_senderId), _address(_spenderId), _symbol, _value); if (proxies[_symbol] != 0x0) { // Internal Out Of Gas/Throw: revert this transaction too; // Recursive Call: safe, all changes already made. Proxy(proxies[_symbol]).emitApprove(_address(_senderId), _address(_spenderId), _value); } return true; } /** * 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) returns(bool) { 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) constant 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) constant internal 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) returns(bool) { 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,"type":"function"},{"constant":false,"inputs":[{"name":"_eventsHistory","type":"address"}],"name":"setupEventsHistory","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_switch","type":"bytes32"}],"name":"isEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"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":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"getHolderId","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_name","type":"string"},{"name":"_description","type":"string"},{"name":"_baseUnit","type":"uint8"}],"name":"changeAsset","outputs":[{"name":"","type":"bool"}],"payable":false,"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":"bool"}],"payable":false,"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":"bool"}],"payable":false,"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,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"holders","outputs":[{"name":"addr","type":"address"},{"name":"cosigner","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"isCreated","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"isLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"trust","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_switch","type":"bytes32"}],"name":"enableSwitch","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"setProxy","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"recover","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"isTrusted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"proxies","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"holdersCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_registryICAP","type":"address"}],"name":"setupRegistryICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_ambi2","type":"address"}],"name":"setupAmbi2","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cosigner","type":"address"}],"name":"setCosignerAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holderId","type":"uint256"}],"name":"isCosignerSet","outputs":[{"name":"","type":"bool"}],"payable":false,"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"},{"name":"isLocked","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"registryICAP","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"proxyTransferFromToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"description","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"isReissuable","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"grantAccess","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"revokeAsset","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"lockAsset","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"baseUnit","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"reissueAsset","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"eventsHistory","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"distrust","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"changeOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"}]
Contract Creation Code
606060405234610000575b6132d9806100196000396000f300606060405236156101d25763ffffffff60e060020a60003504166302571be381146101d757806302927d20146102035780630610e03714610230578063085a4705146102545780630af3e66014610308578063106fcb7a1461033357806314712e2f146103dd578063161ff662146104185780631c8d5d381461049f5780632a11ced0146104d35780632f553d311461050957806332a16f4e1461052d5780634637d827146105515780634ba4079a1461057e5780634d30b6be146105a2578063638a9ce9146105d0578063648bf774146106005780636713e23014610633578063691f3431146106665780636932af36146106f65780636b4ed21b14610722578063774248a3146107415780637a386e881461076e57806382fc49b81461079b5780639666e1f9146107c85780639fda5b66146107ec578063a0f15b871461092e578063a69032ee14610957578063b524abcf146109d8578063bebcc045146109fa578063c4eeeeb914610a8a578063c6a09d9514610aae578063ca448a8814610ae1578063d0169c1e14610b08578063dc86e6f014610b2c578063e0873c0614610b52578063e96b462a14610b79578063f07629f814610ba9578063f0c06aa514610bd2578063fd83915e14610bff575b610000565b34610000576101e7600435610c2f565b60408051600160a060020a039092168252519081900360200190f35b346100005761021c600160a060020a0360043516610c5a565b604080519115158252519081900360200190f35b346100005761021c600435610d39565b604080519115158252519081900360200190f35b3461000057604080516020600460443581810135601f810184900484028501840190955284845261021c94823594602480359560649492939190920191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979998810197919650918201945092508291508401838280828437509496505060ff853516946020013515159350610d5192505050565b604080519115158252519081900360200190f35b3461000057610321600160a060020a03600435166110bb565b60408051918252519081900360200190f35b346100005760408051602060046024803582810135601f810185900485028601850190965285855261021c958335959394604494939290920191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979998810197919650918201945092508291508401838280828437509496505050923560ff1692506110da915050565b604080519115158252519081900360200190f35b346100005761021c600160a060020a03600435811690602435906044359060643516611343565b604080519115158252519081900360200190f35b3461000057604080516020601f60843560048181013592830184900484028501840190955281845261021c94600160a060020a0381358116956024803590921695604435956064359560a4940191819084018382808284375094965050509235600160a060020a031692506113ac915050565b604080519115158252519081900360200190f35b3461000057610321600160a060020a0360043581169060243516604435611421565b60408051918252519081900360200190f35b34610000576104e3600435611448565b60408051600160a060020a03938416815291909216602082015281519081900390910190f35b346100005761021c60043561146e565b604080519115158252519081900360200190f35b346100005761021c600435611485565b604080519115158252519081900360200190f35b346100005761021c600160a060020a03600435166114a6565b604080519115158252519081900360200190f35b346100005761021c600435611574565b604080519115158252519081900360200190f35b3461000057610321600160a060020a036004351660243561164c565b60408051918252519081900360200190f35b346100005761021c600160a060020a0360043516602435611699565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043581169060243516611746565b604080519115158252519081900360200190f35b346100005761021c600160a060020a03600435811690602435166117a6565b604080519115158252519081900360200190f35b34610000576106766004356117eb565b6040805160208082528351818301528351919283929083019185019080838382156106bc575b8051825260208311156106bc57601f19909201916020918201910161069c565b505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576101e7600435611898565b60408051600160a060020a039092168252519081900360200190f35b34610000576103216118b3565b60408051918252519081900360200190f35b346100005761021c600160a060020a03600435166118b9565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043516611998565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043516611aff565b604080519115158252519081900360200190f35b346100005761021c600435611c01565b604080519115158252519081900360200190f35b34610000576107fc600435611c24565b6040805188815260208101889052841515608082015260ff841660a082015282151560c082015260e0918101828152875460026001821615610100908102600019019092160493830184905291929091606084019190840190899080156108a45780601f10610879576101008083540402835291602001916108a4565b820191906000526020600020905b81548152906001019060200180831161088757829003601f168201915b50508381038252875460026000196101006001841615020190911604808252602090910190889080156109185780601f106108ed57610100808354040283529160200191610918565b820191906000526020600020905b8154815290600101906020018083116108fb57829003601f168201915b5050995050505050505050505060405180910390f35b34610000576101e7611c64565b60408051600160a060020a039092168252519081900360200190f35b3461000057604080516020600460643581810135601f810184900484028501840190955284845261021c948235600160a060020a0316946024803595604435959460849492019190819084018382808284375094965050509235600160a060020a03169250611c73915050565b604080519115158252519081900360200190f35b3461000057610321600435611c9e565b60408051918252519081900360200190f35b3461000057610676600435611cb6565b6040805160208082528351818301528351919283929083019185019080838382156106bc575b8051825260208311156106bc57601f19909201916020918201910161069c565b505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b346100005761021c600435611d62565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043581169060243516611d7d565b604080519115158252519081900360200190f35b346100005761021c600435602435611de2565b604080519115158252519081900360200190f35b346100005761021c600435611fea565b604080519115158252519081900360200190f35b3461000057610b3c600435612084565b6040805160ff9092168252519081900360200190f35b346100005761021c6004356024356120a4565b604080519115158252519081900360200190f35b346100005761021c600160a060020a036004351660243561225c565b604080519115158252519081900360200190f35b34610000576101e7612291565b60408051600160a060020a039092168252519081900360200190f35b346100005761021c600160a060020a03600435166122a0565b604080519115158252519081900360200190f35b346100005761021c600435600160a060020a0360243516612336565b604080519115158252519081900360200190f35b60008181526005602090815260408083205483526003909152902054600160a060020a03165b919050565b6000805460dc60020a6407365747570290600160a060020a031615801590610cf2575060008054604080516020908101849052815160e160020a63169f2bcd028152600160a060020a03308116600483015260248201879052338116604483015292519290931693632d3e579a9360648082019492918390030190829087803b156100005760325a03f1156100005750506040515190505b15610d3157600854600160a060020a031615610d115760009150610d31565b60088054600160a060020a031916600160a060020a038516179055600191505b5b5b50919050565b60008181526001602052604090205460ff165b919050565b6040805187815282151560f860020a02602082015260006021820181905291519081900360220190208190610d8581610d39565b1515610da757610da260008051602061328e8339815191526124bf565b6110ad565b87158015610db3575083155b15610dea57610de17f43616e6e6f7420697373756520302076616c75652066697865642061737365746124bf565b600092506110ad565b610df38961146e565b15610e2a57610de17f417373657420616c7265616479206973737565640000000000000000000000006124bf565b600092506110ad565b610e333361252f565b6040805160e08101825282815260208082018c81528284018c8152606084018c9052891515608085015260ff8b1660a0850152600060c085018190528f8152600584529485208451815591516001838101919091559051805160028085018054818a5298879020999b5096989497601f61010095821615959095026000190116048301859004840194909392910190839010610eda57805160ff1916838001178555610f07565b82800160010185558215610f07579182015b82811115610f07578251825591602001919060010190610eec565b5b50610f289291505b80821115610f245760008155600101610f10565b5090565b50506060820151816003019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f7c57805160ff1916838001178555610fa9565b82800160010185558215610fa9579182015b82811115610fa9578251825591602001919060010190610f8e565b5b50610fca9291505b80821115610f245760008155600101610f10565b5090565b505060808201516004909101805460a084015160c0909401511515620100000262ff00001960ff959095166101000261ff001994151560ff1990931692909217939093161792909216179055600089815260056020818152604080842086855290920190529020889055600854600160a060020a031663abafaa168a8a6110508661259f565b6040805160e060020a63ffffffff871602815260048101949094526024840192909252600160a060020a0316604483015251606480830192600092919082900301818387803b156100005760325a03f11561000057505050600192505b5b5b50509695505050505050565b600160a060020a0381166000908152600460205260409020545b919050565b6000846110e6816125bd565b15611321576110f486611485565b1561112b576111227f4173736574206973206c6f636b656400000000000000000000000000000000006124bf565b6000915061131c565b846005600088600019166000191681526020019081526020016000206002019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061119357805160ff19168380011785556111c0565b828001600101855582156111c0579182015b828111156111c05782518255916020019190600101906111a5565b5b506111e19291505b80821115610f245760008155600101610f10565b5090565b50506000868152600560209081526040822086516003909101805481855293839020909360026000196001831615610100020190911604601f90810184900482019389019083901061123e57805160ff191683800117855561126b565b8280016001018555821561126b579182015b8281111561126b578251825591602001919060010190611250565b5b5061128c9291505b80821115610f245760008155600101610f10565b5090565b50506000868152600560205260408082206004908101805461ff00191661010060ff89160217905560085482517fa4a833170000000000000000000000000000000000000000000000000000000081529182018a90529151600160a060020a039092169263a4a833179260248084019382900301818387803b156100005760325a03f11561000057505050600191505b611338565b61133860008051602061324e8339815191526124bf565b5b5b50949350505050565b60008261134f81612638565b15611378576113706113608761252f565b868661136b8761252f565b61265c565b91505b611338565b6113387f4f6e6c792070726f78793a206163636573732064656e696564000000000000006124bf565b5b5b50949350505050565b6000836113b881612638565b156113eb576113e36113c9896110bb565b6113d28961252f565b8888886113de896110bb565b6128fd565b91505b611414565b6114147f4f6e6c792070726f78793a206163636573732064656e696564000000000000006124bf565b5b5b509695505050505050565b600061143e61142f856110bb565b611438856110bb565b84612c2b565b90505b9392505050565b60036020526000908152604090208054600190910154600160a060020a03918216911682565b60008181526005602052604090205415155b919050565b60008181526005602052604090206004015462010000900460ff165b919050565b600060006114b33361252f565b90506114be836110bb565b8114156114f7576114ee7f43616e6e6f7420747275737420746f206f6e6573656c660000000000000000006124bf565b60009150610d31565b61150133846117a6565b15611538576114ee7f416c7265616479207472757374656400000000000000000000000000000000006124bf565b60009150610d31565b6000818152600360209081526040808320600160a060020a03871684526002019091529020805460ff1916600190811790915591505b50919050565b600080547f69737375616e636500000000000000000000000000000000000000000000000090600160a060020a031615801590611621575060008054604080516020908101849052815160e160020a63169f2bcd028152600160a060020a03308116600483015260248201879052338116604483015292519290931693632d3e579a9360648082019492918390030190829087803b156100005760325a03f1156100005750506040515190505b15610d31576000838152600160208190526040909120805460ff19168217905591505b5b5b50919050565b60006000611659846110bb565b600081815260036020526040902054909150600160a060020a0385811691161461168457600061168e565b61168e8184612c5a565b5b91505b5092915050565b6000816116a5816125bd565b1561172657600083815260066020526040902054600160a060020a0316158015906116e7575060008381526005602052604090206004015462010000900460ff165b156116f55760009150611721565b60008381526006602052604090208054600160a060020a031916600160a060020a038616179055600191505b611692565b61169260008051602061324e8339815191526124bf565b5b5b5092915050565b6000823361175482826117a6565b156117735761176b611765866110bb565b85612c7d565b92505b61179c565b61179c7f4f6e6c7920747275737465643a206163636573732064656e69656400000000006124bf565b5b5b505092915050565b6000600360006117b5856110bb565b815260208082019290925260409081016000908120600160a060020a038616825260020190925290205460ff1690505b92915050565b60408051602080820183526000808352848152600582528390206002908101805485516000196001831615610100020190911692909204601f8101849004840283018401909552848252929390929183018282801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b505050505090505b919050565b600660205260009081526040902054600160a060020a031681565b60025481565b6000805460dc60020a6407365747570290600160a060020a031615801590611951575060008054604080516020908101849052815160e160020a63169f2bcd028152600160a060020a03308116600483015260248201879052338116604483015292519290931693632d3e579a9360648082019492918390030190829087803b156100005760325a03f1156100005750506040515190505b15610d3157600754600160a060020a0316156119705760009150610d31565b60078054600160a060020a031916600160a060020a038516179055600191505b5b5b50919050565b60008054600160a060020a0316156119b257506000610c55565b81600160a060020a031663b4ba9e1130336000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051511590508015611ace575081600160a060020a0316637ddc02d430336000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051511590505b15611adb57506000610c55565b5060008054600160a060020a031916600160a060020a03831617905560015b919050565b6000611b0a3361252f565b6001611b1582611c01565b1580611b425750600082815260036020526040902060010154611b4290600160a060020a03168383612dd9565b5b15611be157611b5c84611b55336110bb565b6001612dd9565b1515611b9457611b8b7f496e76616c696420636f7369676e6572000000000000000000000000000000006124bf565b60009250611bdc565b8360036000611ba23361252f565b815260200190815260200160002060010160006101000a815481600160a060020a030219169083600160a060020a03160217905550600192505b611bf8565b611bf860008051602061326e8339815191526124bf565b5b5b5050919050565b600081815260036020526040902060010154600160a060020a031615155b919050565b60056020526000908152604090208054600182015460048301549192909160028201916003019060ff808216916101008104821691620100009091041687565b600754600160a060020a031681565b6000611c92611c81876110bb565b868686611c8d876110bb565b612e76565b90505b95945050505050565b6000818152600560205260409020600101545b919050565b60408051602080820183526000808352848152600582528390206003018054845160026000196001841615610100020190921691909104601f81018490048402820184019095528481529293909183018282801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b505050505090505b919050565b60008181526005602052604090206004015460ff165b919050565b6000611d90611d8b846110bb565b611c01565b1515611dc757611dbf7f436f7369676e6572206e6f7420736574000000000000000000000000000000006124bf565b5060006117e5565b611dd9611dd3846110bb565b83612c7d565b90505b92915050565b6040805183815260f960020a6020820152905190819003602101902060009081908190611e0e81610d39565b1515611e3057611e2b60008051602061328e8339815191526124bf565b611fe0565b611e39336110bb565b6001611e4482611c01565b1580611e715750600082815260036020526040902060010154611e7190600160a060020a03168383612dd9565b5b15611fc457861515611eb057611ea77f43616e6e6f74207265766f6b6520302076616c756500000000000000000000006124bf565b60009550611fbf565b60008881526005602052604090209450611ec9336110bb565b600081815260058701602052604090205490945087901015611f1757611ea77f4e6f7420656e6f75676820746f6b656e7320746f207265766f6b6500000000006124bf565b60009550611fbf565b60008481526005860160205260409020805488900390556001850180548890039055600854600160a060020a031663c70bbc138989611f558861259f565b6040805160e060020a63ffffffff871602815260048101949094526024840192909252600160a060020a0316604483015251606480830192600092919082900301818387803b156100005760325a03f11561000057505050611fba846000898b613152565b600195505b611fdb565b611fdb60008051602061326e8339815191526124bf565b5b5b50505b5b50505092915050565b600081611ff6816125bd565b156120655761200483611485565b1561203b576120327f4173736574206973206c6f636b656400000000000000000000000000000000006124bf565b60009150612060565b6000838152600560205260409020600401805462ff0000191662010000179055600191505b610d31565b610d3160008051602061324e8339815191526124bf565b5b5b50919050565b600081815260056020526040902060040154610100900460ff165b919050565b600060006000846120b4816125bd565b1561223a578415156120f2576120e97f43616e6e6f74207265697373756520302076616c7565000000000000000000006124bf565b60009350611e2b565b6000868152600560205260409020600481015490935060ff161515612143576120e97f43616e6e6f7420726569737375652066697865642061737365740000000000006124bf565b60009350611e2b565b60018301548581011015612183576120e97f546f74616c20737570706c79206f766572666c6f7700000000000000000000006124bf565b60009350611e2b565b61218c336110bb565b6000818152600585016020526040902080548701905560018401805487019055600854909250600160a060020a031663abafaa1687876121cb8661259f565b6040805160e060020a63ffffffff871602815260048101949094526024840192909252600160a060020a0316604483015251606480830192600092919082900301818387803b156100005760325a03f115610000575050506122306000838789613152565b600193505b611fe0565b611fe060008051602061324e8339815191526124bf565b5b5b50505092915050565b60006122678261146e565b8015611dd95750612277836110bb565b600083815260056020526040902054145b90505b92915050565b600854600160a060020a031681565b600033826122ae82826117a6565b15612304576000600360006122c2336110bb565b815260208082019290925260409081016000908120600160a060020a03891682526002019092529020805460ff1916911515919091179055600192505b611bf8565b611bf87f4f6e6c7920747275737465643a206163636573732064656e69656400000000006124bf565b5b5b5050919050565b604080518381527f03000000000000000000000000000000000000000000000000000000000000006020820152905190819003602101902060009081908190819061238081610d39565b15156123a25761239d60008051602061328e8339815191526124bf565b6124b4565b866123ac816125bd565b1561249957600088815260056020526040902094506123ca8761252f565b855490945084141561240857611ea77f43616e6e6f742070617373206f776e65727368697020746f206f6e6573656c666124bf565b60009550611fbf565b84546124139061259f565b848655600854909350600160a060020a031663a9612f72846124348761259f565b6040805160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152604481018c90529051606480830192600092919082900301818387803b156100005760325a03f11561000057505050600195505b611fdb565b611fdb60008051602061324e8339815191526124bf565b5b5b505b5b5050505092915050565b600854604080517fe90459f8000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e90459f89160248082019260009290919082900301818387803b156100005760325a03f115610000575050505b50565b600160a060020a0381166000908152600460205260408120548015156125955750600280546001019081905560008181526003602090815260408083208054600160a060020a031916600160a060020a0388169081179091558352600490915290208190555b8091505b50919050565b600081815260036020526040902054600160a060020a03165b919050565b60006125c8336110bb565b60016125d382611c01565b1580612600575060008281526003602052604090206001015461260090600160a060020a03168383612dd9565b5b15611be157612610338561225c565b92505b611bf8565b611bf860008051602061326e8339815191526124bf565b5b5b5050919050565b60008181526006602052604090205433600160a060020a039081169116145b919050565b6040805183815260fa60020a6020820152905190819003602101902060009061268481610d39565b15156126a65761131c60008051602061328e8339815191526124bf565b611338565b8260016126b282611c01565b15806126df57506000828152600360205260409020600101546126df90600160a060020a03168383612dd9565b5b156128d7576126ee8661146e565b15156127265761271d7f4173736574206973206e6f7420697373756564000000000000000000000000006124bf565b600093506128d2565b878514156127605761271d7f43616e6e6f7420617070726f766520746f206f6e6573656c66000000000000006124bf565b600093506128d2565b600086815260056020818152604080842089855290920181528183208b845260010190529020879055600854600160a060020a031663d54c8c876127a38761259f565b6127ac8b61259f565b6040805160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152604481018a9052606481018b90529051608480830192600092919082900301818387803b156100005760325a03f11561000057505050600086815260066020526040902054600160a060020a0316156128cd57600086815260066020526040902054600160a060020a031663233850896128518761259f565b61285a8b61259f565b8a6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b156100005760325a03f115610000575050505b600193505b6128ee565b6128ee60008051602061326e8339815191526124bf565b5b5b50505b5b50949350505050565b600081600161290b82611c01565b1580612938575060008281526003602052604090206001015461293890600160a060020a03168383612dd9565b5b15612c0657878914156129785761296f7f43616e6e6f742073656e6420746f206f6e6573656c66000000000000000000006124bf565b60009250610da2565b8615156129b15761296f7f43616e6e6f742073656e6420302076616c7565000000000000000000000000006124bf565b60009250610da2565b866129bc8a88612c5a565b10156129f45761296f7f496e73756666696369656e742062616c616e63650000000000000000000000006124bf565b60009250610da2565b60008551118015612a2757506040805187815260f860020a60208201529051908190036021019020612a2590610d39565b155b15612a5e5761296f7f5265666572656e63657320666561747572652069732064697361626c656400006124bf565b60009250610da2565b838914158015612a77575086612a758a8689612c2b565b105b15612aae5761296f7f4e6f7420656e6f75676820616c6c6f77616e63650000000000000000000000006124bf565b60009250610da2565b888414612ae35760008681526005602081815260408084208d8552909201815281832087845260010190529020805488900390555b612aef89898989613218565b600854600160a060020a031663515c1457612b098b61259f565b612b128b61259f565b60405160e060020a63ffffffff8516028152600160a060020a03808416600483019081529083166024830152604482018c9052606482018d905260a0608483019081528b5160a48401528b518d938f938e939092909160c4019060208501908083838215612b9b575b805182526020831115612b9b57601f199092019160209182019101612b7b565b505050905090810190601f168015612bc75780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b156100005760325a03f11561000057505050612bfc89898989613152565b600192505b6110ad565b6110ad60008051602061326e8339815191526124bf565b5b5b50509695505050505050565b6000818152600560208181526040808420878552909201815281832085845260010190529020545b9392505050565b600081815260056020818152604080842086855290920190529020545b92915050565b60006000836002612c8d82611c01565b1580612cba5750600082815260036020526040902060010154612cba90600160a060020a03168383612dd9565b5b15612db757612cc9856110bb565b15612d00576120e97f53686f756c64207265636f76657220746f206e657720616464726573730000006124bf565b60009350611e2b565b60008681526003602090815260408083208054600160a060020a038a8116600160a060020a0319831681179093558286526004948590528386208c905560085484517fea14457e00000000000000000000000000000000000000000000000000000000815292821695830186905260248301939093523381166044830152925193975091169263ea14457e9260648084019382900301818387803b156100005760325a03f11561000057505050600193505b611fe0565b611fe060008051602061326e8339815191526124bf565b5b5b50505092915050565b600083600160a060020a031663809b296d6000368660405180848480828437820191505082815260200193505050506040518091039020846000604051602001526040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051519150505b9392505050565b600754604080516000606091820181905282517f4f71ef8100000000000000000000000000000000000000000000000000000000815260048101899052925190938493849384938493600160a060020a031692634f71ef8192602480830193919282900301818787803b156100005760325a03f115610000575050604080518051602082015191909201519196509450925050811515612f4257612f397f49434150206973206e6f742072656769737465726564000000000000000000006124bf565b60009450613145565b604080518481527f050000000000000000000000000000000000000000000000000000000000000060208201529051908190036021019020612f8390610d39565b1515612fbb57612f397f4943415020666561747572652069732064697361626c656400000000000000006124bf565b60009450613145565b612fc483612638565b1515612ffc57612f397f4f6e6c792070726f78793a206163636573732064656e696564000000000000006124bf565b60009450613145565b6130058461252f565b90506130158a828a868b8b6128fd565b15156130245760009450613145565b600854600160a060020a031663eacbc23661303e8c61259f565b6130478461259f565b8c8c8c6040518663ffffffff1660e060020a0281526004018086600160a060020a0316600160a060020a0316815260200185600160a060020a0316600160a060020a031681526020018460001916600019168152602001838152602001806020018281038252838181518152602001915080519060200190808383600083146130eb575b8051825260208311156130eb57601f1990920191602091820191016130cb565b505050905090810190601f1680156131175780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b156100005760325a03f11561000057505050600194505b5050505095945050505050565b600081815260066020526040902054600160a060020a03161561321157600081815260066020526040902054600160a060020a03166323de66516131958661259f565b61319e8661259f565b856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b156100005760325a03f115610000575050505b5b50505050565b600081815260056020818152604080842088855290920190528082208054859003905584825290208054830190555b5050505056004f6e6c79206f776e65723a206163636573732064656e69656400000000000000436f7369676e65723a206163636573732064656e696564000000000000000000466561747572652069732064697361626c656400000000000000000000000000a165627a7a72305820c6b0f154e0142d65bb5467dca4a26c852d2e6e792db2d104e3fe12d1f0e717710029
Deployed Bytecode
0x606060405236156101d25763ffffffff60e060020a60003504166302571be381146101d757806302927d20146102035780630610e03714610230578063085a4705146102545780630af3e66014610308578063106fcb7a1461033357806314712e2f146103dd578063161ff662146104185780631c8d5d381461049f5780632a11ced0146104d35780632f553d311461050957806332a16f4e1461052d5780634637d827146105515780634ba4079a1461057e5780634d30b6be146105a2578063638a9ce9146105d0578063648bf774146106005780636713e23014610633578063691f3431146106665780636932af36146106f65780636b4ed21b14610722578063774248a3146107415780637a386e881461076e57806382fc49b81461079b5780639666e1f9146107c85780639fda5b66146107ec578063a0f15b871461092e578063a69032ee14610957578063b524abcf146109d8578063bebcc045146109fa578063c4eeeeb914610a8a578063c6a09d9514610aae578063ca448a8814610ae1578063d0169c1e14610b08578063dc86e6f014610b2c578063e0873c0614610b52578063e96b462a14610b79578063f07629f814610ba9578063f0c06aa514610bd2578063fd83915e14610bff575b610000565b34610000576101e7600435610c2f565b60408051600160a060020a039092168252519081900360200190f35b346100005761021c600160a060020a0360043516610c5a565b604080519115158252519081900360200190f35b346100005761021c600435610d39565b604080519115158252519081900360200190f35b3461000057604080516020600460443581810135601f810184900484028501840190955284845261021c94823594602480359560649492939190920191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979998810197919650918201945092508291508401838280828437509496505060ff853516946020013515159350610d5192505050565b604080519115158252519081900360200190f35b3461000057610321600160a060020a03600435166110bb565b60408051918252519081900360200190f35b346100005760408051602060046024803582810135601f810185900485028601850190965285855261021c958335959394604494939290920191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979998810197919650918201945092508291508401838280828437509496505050923560ff1692506110da915050565b604080519115158252519081900360200190f35b346100005761021c600160a060020a03600435811690602435906044359060643516611343565b604080519115158252519081900360200190f35b3461000057604080516020601f60843560048181013592830184900484028501840190955281845261021c94600160a060020a0381358116956024803590921695604435956064359560a4940191819084018382808284375094965050509235600160a060020a031692506113ac915050565b604080519115158252519081900360200190f35b3461000057610321600160a060020a0360043581169060243516604435611421565b60408051918252519081900360200190f35b34610000576104e3600435611448565b60408051600160a060020a03938416815291909216602082015281519081900390910190f35b346100005761021c60043561146e565b604080519115158252519081900360200190f35b346100005761021c600435611485565b604080519115158252519081900360200190f35b346100005761021c600160a060020a03600435166114a6565b604080519115158252519081900360200190f35b346100005761021c600435611574565b604080519115158252519081900360200190f35b3461000057610321600160a060020a036004351660243561164c565b60408051918252519081900360200190f35b346100005761021c600160a060020a0360043516602435611699565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043581169060243516611746565b604080519115158252519081900360200190f35b346100005761021c600160a060020a03600435811690602435166117a6565b604080519115158252519081900360200190f35b34610000576106766004356117eb565b6040805160208082528351818301528351919283929083019185019080838382156106bc575b8051825260208311156106bc57601f19909201916020918201910161069c565b505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576101e7600435611898565b60408051600160a060020a039092168252519081900360200190f35b34610000576103216118b3565b60408051918252519081900360200190f35b346100005761021c600160a060020a03600435166118b9565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043516611998565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043516611aff565b604080519115158252519081900360200190f35b346100005761021c600435611c01565b604080519115158252519081900360200190f35b34610000576107fc600435611c24565b6040805188815260208101889052841515608082015260ff841660a082015282151560c082015260e0918101828152875460026001821615610100908102600019019092160493830184905291929091606084019190840190899080156108a45780601f10610879576101008083540402835291602001916108a4565b820191906000526020600020905b81548152906001019060200180831161088757829003601f168201915b50508381038252875460026000196101006001841615020190911604808252602090910190889080156109185780601f106108ed57610100808354040283529160200191610918565b820191906000526020600020905b8154815290600101906020018083116108fb57829003601f168201915b5050995050505050505050505060405180910390f35b34610000576101e7611c64565b60408051600160a060020a039092168252519081900360200190f35b3461000057604080516020600460643581810135601f810184900484028501840190955284845261021c948235600160a060020a0316946024803595604435959460849492019190819084018382808284375094965050509235600160a060020a03169250611c73915050565b604080519115158252519081900360200190f35b3461000057610321600435611c9e565b60408051918252519081900360200190f35b3461000057610676600435611cb6565b6040805160208082528351818301528351919283929083019185019080838382156106bc575b8051825260208311156106bc57601f19909201916020918201910161069c565b505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b346100005761021c600435611d62565b604080519115158252519081900360200190f35b346100005761021c600160a060020a0360043581169060243516611d7d565b604080519115158252519081900360200190f35b346100005761021c600435602435611de2565b604080519115158252519081900360200190f35b346100005761021c600435611fea565b604080519115158252519081900360200190f35b3461000057610b3c600435612084565b6040805160ff9092168252519081900360200190f35b346100005761021c6004356024356120a4565b604080519115158252519081900360200190f35b346100005761021c600160a060020a036004351660243561225c565b604080519115158252519081900360200190f35b34610000576101e7612291565b60408051600160a060020a039092168252519081900360200190f35b346100005761021c600160a060020a03600435166122a0565b604080519115158252519081900360200190f35b346100005761021c600435600160a060020a0360243516612336565b604080519115158252519081900360200190f35b60008181526005602090815260408083205483526003909152902054600160a060020a03165b919050565b6000805460dc60020a6407365747570290600160a060020a031615801590610cf2575060008054604080516020908101849052815160e160020a63169f2bcd028152600160a060020a03308116600483015260248201879052338116604483015292519290931693632d3e579a9360648082019492918390030190829087803b156100005760325a03f1156100005750506040515190505b15610d3157600854600160a060020a031615610d115760009150610d31565b60088054600160a060020a031916600160a060020a038516179055600191505b5b5b50919050565b60008181526001602052604090205460ff165b919050565b6040805187815282151560f860020a02602082015260006021820181905291519081900360220190208190610d8581610d39565b1515610da757610da260008051602061328e8339815191526124bf565b6110ad565b87158015610db3575083155b15610dea57610de17f43616e6e6f7420697373756520302076616c75652066697865642061737365746124bf565b600092506110ad565b610df38961146e565b15610e2a57610de17f417373657420616c7265616479206973737565640000000000000000000000006124bf565b600092506110ad565b610e333361252f565b6040805160e08101825282815260208082018c81528284018c8152606084018c9052891515608085015260ff8b1660a0850152600060c085018190528f8152600584529485208451815591516001838101919091559051805160028085018054818a5298879020999b5096989497601f61010095821615959095026000190116048301859004840194909392910190839010610eda57805160ff1916838001178555610f07565b82800160010185558215610f07579182015b82811115610f07578251825591602001919060010190610eec565b5b50610f289291505b80821115610f245760008155600101610f10565b5090565b50506060820151816003019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f7c57805160ff1916838001178555610fa9565b82800160010185558215610fa9579182015b82811115610fa9578251825591602001919060010190610f8e565b5b50610fca9291505b80821115610f245760008155600101610f10565b5090565b505060808201516004909101805460a084015160c0909401511515620100000262ff00001960ff959095166101000261ff001994151560ff1990931692909217939093161792909216179055600089815260056020818152604080842086855290920190529020889055600854600160a060020a031663abafaa168a8a6110508661259f565b6040805160e060020a63ffffffff871602815260048101949094526024840192909252600160a060020a0316604483015251606480830192600092919082900301818387803b156100005760325a03f11561000057505050600192505b5b5b50509695505050505050565b600160a060020a0381166000908152600460205260409020545b919050565b6000846110e6816125bd565b15611321576110f486611485565b1561112b576111227f4173736574206973206c6f636b656400000000000000000000000000000000006124bf565b6000915061131c565b846005600088600019166000191681526020019081526020016000206002019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061119357805160ff19168380011785556111c0565b828001600101855582156111c0579182015b828111156111c05782518255916020019190600101906111a5565b5b506111e19291505b80821115610f245760008155600101610f10565b5090565b50506000868152600560209081526040822086516003909101805481855293839020909360026000196001831615610100020190911604601f90810184900482019389019083901061123e57805160ff191683800117855561126b565b8280016001018555821561126b579182015b8281111561126b578251825591602001919060010190611250565b5b5061128c9291505b80821115610f245760008155600101610f10565b5090565b50506000868152600560205260408082206004908101805461ff00191661010060ff89160217905560085482517fa4a833170000000000000000000000000000000000000000000000000000000081529182018a90529151600160a060020a039092169263a4a833179260248084019382900301818387803b156100005760325a03f11561000057505050600191505b611338565b61133860008051602061324e8339815191526124bf565b5b5b50949350505050565b60008261134f81612638565b15611378576113706113608761252f565b868661136b8761252f565b61265c565b91505b611338565b6113387f4f6e6c792070726f78793a206163636573732064656e696564000000000000006124bf565b5b5b50949350505050565b6000836113b881612638565b156113eb576113e36113c9896110bb565b6113d28961252f565b8888886113de896110bb565b6128fd565b91505b611414565b6114147f4f6e6c792070726f78793a206163636573732064656e696564000000000000006124bf565b5b5b509695505050505050565b600061143e61142f856110bb565b611438856110bb565b84612c2b565b90505b9392505050565b60036020526000908152604090208054600190910154600160a060020a03918216911682565b60008181526005602052604090205415155b919050565b60008181526005602052604090206004015462010000900460ff165b919050565b600060006114b33361252f565b90506114be836110bb565b8114156114f7576114ee7f43616e6e6f7420747275737420746f206f6e6573656c660000000000000000006124bf565b60009150610d31565b61150133846117a6565b15611538576114ee7f416c7265616479207472757374656400000000000000000000000000000000006124bf565b60009150610d31565b6000818152600360209081526040808320600160a060020a03871684526002019091529020805460ff1916600190811790915591505b50919050565b600080547f69737375616e636500000000000000000000000000000000000000000000000090600160a060020a031615801590611621575060008054604080516020908101849052815160e160020a63169f2bcd028152600160a060020a03308116600483015260248201879052338116604483015292519290931693632d3e579a9360648082019492918390030190829087803b156100005760325a03f1156100005750506040515190505b15610d31576000838152600160208190526040909120805460ff19168217905591505b5b5b50919050565b60006000611659846110bb565b600081815260036020526040902054909150600160a060020a0385811691161461168457600061168e565b61168e8184612c5a565b5b91505b5092915050565b6000816116a5816125bd565b1561172657600083815260066020526040902054600160a060020a0316158015906116e7575060008381526005602052604090206004015462010000900460ff165b156116f55760009150611721565b60008381526006602052604090208054600160a060020a031916600160a060020a038616179055600191505b611692565b61169260008051602061324e8339815191526124bf565b5b5b5092915050565b6000823361175482826117a6565b156117735761176b611765866110bb565b85612c7d565b92505b61179c565b61179c7f4f6e6c7920747275737465643a206163636573732064656e69656400000000006124bf565b5b5b505092915050565b6000600360006117b5856110bb565b815260208082019290925260409081016000908120600160a060020a038616825260020190925290205460ff1690505b92915050565b60408051602080820183526000808352848152600582528390206002908101805485516000196001831615610100020190911692909204601f8101849004840283018401909552848252929390929183018282801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b505050505090505b919050565b600660205260009081526040902054600160a060020a031681565b60025481565b6000805460dc60020a6407365747570290600160a060020a031615801590611951575060008054604080516020908101849052815160e160020a63169f2bcd028152600160a060020a03308116600483015260248201879052338116604483015292519290931693632d3e579a9360648082019492918390030190829087803b156100005760325a03f1156100005750506040515190505b15610d3157600754600160a060020a0316156119705760009150610d31565b60078054600160a060020a031916600160a060020a038516179055600191505b5b5b50919050565b60008054600160a060020a0316156119b257506000610c55565b81600160a060020a031663b4ba9e1130336000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051511590508015611ace575081600160a060020a0316637ddc02d430336000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051511590505b15611adb57506000610c55565b5060008054600160a060020a031916600160a060020a03831617905560015b919050565b6000611b0a3361252f565b6001611b1582611c01565b1580611b425750600082815260036020526040902060010154611b4290600160a060020a03168383612dd9565b5b15611be157611b5c84611b55336110bb565b6001612dd9565b1515611b9457611b8b7f496e76616c696420636f7369676e6572000000000000000000000000000000006124bf565b60009250611bdc565b8360036000611ba23361252f565b815260200190815260200160002060010160006101000a815481600160a060020a030219169083600160a060020a03160217905550600192505b611bf8565b611bf860008051602061326e8339815191526124bf565b5b5b5050919050565b600081815260036020526040902060010154600160a060020a031615155b919050565b60056020526000908152604090208054600182015460048301549192909160028201916003019060ff808216916101008104821691620100009091041687565b600754600160a060020a031681565b6000611c92611c81876110bb565b868686611c8d876110bb565b612e76565b90505b95945050505050565b6000818152600560205260409020600101545b919050565b60408051602080820183526000808352848152600582528390206003018054845160026000196001841615610100020190921691909104601f81018490048402820184019095528481529293909183018282801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b505050505090505b919050565b60008181526005602052604090206004015460ff165b919050565b6000611d90611d8b846110bb565b611c01565b1515611dc757611dbf7f436f7369676e6572206e6f7420736574000000000000000000000000000000006124bf565b5060006117e5565b611dd9611dd3846110bb565b83612c7d565b90505b92915050565b6040805183815260f960020a6020820152905190819003602101902060009081908190611e0e81610d39565b1515611e3057611e2b60008051602061328e8339815191526124bf565b611fe0565b611e39336110bb565b6001611e4482611c01565b1580611e715750600082815260036020526040902060010154611e7190600160a060020a03168383612dd9565b5b15611fc457861515611eb057611ea77f43616e6e6f74207265766f6b6520302076616c756500000000000000000000006124bf565b60009550611fbf565b60008881526005602052604090209450611ec9336110bb565b600081815260058701602052604090205490945087901015611f1757611ea77f4e6f7420656e6f75676820746f6b656e7320746f207265766f6b6500000000006124bf565b60009550611fbf565b60008481526005860160205260409020805488900390556001850180548890039055600854600160a060020a031663c70bbc138989611f558861259f565b6040805160e060020a63ffffffff871602815260048101949094526024840192909252600160a060020a0316604483015251606480830192600092919082900301818387803b156100005760325a03f11561000057505050611fba846000898b613152565b600195505b611fdb565b611fdb60008051602061326e8339815191526124bf565b5b5b50505b5b50505092915050565b600081611ff6816125bd565b156120655761200483611485565b1561203b576120327f4173736574206973206c6f636b656400000000000000000000000000000000006124bf565b60009150612060565b6000838152600560205260409020600401805462ff0000191662010000179055600191505b610d31565b610d3160008051602061324e8339815191526124bf565b5b5b50919050565b600081815260056020526040902060040154610100900460ff165b919050565b600060006000846120b4816125bd565b1561223a578415156120f2576120e97f43616e6e6f74207265697373756520302076616c7565000000000000000000006124bf565b60009350611e2b565b6000868152600560205260409020600481015490935060ff161515612143576120e97f43616e6e6f7420726569737375652066697865642061737365740000000000006124bf565b60009350611e2b565b60018301548581011015612183576120e97f546f74616c20737570706c79206f766572666c6f7700000000000000000000006124bf565b60009350611e2b565b61218c336110bb565b6000818152600585016020526040902080548701905560018401805487019055600854909250600160a060020a031663abafaa1687876121cb8661259f565b6040805160e060020a63ffffffff871602815260048101949094526024840192909252600160a060020a0316604483015251606480830192600092919082900301818387803b156100005760325a03f115610000575050506122306000838789613152565b600193505b611fe0565b611fe060008051602061324e8339815191526124bf565b5b5b50505092915050565b60006122678261146e565b8015611dd95750612277836110bb565b600083815260056020526040902054145b90505b92915050565b600854600160a060020a031681565b600033826122ae82826117a6565b15612304576000600360006122c2336110bb565b815260208082019290925260409081016000908120600160a060020a03891682526002019092529020805460ff1916911515919091179055600192505b611bf8565b611bf87f4f6e6c7920747275737465643a206163636573732064656e69656400000000006124bf565b5b5b5050919050565b604080518381527f03000000000000000000000000000000000000000000000000000000000000006020820152905190819003602101902060009081908190819061238081610d39565b15156123a25761239d60008051602061328e8339815191526124bf565b6124b4565b866123ac816125bd565b1561249957600088815260056020526040902094506123ca8761252f565b855490945084141561240857611ea77f43616e6e6f742070617373206f776e65727368697020746f206f6e6573656c666124bf565b60009550611fbf565b84546124139061259f565b848655600854909350600160a060020a031663a9612f72846124348761259f565b6040805160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152604481018c90529051606480830192600092919082900301818387803b156100005760325a03f11561000057505050600195505b611fdb565b611fdb60008051602061324e8339815191526124bf565b5b5b505b5b5050505092915050565b600854604080517fe90459f8000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e90459f89160248082019260009290919082900301818387803b156100005760325a03f115610000575050505b50565b600160a060020a0381166000908152600460205260408120548015156125955750600280546001019081905560008181526003602090815260408083208054600160a060020a031916600160a060020a0388169081179091558352600490915290208190555b8091505b50919050565b600081815260036020526040902054600160a060020a03165b919050565b60006125c8336110bb565b60016125d382611c01565b1580612600575060008281526003602052604090206001015461260090600160a060020a03168383612dd9565b5b15611be157612610338561225c565b92505b611bf8565b611bf860008051602061326e8339815191526124bf565b5b5b5050919050565b60008181526006602052604090205433600160a060020a039081169116145b919050565b6040805183815260fa60020a6020820152905190819003602101902060009061268481610d39565b15156126a65761131c60008051602061328e8339815191526124bf565b611338565b8260016126b282611c01565b15806126df57506000828152600360205260409020600101546126df90600160a060020a03168383612dd9565b5b156128d7576126ee8661146e565b15156127265761271d7f4173736574206973206e6f7420697373756564000000000000000000000000006124bf565b600093506128d2565b878514156127605761271d7f43616e6e6f7420617070726f766520746f206f6e6573656c66000000000000006124bf565b600093506128d2565b600086815260056020818152604080842089855290920181528183208b845260010190529020879055600854600160a060020a031663d54c8c876127a38761259f565b6127ac8b61259f565b6040805160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152604481018a9052606481018b90529051608480830192600092919082900301818387803b156100005760325a03f11561000057505050600086815260066020526040902054600160a060020a0316156128cd57600086815260066020526040902054600160a060020a031663233850896128518761259f565b61285a8b61259f565b8a6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b156100005760325a03f115610000575050505b600193505b6128ee565b6128ee60008051602061326e8339815191526124bf565b5b5b50505b5b50949350505050565b600081600161290b82611c01565b1580612938575060008281526003602052604090206001015461293890600160a060020a03168383612dd9565b5b15612c0657878914156129785761296f7f43616e6e6f742073656e6420746f206f6e6573656c66000000000000000000006124bf565b60009250610da2565b8615156129b15761296f7f43616e6e6f742073656e6420302076616c7565000000000000000000000000006124bf565b60009250610da2565b866129bc8a88612c5a565b10156129f45761296f7f496e73756666696369656e742062616c616e63650000000000000000000000006124bf565b60009250610da2565b60008551118015612a2757506040805187815260f860020a60208201529051908190036021019020612a2590610d39565b155b15612a5e5761296f7f5265666572656e63657320666561747572652069732064697361626c656400006124bf565b60009250610da2565b838914158015612a77575086612a758a8689612c2b565b105b15612aae5761296f7f4e6f7420656e6f75676820616c6c6f77616e63650000000000000000000000006124bf565b60009250610da2565b888414612ae35760008681526005602081815260408084208d8552909201815281832087845260010190529020805488900390555b612aef89898989613218565b600854600160a060020a031663515c1457612b098b61259f565b612b128b61259f565b60405160e060020a63ffffffff8516028152600160a060020a03808416600483019081529083166024830152604482018c9052606482018d905260a0608483019081528b5160a48401528b518d938f938e939092909160c4019060208501908083838215612b9b575b805182526020831115612b9b57601f199092019160209182019101612b7b565b505050905090810190601f168015612bc75780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b156100005760325a03f11561000057505050612bfc89898989613152565b600192505b6110ad565b6110ad60008051602061326e8339815191526124bf565b5b5b50509695505050505050565b6000818152600560208181526040808420878552909201815281832085845260010190529020545b9392505050565b600081815260056020818152604080842086855290920190529020545b92915050565b60006000836002612c8d82611c01565b1580612cba5750600082815260036020526040902060010154612cba90600160a060020a03168383612dd9565b5b15612db757612cc9856110bb565b15612d00576120e97f53686f756c64207265636f76657220746f206e657720616464726573730000006124bf565b60009350611e2b565b60008681526003602090815260408083208054600160a060020a038a8116600160a060020a0319831681179093558286526004948590528386208c905560085484517fea14457e00000000000000000000000000000000000000000000000000000000815292821695830186905260248301939093523381166044830152925193975091169263ea14457e9260648084019382900301818387803b156100005760325a03f11561000057505050600193505b611fe0565b611fe060008051602061326e8339815191526124bf565b5b5b50505092915050565b600083600160a060020a031663809b296d6000368660405180848480828437820191505082815260200193505050506040518091039020846000604051602001526040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051519150505b9392505050565b600754604080516000606091820181905282517f4f71ef8100000000000000000000000000000000000000000000000000000000815260048101899052925190938493849384938493600160a060020a031692634f71ef8192602480830193919282900301818787803b156100005760325a03f115610000575050604080518051602082015191909201519196509450925050811515612f4257612f397f49434150206973206e6f742072656769737465726564000000000000000000006124bf565b60009450613145565b604080518481527f050000000000000000000000000000000000000000000000000000000000000060208201529051908190036021019020612f8390610d39565b1515612fbb57612f397f4943415020666561747572652069732064697361626c656400000000000000006124bf565b60009450613145565b612fc483612638565b1515612ffc57612f397f4f6e6c792070726f78793a206163636573732064656e696564000000000000006124bf565b60009450613145565b6130058461252f565b90506130158a828a868b8b6128fd565b15156130245760009450613145565b600854600160a060020a031663eacbc23661303e8c61259f565b6130478461259f565b8c8c8c6040518663ffffffff1660e060020a0281526004018086600160a060020a0316600160a060020a0316815260200185600160a060020a0316600160a060020a031681526020018460001916600019168152602001838152602001806020018281038252838181518152602001915080519060200190808383600083146130eb575b8051825260208311156130eb57601f1990920191602091820191016130cb565b505050905090810190601f1680156131175780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b156100005760325a03f11561000057505050600194505b5050505095945050505050565b600081815260066020526040902054600160a060020a03161561321157600081815260066020526040902054600160a060020a03166323de66516131958661259f565b61319e8661259f565b856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b156100005760325a03f115610000575050505b5b50505050565b600081815260056020818152604080842088855290920190528082208054859003905584825290208054830190555b5050505056004f6e6c79206f776e65723a206163636573732064656e69656400000000000000436f7369676e65723a206163636573732064656e696564000000000000000000466561747572652069732064697361626c656400000000000000000000000000a165627a7a72305820c6b0f154e0142d65bb5467dca4a26c852d2e6e792db2d104e3fe12d1f0e717710029
Swarm Source
bzzr://c6b0f154e0142d65bb5467dca4a26c852d2e6e792db2d104e3fe12d1f0e71771
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.