ETH Price: $2,439.43 (+1.43%)

Contract

0xD180443cFB5015088fCC6689c9D66660FC20155c
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer46579732017-12-01 19:43:562500 days ago1512157436IN
0xD180443c...0FC20155c
0 ETH0.000014250.6
Transfer46579652017-12-01 19:43:162500 days ago1512157396IN
0xD180443c...0FC20155c
0 ETH0.000014290.6
Transfer46579272017-12-01 19:34:092500 days ago1512156849IN
0xD180443c...0FC20155c
0 ETH0.000002380.1
Accept Ownership46017362017-11-22 16:36:542510 days ago1511368614IN
0xD180443c...0FC20155c
0 ETH0.0005757721
Change Owner45961442017-11-21 18:53:482510 days ago1511290428IN
0xD180443c...0FC20155c
0 ETH0.000219185
Transfer44630062017-10-31 8:42:542532 days ago1509439374IN
0xD180443c...0FC20155c
0 ETH0.000596525.1
Transfer44629282017-10-31 8:25:092532 days ago1509438309IN
0xD180443c...0FC20155c
0 ETH0.000596525.1
Transfer44628462017-10-31 8:05:292532 days ago1509437129IN
0xD180443c...0FC20155c
0 ETH0.000596525.1
Transfer44588412017-10-30 16:30:002533 days ago1509381000IN
0xD180443c...0FC20155c
0 ETH0.000596525.1
Transfer44588232017-10-30 16:25:122533 days ago1509380712IN
0xD180443c...0FC20155c
0 ETH0.0007604832
Transfer44587602017-10-30 16:08:372533 days ago1509379717IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Transfer44587562017-10-30 16:07:252533 days ago1509379645IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Transfer44587402017-10-30 16:01:172533 days ago1509379277IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Transfer44587112017-10-30 15:54:352533 days ago1509378875IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Transfer44587002017-10-30 15:52:022533 days ago1509378722IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Transfer44586872017-10-30 15:48:362533 days ago1509378516IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Transfer44586822017-10-30 15:47:112533 days ago1509378431IN
0xD180443c...0FC20155c
0 ETH0.0004990621
Approve43577502017-10-12 0:02:152551 days ago1507766535IN
0xD180443c...0FC20155c
0 ETH0.0037515
Multi Mint43575962017-10-11 22:44:322551 days ago1507761872IN
0xD180443c...0FC20155c
0 ETH0.0075424310
Multi Mint43575922017-10-11 22:42:212551 days ago1507761741IN
0xD180443c...0FC20155c
0 ETH0.0139642810
Multi Mint43575902017-10-11 22:42:082551 days ago1507761728IN
0xD180443c...0FC20155c
0 ETH0.01441310
Multi Mint43575882017-10-11 22:41:442551 days ago1507761704IN
0xD180443c...0FC20155c
0 ETH0.0142617210
Multi Mint43575862017-10-11 22:41:052551 days ago1507761665IN
0xD180443c...0FC20155c
0 ETH0.0141059610
Multi Mint43575842017-10-11 22:40:242551 days ago1507761624IN
0xD180443c...0FC20155c
0 ETH0.0150149210
Multi Mint43575822017-10-11 22:39:382551 days ago1507761578IN
0xD180443c...0FC20155c
0 ETH0.0147072410
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Ledger

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

Contract ABI

