ERC-20
Overview
Max Total Supply
500.16331999 USD.DC
Holders
23
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Balance
0.00012133 USD.DCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DCAssetBackend
Compiler Version
v0.3.6+commit.3fc68da
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2016-09-15 */ contract Assertive { function assert(bool assertion) { if (!assertion) throw; } } contract TokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } contract Owned is Assertive { address internal owner; event SetOwner(address indexed previousOwner, address indexed newOwner); function Owned () { owner = msg.sender; } modifier onlyOwner { assert(msg.sender == owner); _ } function setOwner(address newOwner) onlyOwner { SetOwner(owner, newOwner); owner = newOwner; } function getOwner() returns (address out) { return owner; } } contract StateTransferrable is Owned { bool internal locked; event Locked(address indexed from); event PropertySet(address indexed from); modifier onlyIfUnlocked { assert(!locked); _ } modifier setter { _ PropertySet(msg.sender); } modifier onlyOwnerUnlocked { assert(!locked && msg.sender == owner); _ } function lock() onlyOwner onlyIfUnlocked { locked = true; Locked(msg.sender); } function isLocked() returns (bool status) { return locked; } } contract TrustEvents { event AuthInit(address indexed from); event AuthComplete(address indexed from, address indexed with); event AuthPending(address indexed from); event Unauthorized(address indexed from); event InitCancel(address indexed from); event NothingToCancel(address indexed from); event SetMasterKey(address indexed from); event AuthCancel(address indexed from, address indexed with); event NameRegistered(address indexed from, bytes32 indexed name); } contract Trust is StateTransferrable, TrustEvents { mapping (address => bool) public masterKeys; mapping (address => bytes32) public nameRegistry; address[] public masterKeyIndex; mapping (address => bool) public masterKeyActive; mapping (address => bool) public trustedClients; mapping (bytes32 => address) public functionCalls; mapping (address => bytes32) public functionCalling; function activateMasterKey(address addr) internal { if (!masterKeyActive[addr]) { masterKeyActive[addr] = true; masterKeyIndex.push(addr); } } function setTrustedClient(address addr) onlyOwnerUnlocked setter { trustedClients[addr] = true; } function untrustClient(address addr) multisig(sha3(msg.data)) { trustedClients[addr] = false; } function trustClient(address addr) multisig(sha3(msg.data)) { trustedClients[addr] = true; } function setMasterKey(address addr) onlyOwnerUnlocked { assert(!masterKeys[addr]); activateMasterKey(addr); masterKeys[addr] = true; SetMasterKey(msg.sender); } modifier onlyMasterKey { assert(masterKeys[msg.sender]); _ } function extractMasterKeyIndexLength() returns (uint256 length) { return masterKeyIndex.length; } function resetAction(bytes32 hash) internal { address addr = functionCalls[hash]; functionCalls[hash] = 0x0; functionCalling[addr] = bytes32(0); } function authCancel(address from) external returns (uint8 status) { if (!masterKeys[from] || !trustedClients[msg.sender]) { Unauthorized(from); return 0; } bytes32 call = functionCalling[from]; if (call == bytes32(0)) { NothingToCancel(from); return 1; } else { AuthCancel(from, from); functionCalling[from] = bytes32(0); functionCalls[call] = 0x0; return 2; } } function cancel() returns (uint8 code) { if (!masterKeys[msg.sender]) { Unauthorized(msg.sender); return 0; } bytes32 call = functionCalling[msg.sender]; if (call == bytes32(0)) { NothingToCancel(msg.sender); return 1; } else { AuthCancel(msg.sender, msg.sender); bytes32 hash = functionCalling[msg.sender]; functionCalling[msg.sender] = 0x0; functionCalls[hash] = 0; return 2; } } function authCall(address from, bytes32 hash) external returns (uint8 code) { if (!masterKeys[from] && !trustedClients[msg.sender]) { Unauthorized(from); return 0; } if (functionCalling[from] == 0) { if (functionCalls[hash] == 0x0) { functionCalls[hash] = from; functionCalling[from] = hash; AuthInit(from); return 1; } else { AuthComplete(functionCalls[hash], from); resetAction(hash); return 2; } } else { AuthPending(from); return 3; } } modifier multisig (bytes32 hash) { if (!masterKeys[msg.sender]) { Unauthorized(msg.sender); } else if (functionCalling[msg.sender] == 0) { if (functionCalls[hash] == 0x0) { functionCalls[hash] = msg.sender; functionCalling[msg.sender] = hash; AuthInit(msg.sender); } else { AuthComplete(functionCalls[hash], msg.sender); resetAction(hash); _ } } else { AuthPending(msg.sender); } } function voteOutMasterKey(address addr) multisig(sha3(msg.data)) { assert(masterKeys[addr]); masterKeys[addr] = false; } function voteInMasterKey(address addr) multisig(sha3(msg.data)) { assert(!masterKeys[addr]); activateMasterKey(addr); masterKeys[addr] = true; } function identify(bytes32 name) onlyMasterKey { nameRegistry[msg.sender] = name; NameRegistered(msg.sender, name); } function nameFor(address addr) returns (bytes32 name) { return nameRegistry[addr]; } } contract TrustClient is StateTransferrable, TrustEvents { address public trustAddress; function setTrust(address addr) setter onlyOwnerUnlocked { trustAddress = addr; } function nameFor(address addr) constant returns (bytes32 name) { return Trust(trustAddress).nameFor(addr); } function cancel() returns (uint8 status) { assert(trustAddress != address(0x0)); uint8 code = Trust(trustAddress).authCancel(msg.sender); if (code == 0) Unauthorized(msg.sender); else if (code == 1) NothingToCancel(msg.sender); else if (code == 2) AuthCancel(msg.sender, msg.sender); return code; } modifier multisig (bytes32 hash) { assert(trustAddress != address(0x0)); address current = Trust(trustAddress).functionCalls(hash); uint8 code = Trust(trustAddress).authCall(msg.sender, hash); if (code == 0) Unauthorized(msg.sender); else if (code == 1) AuthInit(msg.sender); else if (code == 2) { AuthComplete(current, msg.sender); _ } else if (code == 3) { AuthPending(msg.sender); } } } contract Relay { function relayReceiveApproval(address _caller, address _spender, uint256 _amount, bytes _extraData) returns (bool success); } contract TokenBase is Owned { bytes32 public standard = 'Token 0.1'; bytes32 public name; bytes32 public symbol; uint256 public totalSupply; bool public allowTransactions; event Approval(address indexed from, address indexed spender, uint256 amount); mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); function transfer(address _to, uint256 _value) returns (bool success); function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function () { throw; } } contract Precision { uint8 public decimals; } contract Token is TokenBase, Precision {} contract Util { function pow10(uint256 a, uint8 b) internal returns (uint256 result) { for (uint8 i = 0; i < b; i++) { a *= 10; } return a; } function div10(uint256 a, uint8 b) internal returns (uint256 result) { for (uint8 i = 0; i < b; i++) { a /= 10; } return a; } function max(uint256 a, uint256 b) internal returns (uint256 res) { if (a >= b) return a; return b; } } /** * @title DVIP Contract. DCAsset Membership Token contract. * * @author Ray Pulver, [email protected] */ contract DVIP is Token, StateTransferrable, TrustClient, Util { uint256 public totalSupply; mapping (address => bool) public frozenAccount; mapping (address => address[]) public allowanceIndex; mapping (address => mapping (address => bool)) public allowanceActive; address[] public accountIndex; mapping (address => bool) public accountActive; address public oversightAddress; uint256 public expiry; uint256 public treasuryBalance; bool public isActive; mapping (address => uint256) public exportFee; address[] public exportFeeIndex; mapping (address => bool) exportFeeActive; mapping (address => uint256) public importFee; address[] public importFeeIndex; mapping (address => bool) importFeeActive; event FrozenFunds(address target, bool frozen); event PrecisionSet(address indexed from, uint8 precision); event TransactionsShutDown(address indexed from); event FeeSetup(address indexed from, address indexed target, uint256 amount); /** * Constructor. * */ function DVIP() { isActive = true; treasuryBalance = 0; totalSupply = 0; name = "DVIP"; symbol = "DVIP"; decimals = 6; allowTransactions = true; expiry = 1514764800; //1 jan 2018 } /* --------------- modifiers --------------*/ /** * Makes sure a method is only called by an overseer. */ modifier onlyOverseer { assert(msg.sender == oversightAddress); _ } /* --------------- setter methods, only for the unlocked state --------------*/ /** * Sets the oversight address (not the contract). * * @param addr The oversight contract address. */ function setOversight(address addr) onlyOwnerUnlocked setter { oversightAddress = addr; } /** * Sets the total supply * * @param total Total supply of the asset. */ function setTotalSupply(uint256 total) onlyOwnerUnlocked setter { totalSupply = total; } /** * Set the Token Standard the contract applies to. * * @param std the Standard. */ function setStandard(bytes32 std) onlyOwnerUnlocked setter { standard = std; } /** * Sets the name of the contraxt * * @param _name the name. */ function setName(bytes32 _name) onlyOwnerUnlocked setter { name = _name; } /** * Sets the symbol * * @param sym The Symbol */ function setSymbol(bytes32 sym) onlyOwnerUnlocked setter { symbol = sym; } /** * Sets the precision * * @param precision Amount of decimals */ function setPrecisionDirect(uint8 precision) onlyOwnerUnlocked { decimals = precision; PrecisionSet(msg.sender, precision); } /** * Sets the balance of a certain account. * * @param addr Address of the account * @param amount Amount of assets to set on the account */ function setAccountBalance(address addr, uint256 amount) onlyOwnerUnlocked { balanceOf[addr] = amount; activateAccount(addr); } /** * Sets an allowance from a specific account to a specific account. * * @param from From-part of the allowance * @param to To-part of the allowance * @param amount Amount of the allowance */ function setAccountAllowance(address from, address to, uint256 amount) onlyOwnerUnlocked { allowance[from][to] = amount; activateAllowanceRecord(from, to); } /** * Sets the treasure balance to a certain account. * * @param amount Amount of assets to pre-set in the treasury */ function setTreasuryBalance(uint256 amount) onlyOwnerUnlocked { treasuryBalance = amount; } /** * Sets a certain account on frozen/unfrozen * * @param addr Account that will be frozen/unfrozen * @param frozen Boolean to freeze or unfreeze */ function setAccountFrozenStatus(address addr, bool frozen) onlyOwnerUnlocked { activateAccount(addr); frozenAccount[addr] = frozen; } /** * Sets up a import fee for a certain address. * * @param addr Address that will require fee * @param fee Amount of fee */ function setupImportFee(address addr, uint256 fee) onlyOwnerUnlocked { importFee[addr] = fee; activateImportFeeChargeRecord(addr); FeeSetup(msg.sender, addr, fee); } /** * Sets up a export fee for a certain address. * * @param addr Address that will require fee * @param fee Amount of fee */ function setupExportFee(address addr, uint256 fee) onlyOwnerUnlocked { exportFee[addr] = fee; activateExportFeeChargeRecord(addr); FeeSetup(msg.sender, addr, fee); } /* --------------- main token methods --------------*/ /** * @notice Transfer `_amount` from `msg.sender.address()` to `_to`. * * @param _to Address that will receive. * @param _amount Amount to be transferred. */ function transfer(address _to, uint256 _amount) returns (bool success) { assert(allowTransactions); assert(!frozenAccount[msg.sender]); assert(balanceOf[msg.sender] >= _amount); assert(balanceOf[_to] + _amount >= balanceOf[_to]); activateAccount(msg.sender); activateAccount(_to); balanceOf[msg.sender] -= _amount; if (_to == address(this)) treasuryBalance += _amount; else balanceOf[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; } /** * @notice Transfer `_amount` from `_from` to `_to`. * * @param _from Origin address * @param _to Address that will receive * @param _amount Amount to be transferred. * @return result of the method call */ function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { assert(allowTransactions); assert(!frozenAccount[msg.sender]); assert(!frozenAccount[_from]); assert(balanceOf[_from] >= _amount); assert(balanceOf[_to] + _amount >= balanceOf[_to]); assert(_amount <= allowance[_from][msg.sender]); balanceOf[_from] -= _amount; balanceOf[_to] += _amount; allowance[_from][msg.sender] -= _amount; activateAccount(_from); activateAccount(_to); activateAccount(msg.sender); Transfer(_from, _to, _amount); return true; } /** * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()` * * @param _spender Address that receives the cheque * @param _amount Amount on the cheque * @param _extraData Consequential contract to be executed by spender in same transcation. * @return result of the method call */ function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) { assert(allowTransactions); assert(!frozenAccount[msg.sender]); allowance[msg.sender][_spender] = _amount; activateAccount(msg.sender); activateAccount(_spender); activateAllowanceRecord(msg.sender, _spender); TokenRecipient spender = TokenRecipient(_spender); spender.receiveApproval(msg.sender, _amount, this, _extraData); Approval(msg.sender, _spender, _amount); return true; } /** * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()` * * @param _spender Address that receives the cheque * @param _amount Amount on the cheque * @return result of the method call */ function approve(address _spender, uint256 _amount) returns (bool success) { assert(allowTransactions); assert(!frozenAccount[msg.sender]); allowance[msg.sender][_spender] = _amount; activateAccount(msg.sender); activateAccount(_spender); activateAllowanceRecord(msg.sender, _spender); Approval(msg.sender, _spender, _amount); return true; } /* --------------- multisig admin methods --------------*/ /** * @notice Sets the expiry time in milliseconds since 1970. * * @param ts milliseconds since 1970. * */ function setExpiry(uint256 ts) multisig(sha3(msg.data)) { expiry = ts; } /** * @notice Mints `mintedAmount` new tokens to the hotwallet `hotWalletAddress`. * * @param mintedAmount Amount of new tokens to be minted. */ function mint(uint256 mintedAmount) multisig(sha3(msg.data)) { treasuryBalance += mintedAmount; totalSupply += mintedAmount; } /** * @notice Destroys `destroyAmount` new tokens from the hotwallet `hotWalletAddress` * * @param destroyAmount Amount of new tokens to be minted. */ function destroyTokens(uint256 destroyAmount) multisig(sha3(msg.data)) { assert(treasuryBalance >= destroyAmount); treasuryBalance -= destroyAmount; totalSupply -= destroyAmount; } /** * @notice Transfers `amount` from the treasury to `to` * * @param to Address to transfer to * @param amount Amount to transfer from treasury */ function transferFromTreasury(address to, uint256 amount) multisig(sha3(msg.data)) { assert(treasuryBalance >= amount); treasuryBalance -= amount; balanceOf[to] += amount; activateAccount(to); } /* --------------- fee setting administration methods --------------*/ /** * @notice Sets an import fee of `fee` on address `addr` * * @param addr Address for which the fee is valid * @param addr fee Fee * */ function setImportFee(address addr, uint256 fee) multisig(sha3(msg.data)) { uint256 max = 1; max = pow10(1, decimals); assert(fee <= max); importFee[addr] = fee; activateImportFeeChargeRecord(addr); } /** * @notice Sets an export fee of `fee` on address `addr` * * @param addr Address for which the fee is valid * @param addr fee Fee * */ function setExportFee(address addr, uint256 fee) multisig(sha3(msg.data)) { uint256 max = 1; max = pow10(1, decimals); assert(fee <= max); exportFee[addr] = fee; activateExportFeeChargeRecord(addr); } /* --------------- multisig emergency methods --------------*/ /** * @notice Sets allow transactions to `allow` * * @param allow Allow or disallow transactions */ function voteAllowTransactions(bool allow) multisig(sha3(msg.data)) { assert(allow != allowTransactions); allowTransactions = allow; } /** * @notice Destructs the contract and sends remaining `this.balance` Ether to `beneficiary` * * @param beneficiary Beneficiary of remaining Ether on contract */ function voteSuicide(address beneficiary) multisig(sha3(msg.data)) { selfdestruct(beneficiary); } /** * @notice Sets frozen to `freeze` for account `target` * * @param addr Address to be frozen/unfrozen * @param freeze Freeze/unfreeze account */ function freezeAccount(address addr, bool freeze) multisig(sha3(msg.data)) { frozenAccount[addr] = freeze; activateAccount(addr); } /** * @notice Seizes `seizeAmount` of tokens from `address` and transfers it to hotwallet * * @param addr Adress to seize tokens from * @param amount Amount of tokens to seize */ function seizeTokens(address addr, uint256 amount) multisig(sha3(msg.data)) { assert(balanceOf[addr] >= amount); assert(frozenAccount[addr]); activateAccount(addr); balanceOf[addr] -= amount; treasuryBalance += amount; } /* --------------- fee calculation method ---------------- */ /** * @notice 'Returns the fee for a transfer from `from` to `to` on an amount `amount`. * * Fee's consist of a possible * - import fee on transfers to an address * - export fee on transfers from an address * DVIP ownership on an address * - reduces fee on a transfer from this address to an import fee-ed address * - reduces the fee on a transfer to this address from an export fee-ed address * DVIP discount does not work for addresses that have an import fee or export fee set up against them. * * DVIP discount goes up to 100% * * @param from From address * @param to To address * @param amount Amount for which fee needs to be calculated. * */ function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value) { uint256 fee = exportFee[from] + importFee[to]; if (fee == 0) return 0; uint256 amountHeld; bool discounted = true; uint256 oneDVIPUnit; if (exportFee[from] == 0 && balanceOf[from] != 0 && now < expiry) { amountHeld = balanceOf[from]; } else if (importFee[to] == 0 && balanceOf[to] != 0 && now < expiry) { amountHeld = balanceOf[to]; } else discounted = false; if (discounted) { oneDVIPUnit = pow10(1, decimals); if (amountHeld > oneDVIPUnit) amountHeld = oneDVIPUnit; uint256 remaining = oneDVIPUnit - amountHeld; return div10(amount*fee*remaining, decimals*2); } return div10(amount*fee, decimals); } /* --------------- overseer methods for emergency --------------*/ /** * @notice Shuts down all transaction and approval options on the asset contract */ function shutdownTransactions() onlyOverseer { allowTransactions = false; TransactionsShutDown(msg.sender); } /* --------------- helper methods for siphoning --------------*/ function extractAccountAllowanceRecordLength(address addr) constant returns (uint256 len) { return allowanceIndex[addr].length; } function extractAccountLength() constant returns (uint256 length) { return accountIndex.length; } /* --------------- private methods --------------*/ function activateAccount(address addr) internal { if (!accountActive[addr]) { accountActive[addr] = true; accountIndex.push(addr); } } function activateAllowanceRecord(address from, address to) internal { if (!allowanceActive[from][to]) { allowanceActive[from][to] = true; allowanceIndex[from].push(to); } } function activateExportFeeChargeRecord(address addr) internal { if (!exportFeeActive[addr]) { exportFeeActive[addr] = true; exportFeeIndex.push(addr); } } function activateImportFeeChargeRecord(address addr) internal { if (!importFeeActive[addr]) { importFeeActive[addr] = true; importFeeIndex.push(addr); } } function extractImportFeeChargeLength() returns (uint256 length) { return importFeeIndex.length; } function extractExportFeeChargeLength() returns (uint256 length) { return exportFeeIndex.length; } } /** * @title DCAssetBackend Contract * * @author Ray Pulver, [email protected] */ contract DCAssetBackend is Owned, Precision, StateTransferrable, TrustClient, Util { bytes32 public standard = 'Token 0.1'; bytes32 public name; bytes32 public symbol; bool public allowTransactions; event Approval(address indexed from, address indexed spender, uint256 amount); mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); uint256 public totalSupply; address public hotWalletAddress; address public assetAddress; address public oversightAddress; address public membershipAddress; mapping (address => bool) public frozenAccount; mapping (address => address[]) public allowanceIndex; mapping (address => mapping (address => bool)) public allowanceActive; address[] public accountIndex; mapping (address => bool) public accountActive; bool public isActive; uint256 public treasuryBalance; mapping (address => uint256) public feeCharge; address[] public feeChargeIndex; mapping (address => bool) feeActive; event FrozenFunds(address target, bool frozen); event PrecisionSet(address indexed from, uint8 precision); event TransactionsShutDown(address indexed from); event FeeSetup(address indexed from, address indexed target, uint256 amount); /** * Constructor. * * @param tokenName Name of the Token * @param tokenSymbol The Token Symbol */ function DCAssetBackend(bytes32 tokenSymbol, bytes32 tokenName) { isActive = true; name = tokenName; symbol = tokenSymbol; decimals = 6; allowTransactions = true; } /* --------------- modifiers --------------*/ /** * Makes sure a method is only called by an overseer. */ modifier onlyOverseer { assert(msg.sender == oversightAddress); _ } /** * Make sure only the front end Asset can call the transfer methods */ modifier onlyAsset { assert(msg.sender == assetAddress); _ } /* --------------- setter methods, only for the unlocked state --------------*/ /** * Sets the hot wallet contract address * * @param addr Address of the Hotwallet */ function setHotWallet(address addr) onlyOwnerUnlocked setter { hotWalletAddress = addr; } /** * Sets the token facade contract address * * @param addr Address of the front-end Asset */ function setAsset(address addr) onlyOwnerUnlocked setter { assetAddress = addr; } /** * Sets the membership contract address * * @param addr Address of the membership contract */ function setMembership(address addr) onlyOwnerUnlocked setter { membershipAddress = addr; } /** * Sets the oversight address (not the contract). * * @param addr The oversight contract address. */ function setOversight(address addr) onlyOwnerUnlocked setter { oversightAddress = addr; } /** * Sets the total supply * * @param total Total supply of the asset. */ function setTotalSupply(uint256 total) onlyOwnerUnlocked setter { totalSupply = total; } /** * Set the Token Standard the contract applies to. * * @param std the Standard. */ function setStandard(bytes32 std) onlyOwnerUnlocked setter { standard = std; } /** * Sets the name of the contraxt * * @param _name the name. */ function setName(bytes32 _name) onlyOwnerUnlocked setter { name = _name; } /** * Sets the symbol * * @param sym The Symbol */ function setSymbol(bytes32 sym) onlyOwnerUnlocked setter { symbol = sym; } /** * Sets the precision * * @param precision Amount of decimals */ function setPrecisionDirect(uint8 precision) onlyOwnerUnlocked { decimals = precision; PrecisionSet(msg.sender, precision); } /** * Sets the balance of a certain account. * * @param addr Address of the account * @param amount Amount of assets to set on the account */ function setAccountBalance(address addr, uint256 amount) onlyOwnerUnlocked { balanceOf[addr] = amount; activateAccount(addr); } /** * Sets an allowance from a specific account to a specific account. * * @param from From-part of the allowance * @param to To-part of the allowance * @param amount Amount of the allowance */ function setAccountAllowance(address from, address to, uint256 amount) onlyOwnerUnlocked { allowance[from][to] = amount; activateAllowanceRecord(from, to); } /** * Sets the treasure balance to a certain account. * * @param amount Amount of assets to pre-set in the treasury */ function setTreasuryBalance(uint256 amount) onlyOwnerUnlocked { treasuryBalance = amount; } /** * Sets a certain account on frozen/unfrozen * * @param addr Account that will be frozen/unfrozen * @param frozen Boolean to freeze or unfreeze */ function setAccountFrozenStatus(address addr, bool frozen) onlyOwnerUnlocked { activateAccount(addr); frozenAccount[addr] = frozen; } /* --------------- main token methods --------------*/ /** * @notice Transfer `_amount` from `_caller` to `_to`. * * @param _caller Origin address * @param _to Address that will receive. * @param _amount Amount to be transferred. */ function transfer(address _caller, address _to, uint256 _amount) onlyAsset returns (bool success) { assert(allowTransactions); assert(!frozenAccount[_caller]); assert(balanceOf[_caller] >= _amount); assert(balanceOf[_to] + _amount >= balanceOf[_to]); activateAccount(_caller); activateAccount(_to); balanceOf[_caller] -= _amount; if (_to == address(this)) treasuryBalance += _amount; else { uint256 fee = feeFor(_caller, _to, _amount); balanceOf[_to] += _amount - fee; treasuryBalance += fee; } Transfer(_caller, _to, _amount); return true; } /** * @notice Transfer `_amount` from `_from` to `_to`, invoked by `_caller`. * * @param _caller Invoker of the call (owner of the allowance) * @param _from Origin address * @param _to Address that will receive * @param _amount Amount to be transferred. * @return result of the method call */ function transferFrom(address _caller, address _from, address _to, uint256 _amount) onlyAsset returns (bool success) { assert(allowTransactions); assert(!frozenAccount[_caller]); assert(!frozenAccount[_from]); assert(balanceOf[_from] >= _amount); assert(balanceOf[_to] + _amount >= balanceOf[_to]); assert(_amount <= allowance[_from][_caller]); balanceOf[_from] -= _amount; uint256 fee = feeFor(_from, _to, _amount); balanceOf[_to] += _amount - fee; treasuryBalance += fee; allowance[_from][_caller] -= _amount; activateAccount(_from); activateAccount(_to); activateAccount(_caller); Transfer(_from, _to, _amount); return true; } /** * @notice Approve Approves spender `_spender` to transfer `_amount` from `_caller` * * @param _caller Address that grants the allowance * @param _spender Address that receives the cheque * @param _amount Amount on the cheque * @param _extraData Consequential contract to be executed by spender in same transcation. * @return result of the method call */ function approveAndCall(address _caller, address _spender, uint256 _amount, bytes _extraData) onlyAsset returns (bool success) { assert(allowTransactions); assert(!frozenAccount[_caller]); allowance[_caller][_spender] = _amount; activateAccount(_caller); activateAccount(_spender); activateAllowanceRecord(_caller, _spender); TokenRecipient spender = TokenRecipient(_spender); assert(Relay(assetAddress).relayReceiveApproval(_caller, _spender, _amount, _extraData)); Approval(_caller, _spender, _amount); return true; } /** * @notice Approve Approves spender `_spender` to transfer `_amount` from `_caller` * * @param _caller Address that grants the allowance * @param _spender Address that receives the cheque * @param _amount Amount on the cheque * @return result of the method call */ function approve(address _caller, address _spender, uint256 _amount) onlyAsset returns (bool success) { assert(allowTransactions); assert(!frozenAccount[_caller]); allowance[_caller][_spender] = _amount; activateAccount(_caller); activateAccount(_spender); activateAllowanceRecord(_caller, _spender); Approval(_caller, _spender, _amount); return true; } /* --------------- multisig admin methods --------------*/ /** * @notice Mints `mintedAmount` new tokens to the hotwallet `hotWalletAddress`. * * @param mintedAmount Amount of new tokens to be minted. */ function mint(uint256 mintedAmount) multisig(sha3(msg.data)) { activateAccount(hotWalletAddress); balanceOf[hotWalletAddress] += mintedAmount; totalSupply += mintedAmount; } /** * @notice Destroys `destroyAmount` new tokens from the hotwallet `hotWalletAddress` * * @param destroyAmount Amount of new tokens to be minted. */ function destroyTokens(uint256 destroyAmount) multisig(sha3(msg.data)) { assert(balanceOf[hotWalletAddress] >= destroyAmount); activateAccount(hotWalletAddress); balanceOf[hotWalletAddress] -= destroyAmount; totalSupply -= destroyAmount; } /** * @notice Transfers `amount` from the treasury to `to` * * @param to Address to transfer to * @param amount Amount to transfer from treasury */ function transferFromTreasury(address to, uint256 amount) multisig(sha3(msg.data)) { assert(treasuryBalance >= amount); treasuryBalance -= amount; balanceOf[to] += amount; activateAccount(to); } /* --------------- multisig emergency methods --------------*/ /** * @notice Sets allow transactions to `allow` * * @param allow Allow or disallow transactions */ function voteAllowTransactions(bool allow) multisig(sha3(msg.data)) { if (allow == allowTransactions) throw; allowTransactions = allow; } /** * @notice Destructs the contract and sends remaining `this.balance` Ether to `beneficiary` * * @param beneficiary Beneficiary of remaining Ether on contract */ function voteSuicide(address beneficiary) multisig(sha3(msg.data)) { selfdestruct(beneficiary); } /** * @notice Sets frozen to `freeze` for account `target` * * @param addr Address to be frozen/unfrozen * @param freeze Freeze/unfreeze account */ function freezeAccount(address addr, bool freeze) multisig(sha3(msg.data)) { frozenAccount[addr] = freeze; activateAccount(addr); } /** * @notice Seizes `seizeAmount` of tokens from `address` and transfers it to hotwallet * * @param addr Adress to seize tokens from * @param amount Amount of tokens to seize */ function seizeTokens(address addr, uint256 amount) multisig(sha3(msg.data)) { assert(balanceOf[addr] >= amount); assert(frozenAccount[addr]); activateAccount(addr); balanceOf[addr] -= amount; balanceOf[hotWalletAddress] += amount; } /* --------------- overseer methods for emergency --------------*/ /** * @notice Shuts down all transaction and approval options on the asset contract */ function shutdownTransactions() onlyOverseer { allowTransactions = false; TransactionsShutDown(msg.sender); } /* --------------- helper methods for siphoning --------------*/ function extractAccountAllowanceRecordLength(address addr) returns (uint256 len) { return allowanceIndex[addr].length; } function extractAccountLength() returns (uint256 length) { return accountIndex.length; } /* --------------- private methods --------------*/ function activateAccount(address addr) internal { if (!accountActive[addr]) { accountActive[addr] = true; accountIndex.push(addr); } } function activateAllowanceRecord(address from, address to) internal { if (!allowanceActive[from][to]) { allowanceActive[from][to] = true; allowanceIndex[from].push(to); } } function feeFor(address a, address b, uint256 amount) returns (uint256 value) { if (membershipAddress == address(0x0)) return 0; return DVIP(membershipAddress).feeFor(a, b, amount); } } /** * @title DCAssetFacade, Facade for the underlying back-end dcasset token contract. Allow to be updated later. * * @author P.S.D. Reitsma, [email protected] * */ contract DCAsset is TokenBase, StateTransferrable, TrustClient, Relay { address public backendContract; /** * Constructor * * */ function DCAsset(address _backendContract) { backendContract = _backendContract; } function standard() constant returns (bytes32 std) { return DCAssetBackend(backendContract).standard(); } function name() constant returns (bytes32 nm) { return DCAssetBackend(backendContract).name(); } function symbol() constant returns (bytes32 sym) { return DCAssetBackend(backendContract).symbol(); } function decimals() constant returns (uint8 precision) { return DCAssetBackend(backendContract).decimals(); } function allowance(address from, address to) constant returns (uint256 res) { return DCAssetBackend(backendContract).allowance(from, to); } /* --------------- multisig admin methods --------------*/ /** * @notice Sets the backend contract to `_backendContract`. Can only be switched by multisig. * * @param _backendContract Address of the underlying token contract. */ function setBackend(address _backendContract) multisig(sha3(msg.data)) { backendContract = _backendContract; } /* --------------- main token methods --------------*/ /** * @notice Returns the balance of `_address`. * * @param _address The address of the balance. */ function balanceOf(address _address) constant returns (uint256 balance) { return DCAssetBackend(backendContract).balanceOf(_address); } /** * @notice Returns the total supply of the token * */ function totalSupply() constant returns (uint256 balance) { return DCAssetBackend(backendContract).totalSupply(); } /** * @notice Transfer `_amount` to `_to`. * * @param _to Address that will receive. * @param _amount Amount to be transferred. */ function transfer(address _to, uint256 _amount) returns (bool success) { if (!DCAssetBackend(backendContract).transfer(msg.sender, _to, _amount)) throw; Transfer(msg.sender, _to, _amount); return true; } /** * @notice Approve Approves spender `_spender` to transfer `_amount`. * * @param _spender Address that receives the cheque * @param _amount Amount on the cheque * @param _extraData Consequential contract to be executed by spender in same transcation. * @return result of the method call */ function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) { if (!DCAssetBackend(backendContract).approveAndCall(msg.sender, _spender, _amount, _extraData)) throw; Approval(msg.sender, _spender, _amount); return true; } /** * @notice Approve Approves spender `_spender` to transfer `_amount`. * * @param _spender Address that receives the cheque * @param _amount Amount on the cheque * @return result of the method call */ function approve(address _spender, uint256 _amount) returns (bool success) { if (!DCAssetBackend(backendContract).approve(msg.sender, _spender, _amount)) throw; Approval(msg.sender, _spender, _amount); return true; } /** * @notice Transfer `_amount` from `_from` to `_to`. * * @param _from Origin address * @param _to Address that will receive * @param _amount Amount to be transferred. * @return result of the method call */ function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { if (!DCAssetBackend(backendContract).transferFrom(msg.sender, _from, _to, _amount)) throw; Transfer(_from, _to, _amount); return true; } /** * @notice Returns fee for transferral of `_amount` from `_from` to `_to`. * * @param _from Origin address * @param _to Address that will receive * @param _amount Amount to be transferred. * @return height of the fee */ function feeFor(address _from, address _to, uint256 _amount) returns (uint256 amount) { return DCAssetBackend(backendContract).feeFor(_from, _to, _amount); } /* --------------- to be called by backend --------------*/ function relayReceiveApproval(address _caller, address _spender, uint256 _amount, bytes _extraData) returns (bool success) { assert(msg.sender == backendContract); TokenRecipient spender = TokenRecipient(_spender); spender.receiveApproval(_caller, _amount, this, _extraData); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"assertion","type":"bool"}],"name":"assert","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setOversight","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"nameFor","outputs":[{"name":"name","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[],"name":"assetAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"membershipAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"feeCharge","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isActive","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"precision","type":"uint8"}],"name":"setPrecisionDirect","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"treasuryBalance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"accountIndex","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"oversightAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"name":"setAccountBalance","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFromTreasury","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"sym","type":"bytes32"}],"name":"setSymbol","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"extractAccountLength","outputs":[{"name":"length","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountActive","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"setName","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"frozen","type":"bool"}],"name":"setAccountFrozenStatus","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"allow","type":"bool"}],"name":"voteAllowTransactions","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"destroyAmount","type":"uint256"}],"name":"destroyTokens","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"trustAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"extractAccountAllowanceRecordLength","outputs":[{"name":"len","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"setAccountAllowance","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"std","type":"bytes32"}],"name":"setStandard","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"shutdownTransactions","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"name":"seizeTokens","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"getOwner","outputs":[{"name":"out","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"feeChargeIndex","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setHotWallet","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"mintedAmount","type":"uint256"}],"name":"mint","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"setTreasuryBalance","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowanceActive","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"isLocked","outputs":[{"name":"status","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"allowTransactions","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"frozenAccount","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"allowanceIndex","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"},{"name":"b","type":"address"},{"name":"amount","type":"uint256"}],"name":"feeFor","outputs":[{"name":"value","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAsset","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setTrust","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"freeze","type":"bool"}],"name":"freezeAccount","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"cancel","outputs":[{"name":"status","type":"uint8"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"voteSuicide","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"hotWalletAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"total","type":"uint256"}],"name":"setTotalSupply","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[],"type":"function"},{"inputs":[{"name":"tokenSymbol","type":"bytes32"},{"name":"tokenName","type":"bytes32"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"},{"indexed":false,"name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"precision","type":"uint8"}],"name":"PrecisionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"TransactionsShutDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"FeeSetup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"AuthInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"with","type":"address"}],"name":"AuthComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"AuthPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"Unauthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"InitCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"NothingToCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"SetMasterKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"with","type":"address"}],"name":"AuthCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"name","type":"bytes32"}],"name":"NameRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"PropertySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"SetOwner","type":"event"}]
Contract Creation Code
606060408181527f546f6b656e20302e31000000000000000000000000000000000000000000000060025580612645833960a09052516080516000805460128054600160ff199182168117909255600394909455600494909455600160a060020a031916331760a060020a60ff021916740600000000000000000000000000000000000000001781556005805490921690921790556125a29081906100a390396000f3606060405236156102925760e060020a60003504630674763c811461029457806306fdde03146102a757806313af4035146102b057806315dacbea146102d257806318160ddd1461030257806318f3fae11461030b57806319350aea146103435780631ba46cfd146103bf5780631c8a1e20146103d15780631d086308146103e357806322f3e2d4146103fb5780632e3be78d14610407578063313ce5671461043e578063313dab201461045157806336f9825f1461045a5780634276016f146104a057806346ddb7db146104b257806348a490fb146104ec57806349e654401461054b5780634de162e41461058257806350944a8f1461058c578063523484a1146105c35780635a3b7e42146105de5780635ac801fe146105e75780635e03d3931461061e5780635f09952e1461065857806367fbd289146106b45780636d1669e1146107105780636d60e6b41461077e57806370a08231146107905780637ef95c6f146107a85780637eff1465146107cd578063811836331461080a57806383d852d91461084157806388b9e10e14610860578063893d20e8146108bf57806395d89b41146108d35780639c9330f7146108dc5780639fb755d714610922578063a0712d6814610959578063a33dd801146109b5578063a4e24847146109ec578063a4e2d63414610a14578063a5488a3714610a29578063b414d4b614610a35578063b7b9549414610a50578063beabacc814610a8c578063c5096a6914610ab9578063d0d552dd14610ae4578063dd57d5c514610b1b578063dd62ed3e14610b52578063e1f21c6714610b77578063e724529c14610ba2578063ea8a1af014610c01578063f2561a4314610c21578063f6b55a9314610c7d578063f7ea7a3d14610c8f578063f83d08ba14610cc6575b005b6102926004355b801515610d3e57610002565b610ce460035481565b610292600435600054610d4190600160a060020a03908116339091161461029b565b610cf6600435602435604435606435600a546000908190610de890600160a060020a03908116339091161461029b565b610ce460085481565b610292600435600054610fd69060a860020a900460ff1615801561033e5750600054600160a060020a0390811633909116145b61029b565b610ce4600435604080516001547f19350aea000000000000000000000000000000000000000000000000000000008252600160a060020a038481166004840152925160009391909116916319350aea916024808301926020929190829003018187876161da5a03f1156100025750506040515191506107c89050565b610d0a600a54600160a060020a031681565b610d0a600c54600160a060020a031681565b610ce460043560146020526000908152604090205481565b610cf660125460ff1681565b61029260043560005461100d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610d2760005460a060020a900460ff1681565b610ce460135481565b610d0a60043560108054829081101561000257506000527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720154600160a060020a031681565b610d0a600b54600160a060020a031681565b6102926004356024356000546110789060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006110a06000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b61029260043560005461127c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610ce46010545b90565b6102926004356000546112a69060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610cf660043560116020526000908152604090205460ff1681565b610ce460025481565b6102926004356000546112dd9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b6102926004356024356000546113079060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006113366000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006114f26000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b604080516020606435600481810135601f8101849004840285018401909552848452610cf694813594602480359560443595608494920191908190840183828082843750949650505050505050600a5460009081906116ac90600160a060020a03908116339091161461029b565b610d0a600154600160a060020a031681565b610ce460043560066020526000908152604090205481565b610ce4600435600160a060020a0381166000908152600e60205260409020545b919050565b6102926004356024356044356000546118e59060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560005461191c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600b5461194690600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006119866000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600054600160a060020a0316610589565b610ce460045481565b610d0a60043560158054829081101561000257506000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750154600160a060020a031681565b610292600435600054611b5d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560003660405180838380828437820191505092505050604051809103902060006000611b946000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600054611d249060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600f60209081526004356000908152604080822090925260243581522054610cf69060ff1681565b610cf660005460a860020a900460ff16610589565b610cf660055460ff1681565b610cf6600435600d6020526000908152604090205460ff1681565b610d0a600435602435600e6020526000828152604090208054829081101561000257506000908152602090200154600160a060020a0316905081565b610cf6600435602435604435600a546000908190611d2990600160a060020a03908116339091161461029b565b610ce46004356024356044355b600c54600090600160a060020a0316811415611ed857506000611ed1565b610292600435600054611f5a9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600054611f919060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600760209081526004356000908152604080822090925260243581522054610ce49081565b610cf6600435602435604435600a54600090611fc890600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006120416000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d27600154600090819061220590600160a060020a031682141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006122ea6000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600954600160a060020a031681565b6102926004356000546124449060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260005461246e9033600160a060020a0390811691161461029b565b60408051918252519081900360200190f35b604080519115158252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b50565b60008054604051600160a060020a03848116939216917fcbf985117192c8f614a58aaf97226bb80a754772f5f6edf06f87c675f2e6c66391a360008054600160a060020a0319168217905550565b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505b50949350505050565b600554610df79060ff1661029b565b600160a060020a0386166000908152600d6020526040902054610e1d9060ff161561029b565b600160a060020a0385166000908152600d6020526040902054610e439060ff161561029b565b600160a060020a038516600090815260066020526040902054610e69908490101561029b565b600160a060020a038416600090815260066020526040902054610e9090808501101561029b565b600160a060020a038581166000908152600760209081526040808320938a1683529290522054610ec29084111561029b565b600160a060020a038516600090815260066020526040902080548490039055610eec858585610ac6565b600160a060020a0385811660009081526006602090815260408083208054868a030190556013805486019055898416835260078252808320938b16835292905220805485900390559050610fc4855b600160a060020a03811660009081526011602052604090205460ff161515610d3e5760406000908120600160a060020a0383169091526011602052805460ff191660019081179091556010805491820180825590919082818380158290116124dd576000838152602090206124dd9181019083015b808211156122015760008155600101610fb0565b610fcd84610f3b565b610d8f86610f3b565b600b8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000805474ff0000000000000000000000000000000000000000191660a060020a83021790556040805160ff831681529051600160a060020a033316917f38b3a18cd3eaacbcc12366dd307363bc43c2e1e76798ff8ba0576968b43af69c919081900360200190a250565b600160a060020a038216600090815260066020526040902081905561109c82610f3b565b5050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156111885760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff16600114156111bb5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a361124784601360005054101561029b565b8060ff16600314156112405760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b5050505050565b601380548590039055600160a060020a038516600090815260066020526040902080548501905561127785610f3b565b611240565b600481905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600c8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600381905560405133600160a060020a03169060008051602061254283398151915290600090a250565b61131082610f3b565b600160a060020a0382166000908152600d60205260409020805460ff1916821790555050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff81166000141561141e5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156114515760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a360055460ff16151584151514156114e157610002565b8060ff16600314156114db5760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b50505050565b6005805460ff1916851790556114db565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156115da5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff166001141561160d5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954600160a060020a0316600090815260066020526040902054611668908590101561029b565b60095461167d90600160a060020a0316610f3b565b600954600160a060020a03166000908152600660205260409020805485900390556008805485900390556114db565b6005546116bb9060ff1661029b565b600160a060020a0386166000908152600d60205260409020546116e19060ff161561029b565b600160a060020a03868116600090815260076020908152604080832093891683529290522084905561171286610f3b565b61171b85610f3b565b6117a786865b600160a060020a038281166000908152600f602090815260408083209385168352929052205460ff16151561109c5760406000818120805460ff19166001908117909155600160a060020a0385168252600e602052919020805491820180825590919082818380158290116124ff576000838152602090206124ff918101908301610fb0565b849050611891600a60009054906101000a9004600160a060020a0316600160a060020a031663c76a4bfb888888886040518560e060020a0281526004018085600160a060020a0316815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156118655780820380516001836020036101000a031916815260200191505b50955050505050506020604051808303816000876161da5a03f11561000257505060405151905061029b565b84600160a060020a031686600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040518082815260200191505060405180910390a360019150610ddf565b600160a060020a0383811660009081526007602090815260408083209386168352929052208190556119178383611721565b505050565b600281905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6005805460ff1916905560405133600160a060020a0316907fd0829c131e91d8572db14b792b2fdf06ff5804c4013287d2a0a729313602649290600090a2565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611a6e5760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff1660011415611aa15760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a038516600090815260066020526040902054611afa908590101561029b565b600160a060020a0385166000908152600d6020526040902054611b1f9060ff1661029b565b611b2885610f3b565b600160a060020a0385811660009081526006602052604080822080548890039055600954909216815220805485019055611240565b60098054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611c7c5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff1660011415611caf5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954611cf790600160a060020a0316610f3b565b600954600160a060020a0316600090815260066020526040902080548501905560088054850190556114db565b601355565b600554611d389060ff1661029b565b600160a060020a0385166000908152600d6020526040902054611d5e9060ff161561029b565b600160a060020a038516600090815260066020526040902054611d84908490101561029b565b600160a060020a038416600090815260066020526040902054611dab90808501101561029b565b611db485610f3b565b611dbd84610f3b565b600160a060020a038581166000908152600660205260409020805485900390553081169085161415611df6576013805484019055611e2c565b611e01858585610ac6565b600160a060020a03851660009081526006602052604090208054828603019055601380548201905590505b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b82600160a060020a031684600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35060015b9392505050565b60408051600c547fc5096a69000000000000000000000000000000000000000000000000000000008252600160a060020a038781166004840152868116602484015260448301869052925192169163c5096a699160648082019260209290919082900301816000876161da5a03f115610002575050604051519150611ed19050565b600a8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b60018054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600554611fd79060ff1661029b565b600160a060020a0384166000908152600d6020526040902054611ffd9060ff161561029b565b600160a060020a03848116600090815260076020908152604080832093871683529290522082905561202e84610f3b565b61203783610f3b565b611e828484611721565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156121295760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff166001141561215c5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a0385166000908152600d60205260409020805460ff19168517905561127785610f3b565b8060ff16600214156121fd5760405133600160a060020a03169081907fc0adb725fbf61748fcd7b4f3c3d67eaf2681ffca84f3364a24dd77c0beff719d90600090a35b8091505b5090565b604080516001547f39b35753000000000000000000000000000000000000000000000000000000008252600160a060020a03338116600484015292519216916339b357539160248082019260209290919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156122a55760405133600160a060020a03169060008051602061258283398151915290600090a26121fd565b8060ff16600114156121ba5760405133600160a060020a0316907f57d0354b1f38cfda21abb3883d48c4b90ca307d1dac24b26b641eb5c5376e2a890600090a26121fd565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156123d25760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156124055760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a383600160a060020a0316ff5b600881905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000546124859060a860020a900460ff161561029b565b6000805475ff000000000000000000000000000000000000000000191660a860020a17815560405133600160a060020a0316917f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15991a2565b5050506000928352506020909120018054600160a060020a0319169091179055565b5050506000928352506020909120018054600160a060020a0319169091179055505622ef83ef54b5df91230b2d65af3c2a65b4ba53b97a27ff5b6f2527562ff0b24c9006512524817fcbc215e2d4dec75e5f54a944fb1a7279a5a6fa33bdcfe09adb5fe5b825dd4cb0c7c390e25ef299231a7f2a51f2ad7bef79d4198f8263756e0f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d5
Deployed Bytecode
0x606060405236156102925760e060020a60003504630674763c811461029457806306fdde03146102a757806313af4035146102b057806315dacbea146102d257806318160ddd1461030257806318f3fae11461030b57806319350aea146103435780631ba46cfd146103bf5780631c8a1e20146103d15780631d086308146103e357806322f3e2d4146103fb5780632e3be78d14610407578063313ce5671461043e578063313dab201461045157806336f9825f1461045a5780634276016f146104a057806346ddb7db146104b257806348a490fb146104ec57806349e654401461054b5780634de162e41461058257806350944a8f1461058c578063523484a1146105c35780635a3b7e42146105de5780635ac801fe146105e75780635e03d3931461061e5780635f09952e1461065857806367fbd289146106b45780636d1669e1146107105780636d60e6b41461077e57806370a08231146107905780637ef95c6f146107a85780637eff1465146107cd578063811836331461080a57806383d852d91461084157806388b9e10e14610860578063893d20e8146108bf57806395d89b41146108d35780639c9330f7146108dc5780639fb755d714610922578063a0712d6814610959578063a33dd801146109b5578063a4e24847146109ec578063a4e2d63414610a14578063a5488a3714610a29578063b414d4b614610a35578063b7b9549414610a50578063beabacc814610a8c578063c5096a6914610ab9578063d0d552dd14610ae4578063dd57d5c514610b1b578063dd62ed3e14610b52578063e1f21c6714610b77578063e724529c14610ba2578063ea8a1af014610c01578063f2561a4314610c21578063f6b55a9314610c7d578063f7ea7a3d14610c8f578063f83d08ba14610cc6575b005b6102926004355b801515610d3e57610002565b610ce460035481565b610292600435600054610d4190600160a060020a03908116339091161461029b565b610cf6600435602435604435606435600a546000908190610de890600160a060020a03908116339091161461029b565b610ce460085481565b610292600435600054610fd69060a860020a900460ff1615801561033e5750600054600160a060020a0390811633909116145b61029b565b610ce4600435604080516001547f19350aea000000000000000000000000000000000000000000000000000000008252600160a060020a038481166004840152925160009391909116916319350aea916024808301926020929190829003018187876161da5a03f1156100025750506040515191506107c89050565b610d0a600a54600160a060020a031681565b610d0a600c54600160a060020a031681565b610ce460043560146020526000908152604090205481565b610cf660125460ff1681565b61029260043560005461100d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610d2760005460a060020a900460ff1681565b610ce460135481565b610d0a60043560108054829081101561000257506000527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720154600160a060020a031681565b610d0a600b54600160a060020a031681565b6102926004356024356000546110789060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006110a06000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b61029260043560005461127c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610ce46010545b90565b6102926004356000546112a69060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610cf660043560116020526000908152604090205460ff1681565b610ce460025481565b6102926004356000546112dd9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b6102926004356024356000546113079060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006113366000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006114f26000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b604080516020606435600481810135601f8101849004840285018401909552848452610cf694813594602480359560443595608494920191908190840183828082843750949650505050505050600a5460009081906116ac90600160a060020a03908116339091161461029b565b610d0a600154600160a060020a031681565b610ce460043560066020526000908152604090205481565b610ce4600435600160a060020a0381166000908152600e60205260409020545b919050565b6102926004356024356044356000546118e59060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560005461191c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600b5461194690600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006119866000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600054600160a060020a0316610589565b610ce460045481565b610d0a60043560158054829081101561000257506000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750154600160a060020a031681565b610292600435600054611b5d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560003660405180838380828437820191505092505050604051809103902060006000611b946000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600054611d249060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600f60209081526004356000908152604080822090925260243581522054610cf69060ff1681565b610cf660005460a860020a900460ff16610589565b610cf660055460ff1681565b610cf6600435600d6020526000908152604090205460ff1681565b610d0a600435602435600e6020526000828152604090208054829081101561000257506000908152602090200154600160a060020a0316905081565b610cf6600435602435604435600a546000908190611d2990600160a060020a03908116339091161461029b565b610ce46004356024356044355b600c54600090600160a060020a0316811415611ed857506000611ed1565b610292600435600054611f5a9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600054611f919060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600760209081526004356000908152604080822090925260243581522054610ce49081565b610cf6600435602435604435600a54600090611fc890600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006120416000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d27600154600090819061220590600160a060020a031682141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006122ea6000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600954600160a060020a031681565b6102926004356000546124449060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260005461246e9033600160a060020a0390811691161461029b565b60408051918252519081900360200190f35b604080519115158252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b50565b60008054604051600160a060020a03848116939216917fcbf985117192c8f614a58aaf97226bb80a754772f5f6edf06f87c675f2e6c66391a360008054600160a060020a0319168217905550565b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505b50949350505050565b600554610df79060ff1661029b565b600160a060020a0386166000908152600d6020526040902054610e1d9060ff161561029b565b600160a060020a0385166000908152600d6020526040902054610e439060ff161561029b565b600160a060020a038516600090815260066020526040902054610e69908490101561029b565b600160a060020a038416600090815260066020526040902054610e9090808501101561029b565b600160a060020a038581166000908152600760209081526040808320938a1683529290522054610ec29084111561029b565b600160a060020a038516600090815260066020526040902080548490039055610eec858585610ac6565b600160a060020a0385811660009081526006602090815260408083208054868a030190556013805486019055898416835260078252808320938b16835292905220805485900390559050610fc4855b600160a060020a03811660009081526011602052604090205460ff161515610d3e5760406000908120600160a060020a0383169091526011602052805460ff191660019081179091556010805491820180825590919082818380158290116124dd576000838152602090206124dd9181019083015b808211156122015760008155600101610fb0565b610fcd84610f3b565b610d8f86610f3b565b600b8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000805474ff0000000000000000000000000000000000000000191660a060020a83021790556040805160ff831681529051600160a060020a033316917f38b3a18cd3eaacbcc12366dd307363bc43c2e1e76798ff8ba0576968b43af69c919081900360200190a250565b600160a060020a038216600090815260066020526040902081905561109c82610f3b565b5050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156111885760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff16600114156111bb5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a361124784601360005054101561029b565b8060ff16600314156112405760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b5050505050565b601380548590039055600160a060020a038516600090815260066020526040902080548501905561127785610f3b565b611240565b600481905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600c8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600381905560405133600160a060020a03169060008051602061254283398151915290600090a250565b61131082610f3b565b600160a060020a0382166000908152600d60205260409020805460ff1916821790555050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff81166000141561141e5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156114515760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a360055460ff16151584151514156114e157610002565b8060ff16600314156114db5760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b50505050565b6005805460ff1916851790556114db565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156115da5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff166001141561160d5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954600160a060020a0316600090815260066020526040902054611668908590101561029b565b60095461167d90600160a060020a0316610f3b565b600954600160a060020a03166000908152600660205260409020805485900390556008805485900390556114db565b6005546116bb9060ff1661029b565b600160a060020a0386166000908152600d60205260409020546116e19060ff161561029b565b600160a060020a03868116600090815260076020908152604080832093891683529290522084905561171286610f3b565b61171b85610f3b565b6117a786865b600160a060020a038281166000908152600f602090815260408083209385168352929052205460ff16151561109c5760406000818120805460ff19166001908117909155600160a060020a0385168252600e602052919020805491820180825590919082818380158290116124ff576000838152602090206124ff918101908301610fb0565b849050611891600a60009054906101000a9004600160a060020a0316600160a060020a031663c76a4bfb888888886040518560e060020a0281526004018085600160a060020a0316815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156118655780820380516001836020036101000a031916815260200191505b50955050505050506020604051808303816000876161da5a03f11561000257505060405151905061029b565b84600160a060020a031686600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040518082815260200191505060405180910390a360019150610ddf565b600160a060020a0383811660009081526007602090815260408083209386168352929052208190556119178383611721565b505050565b600281905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6005805460ff1916905560405133600160a060020a0316907fd0829c131e91d8572db14b792b2fdf06ff5804c4013287d2a0a729313602649290600090a2565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611a6e5760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff1660011415611aa15760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a038516600090815260066020526040902054611afa908590101561029b565b600160a060020a0385166000908152600d6020526040902054611b1f9060ff1661029b565b611b2885610f3b565b600160a060020a0385811660009081526006602052604080822080548890039055600954909216815220805485019055611240565b60098054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611c7c5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff1660011415611caf5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954611cf790600160a060020a0316610f3b565b600954600160a060020a0316600090815260066020526040902080548501905560088054850190556114db565b601355565b600554611d389060ff1661029b565b600160a060020a0385166000908152600d6020526040902054611d5e9060ff161561029b565b600160a060020a038516600090815260066020526040902054611d84908490101561029b565b600160a060020a038416600090815260066020526040902054611dab90808501101561029b565b611db485610f3b565b611dbd84610f3b565b600160a060020a038581166000908152600660205260409020805485900390553081169085161415611df6576013805484019055611e2c565b611e01858585610ac6565b600160a060020a03851660009081526006602052604090208054828603019055601380548201905590505b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b82600160a060020a031684600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35060015b9392505050565b60408051600c547fc5096a69000000000000000000000000000000000000000000000000000000008252600160a060020a038781166004840152868116602484015260448301869052925192169163c5096a699160648082019260209290919082900301816000876161da5a03f115610002575050604051519150611ed19050565b600a8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b60018054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600554611fd79060ff1661029b565b600160a060020a0384166000908152600d6020526040902054611ffd9060ff161561029b565b600160a060020a03848116600090815260076020908152604080832093871683529290522082905561202e84610f3b565b61203783610f3b565b611e828484611721565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156121295760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff166001141561215c5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a0385166000908152600d60205260409020805460ff19168517905561127785610f3b565b8060ff16600214156121fd5760405133600160a060020a03169081907fc0adb725fbf61748fcd7b4f3c3d67eaf2681ffca84f3364a24dd77c0beff719d90600090a35b8091505b5090565b604080516001547f39b35753000000000000000000000000000000000000000000000000000000008252600160a060020a03338116600484015292519216916339b357539160248082019260209290919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156122a55760405133600160a060020a03169060008051602061258283398151915290600090a26121fd565b8060ff16600114156121ba5760405133600160a060020a0316907f57d0354b1f38cfda21abb3883d48c4b90ca307d1dac24b26b641eb5c5376e2a890600090a26121fd565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156123d25760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156124055760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a383600160a060020a0316ff5b600881905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000546124859060a860020a900460ff161561029b565b6000805475ff000000000000000000000000000000000000000000191660a860020a17815560405133600160a060020a0316917f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15991a2565b5050506000928352506020909120018054600160a060020a0319169091179055565b5050506000928352506020909120018054600160a060020a0319169091179055505622ef83ef54b5df91230b2d65af3c2a65b4ba53b97a27ff5b6f2527562ff0b24c9006512524817fcbc215e2d4dec75e5f54a944fb1a7279a5a6fa33bdcfe09adb5fe5b825dd4cb0c7c390e25ef299231a7f2a51f2ad7bef79d4198f8263756e0f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d5
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : tokenSymbol (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : tokenName (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.