Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Accept Ownership | 9562920 | 1482 days ago | IN | 0 ETH | 0.00015712 | ||||
Enable Burning | 6306214 | 2016 days ago | IN | 0 ETH | 0.00090102 | ||||
Accept Ownership | 4601714 | 2308 days ago | IN | 0 ETH | 0.00057894 | ||||
Change Owner | 4596135 | 2309 days ago | IN | 0 ETH | 0.0002196 | ||||
Set Ledger | 4319762 | 2363 days ago | IN | 0 ETH | 0.00021828 | ||||
Set Token | 4319760 | 2363 days ago | IN | 0 ETH | 0.00021784 | ||||
0x60606040 | 4319745 | 2363 days ago | IN | Create: Controller | 0 ETH | 0.00561518 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Controller
Compiler Version
v0.4.17+commit.bdeb9e52
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-11-22 */ pragma solidity >=0.4.10; // from Zeppelin contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; require(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) internal returns (uint) { require(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; require(c>=a && c>=b); return c; } } contract Owned { address public owner; address newOwner; function Owned() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function changeOwner(address _newOwner) onlyOwner { newOwner = _newOwner; } function acceptOwnership() { if (msg.sender == newOwner) { owner = newOwner; } } } contract IToken { function transfer(address _to, uint _value) returns (bool); function balanceOf(address owner) returns(uint); } // In case someone accidentally sends token to one of these contracts, // add a way to get them back out. contract TokenReceivable is Owned { function claimTokens(address _token, address _to) onlyOwner returns (bool) { IToken token = IToken(_token); return token.transfer(_to, token.balanceOf(this)); } } contract EventDefinitions { event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); event Burn(address indexed from, bytes32 indexed to, uint value); event Claimed(address indexed claimer, uint value); } contract Pausable is Owned { bool public paused; function pause() onlyOwner { paused = true; } function unpause() onlyOwner { paused = false; } modifier notPaused() { require(!paused); _; } } contract Finalizable is Owned { bool public finalized; function finalize() onlyOwner { finalized = true; } modifier notFinalized() { require(!finalized); _; } } contract Ledger is Owned, SafeMath, Finalizable { Controller public controller; mapping(address => uint) public balanceOf; mapping (address => mapping (address => uint)) public allowance; uint public totalSupply; uint public mintingNonce; bool public mintingStopped; /** * Used for updating the contract with proofs. Note that the logic * for guarding against unwanted actions happens in the controller. We only * specify onlyController here. * @notice: not yet used */ mapping(uint256 => bytes32) public proofs; /** * If bridge delivers currency back from the other network, it may be that we * want to lock it until the user is able to "claim" it. This mapping would store the * state of the unclaimed currency. * @notice: not yet used */ mapping(address => uint256) public locked; /** * As a precautionary measure, we may want to include a structure to store necessary * data should we find that we require additional information. * @notice: not yet used */ mapping(bytes32 => bytes32) public metadata; /** * Set by the controller to indicate where the transfers should go to on a burn */ address public burnAddress; /** * Mapping allowing us to identify the bridge nodes, in the current setup * manipulation of this mapping is only accessible by the parameter. */ mapping(address => bool) public bridgeNodes; // functions below this line are onlyOwner function Ledger() { } function setController(address _controller) onlyOwner notFinalized { controller = Controller(_controller); } /** * @dev To be called once minting is complete, disables minting. */ function stopMinting() onlyOwner { mintingStopped = true; } /** * @dev Used to mint a batch of currency at once. * * @notice This gives us a maximum of 2^96 tokens per user. * @notice Expected packed structure is [ADDR(20) | VALUE(12)]. * * @param nonce The minting nonce, an incorrect nonce is rejected. * @param bits An array of packed bytes of address, value mappings. * */ function multiMint(uint nonce, uint256[] bits) onlyOwner { require(!mintingStopped); if (nonce != mintingNonce) return; mintingNonce += 1; uint256 lomask = (1 << 96) - 1; uint created = 0; for (uint i=0; i<bits.length; i++) { address a = address(bits[i]>>96); uint value = bits[i]&lomask; balanceOf[a] = balanceOf[a] + value; controller.ledgerTransfer(0, a, value); created += value; } totalSupply += created; } // functions below this line are onlyController modifier onlyController() { require(msg.sender == address(controller)); _; } function transfer(address _from, address _to, uint _value) onlyController returns (bool success) { if (balanceOf[_from] < _value) return false; balanceOf[_from] = safeSub(balanceOf[_from], _value); balanceOf[_to] = safeAdd(balanceOf[_to], _value); return true; } function transferFrom(address _spender, address _from, address _to, uint _value) onlyController returns (bool success) { if (balanceOf[_from] < _value) return false; var allowed = allowance[_from][_spender]; if (allowed < _value) return false; balanceOf[_to] = safeAdd(balanceOf[_to], _value); balanceOf[_from] = safeSub(balanceOf[_from], _value); allowance[_from][_spender] = safeSub(allowed, _value); return true; } function approve(address _owner, address _spender, uint _value) onlyController returns (bool success) { // require user to set to zero before resetting to nonzero if ((_value != 0) && (allowance[_owner][_spender] != 0)) { return false; } allowance[_owner][_spender] = _value; return true; } function increaseApproval (address _owner, address _spender, uint _addedValue) onlyController returns (bool success) { uint oldValue = allowance[_owner][_spender]; allowance[_owner][_spender] = safeAdd(oldValue, _addedValue); return true; } function decreaseApproval (address _owner, address _spender, uint _subtractedValue) onlyController returns (bool success) { uint oldValue = allowance[_owner][_spender]; if (_subtractedValue > oldValue) { allowance[_owner][_spender] = 0; } else { allowance[_owner][_spender] = safeSub(oldValue, _subtractedValue); } return true; } function setProof(uint256 _key, bytes32 _proof) onlyController { proofs[_key] = _proof; } function setLocked(address _key, uint256 _value) onlyController { locked[_key] = _value; } function setMetadata(bytes32 _key, bytes32 _value) onlyController { metadata[_key] = _value; } /** * Burn related functionality */ /** * @dev sets the burn address to the new value * * @param _address The address * */ function setBurnAddress(address _address) onlyController { burnAddress = _address; } function setBridgeNode(address _address, bool enabled) onlyController { bridgeNodes[_address] = enabled; } } contract ControllerEventDefinitions { /** * An internal burn event, emitted by the controller contract * which the bridges could be listening to. */ event ControllerBurn(address indexed from, bytes32 indexed to, uint value); } /** * @title Controller for business logic between the ERC20 API and State * * Controller is responsible for the business logic that sits in between * the Ledger (model) and the Token (view). Presently, adherence to this model * is not strict, but we expect future functionality (Burning, Claiming) to adhere * to this model more closely. * * The controller must be linked to a Token and Ledger to become functional. * */ contract Controller is Owned, Finalizable, ControllerEventDefinitions { Ledger public ledger; Token public token; address public burnAddress; function Controller() { } // functions below this line are onlyOwner function setToken(address _token) onlyOwner { token = Token(_token); } function setLedger(address _ledger) onlyOwner { ledger = Ledger(_ledger); } /** * @dev Sets the burn address burn values get moved to. Only call * after token and ledger contracts have been hooked up. Ensures * that all three values are set atomically. * * @notice New Functionality * * @param _address desired address * */ function setBurnAddress(address _address) onlyOwner { burnAddress = _address; ledger.setBurnAddress(_address); token.setBurnAddress(_address); } modifier onlyToken() { require(msg.sender == address(token)); _; } modifier onlyLedger() { require(msg.sender == address(ledger)); _; } function totalSupply() constant returns (uint) { return ledger.totalSupply(); } function balanceOf(address _a) constant returns (uint) { return ledger.balanceOf(_a); } function allowance(address _owner, address _spender) constant returns (uint) { return ledger.allowance(_owner, _spender); } // functions below this line are onlyLedger // let the ledger send transfer events (the most obvious case // is when we mint directly to the ledger and need the Transfer() // events to appear in the token) function ledgerTransfer(address from, address to, uint val) onlyLedger { token.controllerTransfer(from, to, val); } // functions below this line are onlyToken function transfer(address _from, address _to, uint _value) onlyToken returns (bool success) { return ledger.transfer(_from, _to, _value); } function transferFrom(address _spender, address _from, address _to, uint _value) onlyToken returns (bool success) { return ledger.transferFrom(_spender, _from, _to, _value); } function approve(address _owner, address _spender, uint _value) onlyToken returns (bool success) { return ledger.approve(_owner, _spender, _value); } function increaseApproval (address _owner, address _spender, uint _addedValue) onlyToken returns (bool success) { return ledger.increaseApproval(_owner, _spender, _addedValue); } function decreaseApproval (address _owner, address _spender, uint _subtractedValue) onlyToken returns (bool success) { return ledger.decreaseApproval(_owner, _spender, _subtractedValue); } /** * End Original Contract * Below is new functionality */ /** * @dev Enables burning on the token contract */ function enableBurning() onlyOwner { token.enableBurning(); } /** * @dev Disables burning on the token contract */ function disableBurning() onlyOwner { token.disableBurning(); } // public functions /** * @dev * * @param _from account the value is burned from * @param _to the address receiving the value * @param _amount the value amount * * @return success operation successful or not. */ function burn(address _from, bytes32 _to, uint _amount) onlyToken returns (bool success) { if (ledger.transfer(_from, burnAddress, _amount)) { ControllerBurn(_from, _to, _amount); token.controllerBurn(_from, _to, _amount); return true; } return false; } /** * @dev Implementation for claim mechanism. Note that this mechanism has not yet * been implemented. This function is only here for future expansion capabilities. * Presently, just returns false to indicate failure. * * @notice Only one of claimByProof() or claim() will potentially be activated in the future. * Depending on the functionality required and route selected. * * @param _claimer The individual claiming the tokens (also the recipient of said tokens). * @param data The input data required to release the tokens. * @param success The proofs associated with the data, to indicate the legitimacy of said data. * @param number The block number the proofs and data correspond to. * * @return success operation successful or not. * */ function claimByProof(address _claimer, bytes32[] data, bytes32[] proofs, uint256 number) onlyToken returns (bool success) { return false; } /** * @dev Implementation for an alternative claim mechanism, in which the participant * is not required to confirm through proofs. Note that this mechanism has not * yet been implemented. * * @notice Only one of claimByProof() or claim() will potentially be activated in the future. * Depending on the functionality required and route selected. * * @param _claimer The individual claiming the tokens (also the recipient of said tokens). * * @return success operation successful or not. */ function claim(address _claimer) onlyToken returns (bool success) { return false; } } contract Token is Finalizable, TokenReceivable, SafeMath, EventDefinitions, Pausable { // Set these appropriately before you deploy string constant public name = "AION"; uint8 constant public decimals = 8; string constant public symbol = "AION"; Controller public controller; string public motd; event Motd(string message); address public burnAddress; //@ATTENTION: set this to a correct value bool public burnable = false; // functions below this line are onlyOwner // set "message of the day" function setMotd(string _m) onlyOwner { motd = _m; Motd(_m); } function setController(address _c) onlyOwner notFinalized { controller = Controller(_c); } // functions below this line are public function balanceOf(address a) constant returns (uint) { return controller.balanceOf(a); } function totalSupply() constant returns (uint) { return controller.totalSupply(); } function allowance(address _owner, address _spender) constant returns (uint) { return controller.allowance(_owner, _spender); } function transfer(address _to, uint _value) notPaused returns (bool success) { if (controller.transfer(msg.sender, _to, _value)) { Transfer(msg.sender, _to, _value); return true; } return false; } function transferFrom(address _from, address _to, uint _value) notPaused returns (bool success) { if (controller.transferFrom(msg.sender, _from, _to, _value)) { Transfer(_from, _to, _value); return true; } return false; } function approve(address _spender, uint _value) notPaused returns (bool success) { // promote safe user behavior if (controller.approve(msg.sender, _spender, _value)) { Approval(msg.sender, _spender, _value); return true; } return false; } function increaseApproval (address _spender, uint _addedValue) notPaused returns (bool success) { if (controller.increaseApproval(msg.sender, _spender, _addedValue)) { uint newval = controller.allowance(msg.sender, _spender); Approval(msg.sender, _spender, newval); return true; } return false; } function decreaseApproval (address _spender, uint _subtractedValue) notPaused returns (bool success) { if (controller.decreaseApproval(msg.sender, _spender, _subtractedValue)) { uint newval = controller.allowance(msg.sender, _spender); Approval(msg.sender, _spender, newval); return true; } return false; } // modifier onlyPayloadSize(uint numwords) { // assert(msg.data.length >= numwords * 32 + 4); // _; // } // functions below this line are onlyController modifier onlyController() { assert(msg.sender == address(controller)); _; } // In the future, when the controller supports multiple token // heads, allow the controller to reconstitute the transfer and // approval history. function controllerTransfer(address _from, address _to, uint _value) onlyController { Transfer(_from, _to, _value); } function controllerApprove(address _owner, address _spender, uint _value) onlyController { Approval(_owner, _spender, _value); } /** * @dev Burn event possibly called by the controller on a burn. This is * the public facing event that anyone can track, the bridges listen * to an alternative event emitted by the controller. * * @param _from address that coins are burned from * @param _to address (on other network) that coins are received by * @param _value amount of value to be burned * * @return { description_of_the_return_value } */ function controllerBurn(address _from, bytes32 _to, uint256 _value) onlyController { Burn(_from, _to, _value); } function controllerClaim(address _claimer, uint256 _value) onlyController { Claimed(_claimer, _value); } /** * @dev Sets the burn address to a new value * * @param _address The address * */ function setBurnAddress(address _address) onlyController { burnAddress = _address; } /** * @dev Enables burning through burnable bool * */ function enableBurning() onlyController { burnable = true; } /** * @dev Disables burning through burnable bool * */ function disableBurning() onlyController { burnable = false; } /** * @dev Indicates that burning is enabled */ modifier burnEnabled() { require(burnable == true); _; } /** * @dev burn function, changed from original implementation. Public facing API * indicating who the token holder wants to burn currency to and the amount. * * @param _amount The amount * */ function burn(bytes32 _to, uint _amount) notPaused burnEnabled returns (bool success) { return controller.burn(msg.sender, _to, _amount); } /** * @dev claim (quantumReceive) allows the user to "prove" some an ICT to the contract * thereby thereby releasing the tokens into their account * */ function claimByProof(bytes32[] data, bytes32[] proofs, uint256 number) notPaused burnEnabled returns (bool success) { return controller.claimByProof(msg.sender, data, proofs, number); } /** * @dev Simplified version of claim, just requires user to call to claim. * No proof is needed, which version is chosen depends on our bridging model. * * @return */ function claim() notPaused burnEnabled returns (bool success) { return controller.claim(msg.sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_claimer","type":"address"}],"name":"claim","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ledger","type":"address"}],"name":"setLedger","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"bytes32"},{"name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBurnAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_claimer","type":"address"},{"name":"data","type":"bytes32[]"},{"name":"proofs","type":"bytes32[]"},{"name":"number","type":"uint256"}],"name":"claimByProof","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ledger","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_a","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burnAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableBurning","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableBurning","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"val","type":"uint256"}],"name":"ledgerTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ControllerBurn","type":"event"}]
Contract Creation Code
6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a0319909116179055610f688061003b6000396000f3006060604052361561012d5763ffffffff60e060020a600035041663144fa6d7811461013257806315dacbea1461015357806318160ddd146101955780631e83409a146101ba5780633246887d146101d95780634460fb6d146101f85780634b0e72161461021d5780634bb278f31461023c5780635513a2ac1461024f57806356397c35146102ee57806370a082311461031d57806370d5ae051461033c5780637581a8e61461034f57806379ba5097146103625780638da5cb5b1461037557806398603cca14610388578063a6f9dae11461039b578063b3f05b97146103ba578063bcdd6121146103cd578063beabacc8146103f5578063dd62ed3e1461041d578063e1f21c6714610442578063f019c2671461046a578063f5c86d2a14610492578063fc0c546a146104ba575b600080fd5b341561013d57600080fd5b610151600160a060020a03600435166104cd565b005b341561015e57600080fd5b610181600160a060020a0360043581169060243581169060443516606435610517565b604051901515815260200160405180910390f35b34156101a057600080fd5b6101a86105cb565b60405190815260200160405180910390f35b34156101c557600080fd5b610181600160a060020a0360043516610634565b34156101e457600080fd5b610151600160a060020a036004351661065a565b341561020357600080fd5b610181600160a060020a03600435166024356044356106a4565b341561022857600080fd5b610151600160a060020a036004351661081b565b341561024757600080fd5b610151610927565b341561025a57600080fd5b61018160048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650509335935061097992505050565b34156102f957600080fd5b6103016109a2565b604051600160a060020a03909116815260200160405180910390f35b341561032857600080fd5b6101a8600160a060020a03600435166109b1565b341561034757600080fd5b610301610a2c565b341561035a57600080fd5b610151610a3b565b341561036d57600080fd5b610151610aab565b341561038057600080fd5b610301610af4565b341561039357600080fd5b610151610b03565b34156103a657600080fd5b610151600160a060020a0360043516610b5d565b34156103c557600080fd5b610181610ba7565b34156103d857600080fd5b610181600160a060020a0360043581169060243516604435610bc8565b341561040057600080fd5b610181600160a060020a0360043581169060243516604435610c74565b341561042857600080fd5b6101a8600160a060020a0360043581169060243516610cfe565b341561044d57600080fd5b610181600160a060020a0360043581169060243516604435610d82565b341561047557600080fd5b610181600160a060020a0360043581169060243516604435610e0c565b341561049d57600080fd5b610151600160a060020a0360043581169060243516604435610e96565b34156104c557600080fd5b610301610f2d565b60005433600160a060020a039081169116146104e857600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460009033600160a060020a0390811691161461053557600080fd5b600254600160a060020a03166315dacbea8686868660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b15156105a857600080fd5b6102c65a03f115156105b957600080fd5b50505060405180519695505050505050565b600254600090600160a060020a03166318160ddd82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561061557600080fd5b6102c65a03f1151561062657600080fd5b505050604051805191505090565b60035460009033600160a060020a0390811691161461065257600080fd5b506000919050565b60005433600160a060020a0390811691161461067557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460009033600160a060020a039081169116146106c257600080fd5b600254600454600160a060020a039182169163beabacc8918791168560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561073657600080fd5b6102c65a03f1151561074757600080fd5b50505060405180519050156108105782600160a060020a0385167f764cd707402c711fc543d2e9223b77e23b168f4a37f56632635eaf7b6f1a0c9c8460405190815260200160405180910390a3600354600160a060020a031663eb81e95a85858560405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b15156107f357600080fd5b6102c65a03f1151561080457600080fd5b50505060019050610814565b5060005b9392505050565b60005433600160a060020a0390811691161461083657600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911790915560025416634b0e72168260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156108ab57600080fd5b6102c65a03f115156108bc57600080fd5b5050600354600160a060020a03169050634b0e72168260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561091057600080fd5b6102c65a03f1151561092157600080fd5b50505050565b60005433600160a060020a0390811691161461094257600080fd5b6001805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60035460009033600160a060020a0390811691161461099757600080fd5b506000949350505050565b600254600160a060020a031681565b600254600090600160a060020a03166370a0823183836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610a0c57600080fd5b6102c65a03f11515610a1d57600080fd5b50505060405180519392505050565b600454600160a060020a031681565b60005433600160a060020a03908116911614610a5657600080fd5b600354600160a060020a0316637581a8e66040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610a9557600080fd5b6102c65a03f11515610aa657600080fd5b505050565b60015433600160a060020a0390811691161415610af2576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600054600160a060020a031681565b60005433600160a060020a03908116911614610b1e57600080fd5b600354600160a060020a03166398603cca6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610a9557600080fd5b60005433600160a060020a03908116911614610b7857600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015474010000000000000000000000000000000000000000900460ff1681565b60035460009033600160a060020a03908116911614610be657600080fd5b600254600160a060020a031663bcdd612185858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b6102c65a03f11515610c6357600080fd5b505050604051805195945050505050565b60035460009033600160a060020a03908116911614610c9257600080fd5b600254600160a060020a031663beabacc885858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b600254600090600160a060020a031663dd62ed3e8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610d6157600080fd5b6102c65a03f11515610d7257600080fd5b5050506040518051949350505050565b60035460009033600160a060020a03908116911614610da057600080fd5b600254600160a060020a031663e1f21c6785858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b60035460009033600160a060020a03908116911614610e2a57600080fd5b600254600160a060020a031663f019c26785858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b60025433600160a060020a03908116911614610eb157600080fd5b600354600160a060020a0316639b50438784848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610f1457600080fd5b6102c65a03f11515610f2557600080fd5b505050505050565b600354600160a060020a0316815600a165627a7a7230582033b2f7e4e19b77364bd7dc10c5bc7388b6caa2c46c755af62129fbff5301a1290029
Deployed Bytecode
0x6060604052361561012d5763ffffffff60e060020a600035041663144fa6d7811461013257806315dacbea1461015357806318160ddd146101955780631e83409a146101ba5780633246887d146101d95780634460fb6d146101f85780634b0e72161461021d5780634bb278f31461023c5780635513a2ac1461024f57806356397c35146102ee57806370a082311461031d57806370d5ae051461033c5780637581a8e61461034f57806379ba5097146103625780638da5cb5b1461037557806398603cca14610388578063a6f9dae11461039b578063b3f05b97146103ba578063bcdd6121146103cd578063beabacc8146103f5578063dd62ed3e1461041d578063e1f21c6714610442578063f019c2671461046a578063f5c86d2a14610492578063fc0c546a146104ba575b600080fd5b341561013d57600080fd5b610151600160a060020a03600435166104cd565b005b341561015e57600080fd5b610181600160a060020a0360043581169060243581169060443516606435610517565b604051901515815260200160405180910390f35b34156101a057600080fd5b6101a86105cb565b60405190815260200160405180910390f35b34156101c557600080fd5b610181600160a060020a0360043516610634565b34156101e457600080fd5b610151600160a060020a036004351661065a565b341561020357600080fd5b610181600160a060020a03600435166024356044356106a4565b341561022857600080fd5b610151600160a060020a036004351661081b565b341561024757600080fd5b610151610927565b341561025a57600080fd5b61018160048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650509335935061097992505050565b34156102f957600080fd5b6103016109a2565b604051600160a060020a03909116815260200160405180910390f35b341561032857600080fd5b6101a8600160a060020a03600435166109b1565b341561034757600080fd5b610301610a2c565b341561035a57600080fd5b610151610a3b565b341561036d57600080fd5b610151610aab565b341561038057600080fd5b610301610af4565b341561039357600080fd5b610151610b03565b34156103a657600080fd5b610151600160a060020a0360043516610b5d565b34156103c557600080fd5b610181610ba7565b34156103d857600080fd5b610181600160a060020a0360043581169060243516604435610bc8565b341561040057600080fd5b610181600160a060020a0360043581169060243516604435610c74565b341561042857600080fd5b6101a8600160a060020a0360043581169060243516610cfe565b341561044d57600080fd5b610181600160a060020a0360043581169060243516604435610d82565b341561047557600080fd5b610181600160a060020a0360043581169060243516604435610e0c565b341561049d57600080fd5b610151600160a060020a0360043581169060243516604435610e96565b34156104c557600080fd5b610301610f2d565b60005433600160a060020a039081169116146104e857600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460009033600160a060020a0390811691161461053557600080fd5b600254600160a060020a03166315dacbea8686868660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b15156105a857600080fd5b6102c65a03f115156105b957600080fd5b50505060405180519695505050505050565b600254600090600160a060020a03166318160ddd82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561061557600080fd5b6102c65a03f1151561062657600080fd5b505050604051805191505090565b60035460009033600160a060020a0390811691161461065257600080fd5b506000919050565b60005433600160a060020a0390811691161461067557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460009033600160a060020a039081169116146106c257600080fd5b600254600454600160a060020a039182169163beabacc8918791168560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561073657600080fd5b6102c65a03f1151561074757600080fd5b50505060405180519050156108105782600160a060020a0385167f764cd707402c711fc543d2e9223b77e23b168f4a37f56632635eaf7b6f1a0c9c8460405190815260200160405180910390a3600354600160a060020a031663eb81e95a85858560405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b15156107f357600080fd5b6102c65a03f1151561080457600080fd5b50505060019050610814565b5060005b9392505050565b60005433600160a060020a0390811691161461083657600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911790915560025416634b0e72168260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156108ab57600080fd5b6102c65a03f115156108bc57600080fd5b5050600354600160a060020a03169050634b0e72168260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561091057600080fd5b6102c65a03f1151561092157600080fd5b50505050565b60005433600160a060020a0390811691161461094257600080fd5b6001805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60035460009033600160a060020a0390811691161461099757600080fd5b506000949350505050565b600254600160a060020a031681565b600254600090600160a060020a03166370a0823183836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610a0c57600080fd5b6102c65a03f11515610a1d57600080fd5b50505060405180519392505050565b600454600160a060020a031681565b60005433600160a060020a03908116911614610a5657600080fd5b600354600160a060020a0316637581a8e66040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610a9557600080fd5b6102c65a03f11515610aa657600080fd5b505050565b60015433600160a060020a0390811691161415610af2576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600054600160a060020a031681565b60005433600160a060020a03908116911614610b1e57600080fd5b600354600160a060020a03166398603cca6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610a9557600080fd5b60005433600160a060020a03908116911614610b7857600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015474010000000000000000000000000000000000000000900460ff1681565b60035460009033600160a060020a03908116911614610be657600080fd5b600254600160a060020a031663bcdd612185858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b6102c65a03f11515610c6357600080fd5b505050604051805195945050505050565b60035460009033600160a060020a03908116911614610c9257600080fd5b600254600160a060020a031663beabacc885858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b600254600090600160a060020a031663dd62ed3e8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610d6157600080fd5b6102c65a03f11515610d7257600080fd5b5050506040518051949350505050565b60035460009033600160a060020a03908116911614610da057600080fd5b600254600160a060020a031663e1f21c6785858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b60035460009033600160a060020a03908116911614610e2a57600080fd5b600254600160a060020a031663f019c26785858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5257600080fd5b60025433600160a060020a03908116911614610eb157600080fd5b600354600160a060020a0316639b50438784848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610f1457600080fd5b6102c65a03f11515610f2557600080fd5b505050505050565b600354600160a060020a0316815600a165627a7a7230582033b2f7e4e19b77364bd7dc10c5bc7388b6caa2c46c755af62129fbff5301a1290029
Swarm Source
bzzr://33b2f7e4e19b77364bd7dc10c5bc7388b6caa2c46c755af62129fbff5301a129
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 23 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.