[{"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":"stopMinting","outputs":[],"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":true,"inputs":[{"name":"","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":true,"inputs":[{"name":"","type":"bytes32"}],"name":"metadata","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_value","type":"uint256"}],"name":"setLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nonce","type":"uint256"},{"name":"bits","type":"uint256[]"}],"name":"multiMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bridgeNodes","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proofs","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"enabled","type":"bool"}],"name":"setBridgeNode","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":false,"inputs":[{"name":"_key","type":"uint256"},{"name":"_proof","type":"bytes32"}],"name":"setProof","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"locked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"bytes32"},{"name":"_value","type":"bytes32"}],"name":"setMetadata","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","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":true,"inputs":[],"name":"mintingStopped","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a0319909116179055610dfe8061003b6000396000f300606060405236156101725763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166315dacbea811461017757806318160ddd146101b95780633e3e0b12146101de5780634b0e7216146101f35780634bb278f31461021257806370a082311461022557806370d5ae05146102445780637122ba061461027357806373845cfa1461028957806379ba5097146102ab57806388df13fa146102be5780638d2c929a146103125780638da5cb5b1461033157806392eefe9b146103445780639ddaf5aa14610363578063a6f9dae114610379578063adfd793514610398578063b3f05b97146103bc578063bcdd6121146103cf578063beabacc8146103f7578063c0c98d6f1461041f578063cbf9fe5f14610438578063d3525adf14610457578063dd62ed3e14610470578063e1f21c6714610495578063f019c267146104bd578063f339292f146104e5578063f77c4791146104f8578063fbb0eb8b1461050b575b600080fd5b341561018257600080fd5b6101a5600160a060020a036004358116906024358116906044351660643561051e565b604051901515815260200160405180910390f35b34156101c457600080fd5b6101cc610649565b60405190815260200160405180910390f35b34156101e957600080fd5b6101f161064f565b005b34156101fe57600080fd5b6101f1600160a060020a0360043516610679565b341561021d57600080fd5b6101f16106c3565b341561023057600080fd5b6101cc600160a060020a0360043516610715565b341561024f57600080fd5b610257610727565b604051600160a060020a03909116815260200160405180910390f35b341561027e57600080fd5b6101cc600435610736565b341561029457600080fd5b6101f1600160a060020a0360043516602435610748565b34156102b657600080fd5b6101f161077f565b34156102c957600080fd5b6101f1600480359060446024803590810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506107c895505050505050565b341561031d57600080fd5b6101a5600160a060020a036004351661093e565b341561033c57600080fd5b610257610953565b341561034f57600080fd5b6101f1600160a060020a0360043516610962565b341561036e57600080fd5b6101cc6004356109d4565b341561038457600080fd5b6101f1600160a060020a03600435166109e6565b34156103a357600080fd5b6101f1600160a060020a03600435166024351515610a30565b34156103c757600080fd5b6101a5610a76565b34156103da57600080fd5b6101a5600160a060020a0360043581169060243516604435610a97565b341561040257600080fd5b6101a5600160a060020a0360043581169060243516604435610b1a565b341561042a57600080fd5b6101f1600435602435610bd7565b341561044357600080fd5b6101cc600160a060020a0360043516610c04565b341561046257600080fd5b6101f1600435602435610c16565b341561047b57600080fd5b6101cc600160a060020a0360043581169060243516610c43565b34156104a057600080fd5b6101a5600160a060020a0360043581169060243516604435610c60565b34156104c857600080fd5b6101a5600160a060020a0360043581169060243516604435610cee565b34156104f057600080fd5b6101a5610d7f565b341561050357600080fd5b610257610d88565b341561051657600080fd5b6101cc610d97565b600254600090819033600160a060020a0390811691161461053e57600080fd5b600160a060020a038516600090815260036020526040902054839010156105685760009150610640565b50600160a060020a03808516600090815260046020908152604080832093891683529290522054828110156105a05760009150610640565b600160a060020a0384166000908152600360205260409020546105c39084610d9d565b600160a060020a0380861660009081526003602052604080822093909355908716815220546105f29084610dbd565b600160a060020a0386166000908152600360205260409020556106158184610dbd565b600160a060020a038087166000908152600460209081526040808320938b1683529290522055600191505b50949350505050565b60055481565b60005433600160a060020a0390811691161461066a57600080fd5b6007805460ff19166001179055565b60025433600160a060020a0390811691161461069457600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a039081169116146106de57600080fd5b6001805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60036020526000908152604090205481565b600b54600160a060020a031681565b600a6020526000908152604090205481565b60025433600160a060020a0390811691161461076357600080fd5b600160a060020a03909116600090815260096020526040902055565b60015433600160a060020a03908116911614156107c6576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60008054819081908190819033600160a060020a039081169116146107ec57600080fd5b60075460ff16156107fc57600080fd5b600654871461080a57610935565b6006805460010190556bffffffffffffffffffffffff9450600093508392505b855183101561092c57606086848151811061084157fe5b906020019060200201519060020a900491508486848151811061086057fe5b90602001906020020151600160a060020a0380851660009081526003602052604080822080549590941694850190935560025493945092169163f5c86d2a9185908590517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561090957600080fd5b6102c65a03f1151561091a57600080fd5b5050509283019260019092019161082a565b60058054850190555b50505050505050565b600c6020526000908152604090205460ff1681565b600054600160a060020a031681565b60005433600160a060020a0390811691161461097d57600080fd5b60015474010000000000000000000000000000000000000000900460ff16156109a557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60086020526000908152604090205481565b60005433600160a060020a03908116911614610a0157600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a03908116911614610a4b57600080fd5b600160a060020a03919091166000908152600c60205260409020805460ff1916911515919091179055565b60015474010000000000000000000000000000000000000000900460ff1681565b600254600090819033600160a060020a03908116911614610ab757600080fd5b50600160a060020a03808516600090815260046020908152604080832093871683529290522054610ae88184610d9d565b600160a060020a0380871660009081526004602090815260408083209389168352929052205560019150509392505050565b60025460009033600160a060020a03908116911614610b3857600080fd5b600160a060020a03841660009081526003602052604090205482901015610b6157506000610bd0565b600160a060020a038416600090815260036020526040902054610b849083610dbd565b600160a060020a038086166000908152600360205260408082209390935590851681522054610bb39083610d9d565b600160a060020a0384166000908152600360205260409020555060015b9392505050565b60025433600160a060020a03908116911614610bf257600080fd5b60009182526008602052604090912055565b60096020526000908152604090205481565b60025433600160a060020a03908116911614610c3157600080fd5b6000918252600a602052604090912055565b600460209081526000928352604080842090915290825290205481565b60025460009033600160a060020a03908116911614610c7e57600080fd5b8115801590610cb15750600160a060020a0380851660009081526004602090815260408083209387168352929052205415155b15610cbe57506000610bd0565b50600160a060020a0392831660009081526004602090815260408083209490951682529290925291902055600190565b600254600090819033600160a060020a03908116911614610d0e57600080fd5b50600160a060020a0380851660009081526004602090815260408083209387168352929052205480831115610d6a57600160a060020a038086166000908152600460209081526040808320938816835292905290812055610d74565b610ae88184610dbd565b506001949350505050565b60075460ff1681565b600254600160a060020a031681565b60065481565b6000828201838110801590610db25750828110155b1515610bd057600080fd5b600082821115610dcc57600080fd5b509003905600a165627a7a72305820085f8858c02c363ef1741b90e13c4f8a5236ccb5e000672ee776273cb642b5a70029

Deployed Bytecode

0x606060405236156101725763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166315dacbea811461017757806318160ddd146101b95780633e3e0b12146101de5780634b0e7216146101f35780634bb278f31461021257806370a082311461022557806370d5ae05146102445780637122ba061461027357806373845cfa1461028957806379ba5097146102ab57806388df13fa146102be5780638d2c929a146103125780638da5cb5b1461033157806392eefe9b146103445780639ddaf5aa14610363578063a6f9dae114610379578063adfd793514610398578063b3f05b97146103bc578063bcdd6121146103cf578063beabacc8146103f7578063c0c98d6f1461041f578063cbf9fe5f14610438578063d3525adf14610457578063dd62ed3e14610470578063e1f21c6714610495578063f019c267146104bd578063f339292f146104e5578063f77c4791146104f8578063fbb0eb8b1461050b575b600080fd5b341561018257600080fd5b6101a5600160a060020a036004358116906024358116906044351660643561051e565b604051901515815260200160405180910390f35b34156101c457600080fd5b6101cc610649565b60405190815260200160405180910390f35b34156101e957600080fd5b6101f161064f565b005b34156101fe57600080fd5b6101f1600160a060020a0360043516610679565b341561021d57600080fd5b6101f16106c3565b341561023057600080fd5b6101cc600160a060020a0360043516610715565b341561024f57600080fd5b610257610727565b604051600160a060020a03909116815260200160405180910390f35b341561027e57600080fd5b6101cc600435610736565b341561029457600080fd5b6101f1600160a060020a0360043516602435610748565b34156102b657600080fd5b6101f161077f565b34156102c957600080fd5b6101f1600480359060446024803590810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506107c895505050505050565b341561031d57600080fd5b6101a5600160a060020a036004351661093e565b341561033c57600080fd5b610257610953565b341561034f57600080fd5b6101f1600160a060020a0360043516610962565b341561036e57600080fd5b6101cc6004356109d4565b341561038457600080fd5b6101f1600160a060020a03600435166109e6565b34156103a357600080fd5b6101f1600160a060020a03600435166024351515610a30565b34156103c757600080fd5b6101a5610a76565b34156103da57600080fd5b6101a5600160a060020a0360043581169060243516604435610a97565b341561040257600080fd5b6101a5600160a060020a0360043581169060243516604435610b1a565b341561042a57600080fd5b6101f1600435602435610bd7565b341561044357600080fd5b6101cc600160a060020a0360043516610c04565b341561046257600080fd5b6101f1600435602435610c16565b341561047b57600080fd5b6101cc600160a060020a0360043581169060243516610c43565b34156104a057600080fd5b6101a5600160a060020a0360043581169060243516604435610c60565b34156104c857600080fd5b6101a5600160a060020a0360043581169060243516604435610cee565b34156104f057600080fd5b6101a5610d7f565b341561050357600080fd5b610257610d88565b341561051657600080fd5b6101cc610d97565b600254600090819033600160a060020a0390811691161461053e57600080fd5b600160a060020a038516600090815260036020526040902054839010156105685760009150610640565b50600160a060020a03808516600090815260046020908152604080832093891683529290522054828110156105a05760009150610640565b600160a060020a0384166000908152600360205260409020546105c39084610d9d565b600160a060020a0380861660009081526003602052604080822093909355908716815220546105f29084610dbd565b600160a060020a0386166000908152600360205260409020556106158184610dbd565b600160a060020a038087166000908152600460209081526040808320938b1683529290522055600191505b50949350505050565b60055481565b60005433600160a060020a0390811691161461066a57600080fd5b6007805460ff19166001179055565b60025433600160a060020a0390811691161461069457600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a039081169116146106de57600080fd5b6001805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b60036020526000908152604090205481565b600b54600160a060020a031681565b600a6020526000908152604090205481565b60025433600160a060020a0390811691161461076357600080fd5b600160a060020a03909116600090815260096020526040902055565b60015433600160a060020a03908116911614156107c6576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60008054819081908190819033600160a060020a039081169116146107ec57600080fd5b60075460ff16156107fc57600080fd5b600654871461080a57610935565b6006805460010190556bffffffffffffffffffffffff9450600093508392505b855183101561092c57606086848151811061084157fe5b906020019060200201519060020a900491508486848151811061086057fe5b90602001906020020151600160a060020a0380851660009081526003602052604080822080549590941694850190935560025493945092169163f5c86d2a9185908590517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561090957600080fd5b6102c65a03f1151561091a57600080fd5b5050509283019260019092019161082a565b60058054850190555b50505050505050565b600c6020526000908152604090205460ff1681565b600054600160a060020a031681565b60005433600160a060020a0390811691161461097d57600080fd5b60015474010000000000000000000000000000000000000000900460ff16156109a557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60086020526000908152604090205481565b60005433600160a060020a03908116911614610a0157600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a03908116911614610a4b57600080fd5b600160a060020a03919091166000908152600c60205260409020805460ff1916911515919091179055565b60015474010000000000000000000000000000000000000000900460ff1681565b600254600090819033600160a060020a03908116911614610ab757600080fd5b50600160a060020a03808516600090815260046020908152604080832093871683529290522054610ae88184610d9d565b600160a060020a0380871660009081526004602090815260408083209389168352929052205560019150509392505050565b60025460009033600160a060020a03908116911614610b3857600080fd5b600160a060020a03841660009081526003602052604090205482901015610b6157506000610bd0565b600160a060020a038416600090815260036020526040902054610b849083610dbd565b600160a060020a038086166000908152600360205260408082209390935590851681522054610bb39083610d9d565b600160a060020a0384166000908152600360205260409020555060015b9392505050565b60025433600160a060020a03908116911614610bf257600080fd5b60009182526008602052604090912055565b60096020526000908152604090205481565b60025433600160a060020a03908116911614610c3157600080fd5b6000918252600a602052604090912055565b600460209081526000928352604080842090915290825290205481565b60025460009033600160a060020a03908116911614610c7e57600080fd5b8115801590610cb15750600160a060020a0380851660009081526004602090815260408083209387168352929052205415155b15610cbe57506000610bd0565b50600160a060020a0392831660009081526004602090815260408083209490951682529290925291902055600190565b600254600090819033600160a060020a03908116911614610d0e57600080fd5b50600160a060020a0380851660009081526004602090815260408083209387168352929052205480831115610d6a57600160a060020a038086166000908152600460209081526040808320938816835292905290812055610d74565b610ae88184610dbd565b506001949350505050565b60075460ff1681565b600254600160a060020a031681565b60065481565b6000828201838110801590610db25750828110155b1515610bd057600080fd5b600082821115610dcc57600080fd5b509003905600a165627a7a72305820085f8858c02c363ef1741b90e13c4f8a5236ccb5e000672ee776273cb642b5a70029

Swarm Source

bzzr://085f8858c02c363ef1741b90e13c4f8a5236ccb5e000672ee776273cb642b5a7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.