Contract 0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c1

 

TxHash Block Age From To Value [TxFee]
0xbfd2c3a2c49c1643618de003e35f8a812973e7818081581e653694691ba13bf0740672622 hrs 7 mins ago0x70f1587521c8abe634885f39315f9fba9f811fda IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.0001455392
0x4d6c2dd5f6ef5a50ab67822833ffdbe9ec591a8ad07594d507540c60959b83cb73982482 days 5 hrs ago0xdcfa8742752b429337cf0e980fe86984882fa266 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.000333884
0x17380ea326d63a01c7d61d6e7b2aba86c78894e7fa807e279f0b95a8a4ed0a0073982452 days 5 hrs ago0xdcfa8742752b429337cf0e980fe86984882fa266 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.000090962
0x3a1cb73bddf573cd383883d956904400f0462bb59ab760ebf2ade54b01915a2373981632 days 6 hrs ago0xd79efc8f7a26640718c50ca228c89c7f7bef37d3 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.0000447
0x8daafc5e5d1e47af331c94013846aa4b4ea1248e989ee30fc814265ed2d24d1773954152 days 16 hrs ago0xbc2bc002b19085e5c50e25e4b1623a6f991023c4 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.000136443
0x8795b5424f25e20a3db187e589e99456d57be49b73947a6475af5a09d263d8ac73953732 days 16 hrs ago0xe62bcb857668791734875b0a18dbc76f0358cd97 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.000181924
0x5bb31db271340fbb59538617a1a1f021a81070a7f4d1b89e99d49a5895b0c51f73943732 days 20 hrs ago0xbc2bc002b19085e5c50e25e4b1623a6f991023c4 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.000181924
0xd7ebb987e93885502250e9b8a0352ed36cd800ed31dbd6e77b4f421eea08809273906523 days 10 hrs ago0xa9f3304c9b8e79bab8448f2881d9877f9a022fa9 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.0008514042
0x3b687c129cb18227360ab8096798b206567baae4150ced67a21c6ae54ac6841e73906473 days 10 hrs ago0xa9f3304c9b8e79bab8448f2881d9877f9a022fa9 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.000227405
0xd1742893aa7fbae98b7e26f4dde019977e2168b6d803a70a7a56eaa24f305c0273899633 days 12 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.006844622
0x43571e15934998f84408b70a21a23ebffb95d09fa62b693a205662b7664f31f773899583 days 12 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001864721
0xe333aa3e1a1fd3b4bebe408bccc77f7c8c61c8d59805515eac98506949f9036273899453 days 12 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.006844622
0x0e43dc6b2a080f85d42e3df47ac1c933f86a0be85d0313b6d5fbaecebc588c7673899443 days 12 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001864721
0x1c56fe7e3e6e0043e8c7f274b8ca861ca83cdeb910dbaae7bf2053d8826c464b73899423 days 13 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.006844622
0xc5de4350e4b979e7d6ec06b9bbe5d14e4c1053d266889216d0b8173786d116a673899363 days 13 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001864721
0xf4bd8d050bb89fdf593c79853157a087d8087d958d0584471d5a0cf14696e4f473892253 days 15 hrs ago0x6696722c5cad75664a7dfe99fa2f9b0693c6de39 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.006844622
0x10d7a86e7d8e74ff0cc882f7a4975d828b3c22e6295dbeee0ac73cbad148b13373892193 days 15 hrs ago0x6696722c5cad75664a7dfe99fa2f9b0693c6de39 IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001864721
0xe1aa7f827450299332d59bdbc1a8461c98e932d3993c8b89f672f21c70fc028b73884463 days 18 hrs ago0x16d1a00355366cc66bc16a0ff4686710187d72dd IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001533974
0x2051017c15b3044dbb2acfab6ee70e3f22b92296dacbb3db59c535a24be5c59673884333 days 18 hrs ago0x16d1a00355366cc66bc16a0ff4686710187d72dd IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.002786975
0x1d29a57bf1a05c266aabcd6174c9e8d3ab7690d47251352ab5fe3d9a3253e4e673884293 days 18 hrs ago0x16d1a00355366cc66bc16a0ff4686710187d72dd IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.003440146
0x9e57e9b2925f1ebac3413f76d020294de3403c1f532d057b67a8c6fd975be0c673884243 days 18 hrs ago0x16d1a00355366cc66bc16a0ff4686710187d72dd IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.003478317
0x84c507b7938d132e061a36eec9cbfd6358b2aff5eb0a17d7c66f3f76b852f76c73883733 days 18 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.006844622
0xec0455704c2f28dba16e83aa51dad3f123eb9b48e83e4e688774efadeb24d6fb73883703 days 18 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001249721
0x7411b4d02f434c365894360a5c383db3afc9005a508c7536f83250df929fe81673883693 days 18 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.001864721
0x9ad59a60177056ca7fb7dd0ec31bf13ebdb839d06ce710473b14c791fd0f9e1a73883613 days 18 hrs ago0x7c78b6560ba28657d29b1a86f5aeb1ed2731835c IN  0xc71a7ecd96fef6e34a5c296bee9533f1deb0e3c10 Ether0.006844622
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value

Contract Source Code Verified (Exact Match)

Contract Name:
CaelumToken

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity 0.4.25;

library SafeMath {

    /**
     * @dev Multiplies two numbers, reverts on overflow.
     */
    function mul(uint256 _a, uint256 _b) internal pure returns(uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (_a == 0) {
            return 0;
        }

        uint256 c = _a * _b;
        require(c / _a == _b);

        return c;
    }

    /**
     * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 _a, uint256 _b) internal pure returns(uint256) {
        require(_b > 0); // Solidity only automatically asserts when dividing by 0
        uint256 c = _a / _b;
        // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 _a, uint256 _b) internal pure returns(uint256) {
        require(_b <= _a);
        uint256 c = _a - _b;

        return c;
    }

    /**
     * @dev Adds two numbers, reverts on overflow.
     */
    function add(uint256 _a, uint256 _b) internal pure returns(uint256) {
        uint256 c = _a + _b;
        require(c >= _a);

        return c;
    }

    /**
     * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns(uint256) {
        require(b != 0);
        return a % b;
    }
}

contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @dev Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

interface IRemoteFunctions {
  function _externalAddMasternode(address) external;
  function _externalStopMasternode(address) external;
  function isMasternodeOwner(address) external view returns (bool);
  function userHasActiveNodes(address) external view returns (bool);
}

interface ICaelumMasternode {
    function _externalArrangeFlow() external;
    function rewardsProofOfWork() external view returns (uint) ;
    function rewardsMasternode() external view returns (uint) ;
    function masternodeIDcounter() external view returns (uint) ;
    function masternodeCandidate() external view returns (uint) ; 
    function getUserFromID(uint) external view returns  (address) ;
    function userCounter() external view returns(uint);
    function contractProgress() external view returns (uint, uint, uint, uint, uint, uint, uint, uint);
}

contract ERC20Basic {
    function totalSupply() public view returns(uint256);

    function balanceOf(address _who) public view returns(uint256);

    function transfer(address _to, uint256 _value) public returns(bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
    function allowance(address _owner, address _spender) public view returns(uint256);

    function transferFrom(address _from, address _to, uint256 _value) public returns(bool);

    function approve(address _spender, uint256 _value) public returns(bool);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract BasicToken is ERC20Basic {
    using SafeMath
    for uint256;

    mapping(address => uint256) internal balances;

    uint256 internal totalSupply_;

    /**
     * @dev Total number of tokens in existence
     */
    function totalSupply() public view returns(uint256) {
        return totalSupply_;
    }

    /**
     * @dev Transfer token for a specified address
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transfer(address _to, uint256 _value) public returns(bool) {
        require(_value <= balances[msg.sender]);
        require(_to != address(0));

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param _owner The address to query the the balance of.
     * @return An uint256 representing the amount owned by the passed address.
     */
    function balanceOf(address _owner) public view returns(uint256) {
        return balances[_owner];
    }

}

contract StandardToken is ERC20, BasicToken {

    mapping(address => mapping(address => uint256)) internal allowed;


    /**
     * @dev Transfer tokens from one address to another
     * @param _from address The address which you want to send tokens from
     * @param _to address The address which you want to transfer to
     * @param _value uint256 the amount of tokens to be transferred
     */
    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
    public
    returns(bool) {
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);
        require(_to != address(0));

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     */
    function approve(address _spender, uint256 _value) public returns(bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param _spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(
        address _owner,
        address _spender
    )
    public
    view
    returns(uint256) {
        return allowed[_owner][_spender];
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(
        address _spender,
        uint256 _addedValue
    )
    public
    returns(bool) {
        allowed[msg.sender][_spender] = (
            allowed[msg.sender][_spender].add(_addedValue));
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(
        address _spender,
        uint256 _subtractedValue
    )
    public
    returns(bool) {
        uint256 oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue >= oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

}

contract ERC20Interface {

    function totalSupply() public constant returns (uint);

    function balanceOf(address tokenOwner) public constant returns (uint balance);

    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);

    function transfer(address to, uint tokens) public returns (bool success);

    function approve(address spender, uint tokens) public returns (bool success);

    function transferFrom(address from, address to, uint tokens) public returns (bool success);


    event Transfer(address indexed from, address indexed to, uint tokens);

    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

}

contract InterfaceContracts is Ownable {
    InterfaceContracts public _internalMod;
    
    function setModifierContract (address _t) onlyOwner public {
        _internalMod = InterfaceContracts(_t);
    }

    modifier onlyMiningContract() {
      require(msg.sender == _internalMod._contract_miner(), "Wrong sender");
          _;
      }

    modifier onlyTokenContract() {
      require(msg.sender == _internalMod._contract_token(), "Wrong sender");
      _;
    }
    
    modifier onlyMasternodeContract() {
      require(msg.sender == _internalMod._contract_masternode(), "Wrong sender");
      _;
    }
    
    modifier onlyVotingOrOwner() {
      require(msg.sender == _internalMod._contract_voting() || msg.sender == owner, "Wrong sender");
      _;
    }
    
    modifier onlyVotingContract() {
      require(msg.sender == _internalMod._contract_voting() || msg.sender == owner, "Wrong sender");
      _;
    }
      
    function _contract_voting () public view returns (address) {
        return _internalMod._contract_voting();
    }
    
    function _contract_masternode () public view returns (address) {
        return _internalMod._contract_masternode();
    }
    
    function _contract_token () public view returns (address) {
        return _internalMod._contract_token();
    }
    
    function _contract_miner () public view returns (address) {
        return _internalMod._contract_miner();
    }
}

contract CaelumAcceptERC20  is InterfaceContracts {
    using SafeMath for uint;

    address[] public tokensList;
    bool setOwnContract = true;

    struct _whitelistTokens {
        address tokenAddress;
        bool active;
        uint requiredAmount;
        uint validUntil;
        uint timestamp;
    }

    mapping(address => mapping(address => uint)) public tokens;
    mapping(address => _whitelistTokens) acceptedTokens;

    event Deposit(address token, address user, uint amount, uint balance);
    event Withdraw(address token, address user, uint amount, uint balance);

    /**
     * @notice Allow the dev to set it's own token as accepted payment.
     * @dev Can be hardcoded in the constructor. Given the contract size, we decided to separate it.
     * @return bool
     */
    function addOwnToken() internal returns(bool) {
        require(setOwnContract);
        addToWhitelist(this, 5000 * 1e8, 36500);
        setOwnContract = false;
        return true;
    }


    /**
     * @notice Add a new token as accepted payment method.
     * @param _token Token contract address.
     * @param _amount Required amount of this Token as collateral
     * @param daysAllowed How many days will we accept this token?
     */
    function addToWhitelist(address _token, uint _amount, uint daysAllowed) internal {
        _whitelistTokens storage newToken = acceptedTokens[_token];
        newToken.tokenAddress = _token;
        newToken.requiredAmount = _amount;
        newToken.timestamp = now;
        newToken.validUntil = now + (daysAllowed * 1 days);
        newToken.active = true;

        tokensList.push(_token);
    }

    /**
     * @dev internal function to determine if we accept this token.
     * @param _ad Token contract address
     * @return bool
     */
    function isAcceptedToken(address _ad) internal view returns(bool) {
        return acceptedTokens[_ad].active;
    }

    /**
     * @dev internal function to determine the requiredAmount for a specific token.
     * @param _ad Token contract address
     * @return bool
     */
    function getAcceptedTokenAmount(address _ad) internal view returns(uint) {
        return acceptedTokens[_ad].requiredAmount;
    }

    /**
     * @dev internal function to determine if the token is still accepted timewise.
     * @param _ad Token contract address
     * @return bool
     */
    function isValid(address _ad) internal view returns(bool) {
        uint endTime = acceptedTokens[_ad].validUntil;
        if (block.timestamp < endTime) return true;
        return false;
    }

    /**
     * @notice Returns an array of all accepted token. You can get more details by calling getTokenDetails function with this address.
     * @return array Address
     */
    function listAcceptedTokens() public view returns(address[]) {
        return tokensList;
    }

    /**
     * @notice Returns a full list of the token details
     * @param token Token contract address
     */
    function getTokenDetails(address token) public view returns(address ad, uint required, bool active, uint valid) {
        return (acceptedTokens[token].tokenAddress, acceptedTokens[token].requiredAmount, acceptedTokens[token].active, acceptedTokens[token].validUntil);
    }

    /**
     * @notice Public function that allows any user to deposit accepted tokens as collateral to become a masternode.
     * @param token Token contract address
     * @param amount Amount to deposit
     */
    function depositCollateral(address token, uint amount) public {

        require(isAcceptedToken(token), "ERC20 not authorised"); // Should be a token from our list
        require(amount == getAcceptedTokenAmount(token)); // The amount needs to match our set amount
        require(isValid(token)); // It should be called within the setup timeframe


        tokens[token][msg.sender] = tokens[token][msg.sender].add(amount);
        emit Deposit(token, msg.sender, amount, tokens[token][msg.sender]);

        require(StandardToken(token).transferFrom(msg.sender, this, amount), "error with transfer");
        IRemoteFunctions(_contract_masternode())._externalAddMasternode(msg.sender);
    }

    /**
     * @notice Public function that allows any user to withdraw deposited tokens and stop as masternode
     * @param token Token contract address
     * @param amount Amount to withdraw
     */
    function withdrawCollateral(address token, uint amount) public {
        require(token != 0, "No token specified"); // token should be an actual address
        require(isAcceptedToken(token), "ERC20 not authorised"); // Should be a token from our list
        require(amount == getAcceptedTokenAmount(token)); // The amount needs to match our set amount, allow only one withdrawal at a time.
        uint amountToWithdraw = amount;

        tokens[token][msg.sender] = tokens[token][msg.sender] - amount;
        emit Withdraw(token, msg.sender, amountToWithdraw, amountToWithdraw);

        require(StandardToken(token).transfer(msg.sender, amountToWithdraw),"error with transfer");
        IRemoteFunctions(_contract_masternode())._externalStopMasternode(msg.sender);
    }

}

contract CaelumToken is CaelumAcceptERC20, StandardToken {
    using SafeMath for uint;

    ICaelumMasternode public masternodeInterface;

    bool public swapClosed = false;
    bool isOnTestNet = true;

    string public symbol = "CLM";
    string public name = "Caelum Token";
    uint8 public decimals = 8;
    uint256 public totalSupply = 2100000000000000;

    address allowedSwapAddress01 = 0x7600bF5112945F9F006c216d5d6db0df2806eDc6;
    address allowedSwapAddress02 = 0x16Da16948e5092A3D2aA71Aca7b57b8a9CFD8ddb;

    uint swapStartedBlock;

    mapping(address => uint) manualSwaps;
    mapping(address => bool) hasSwapped;

    event NewSwapRequest(address _swapper, uint _amount);
    event TokenSwapped(address _swapper, uint _amount);

    constructor() public {
        addOwnToken();
        swapStartedBlock = now;
    }

    /**
     * @dev Allow users to upgrade from our previous tokens.
     * For trust issues, addresses are hardcoded.
     * @param _token Token the user wants to swap.
     */
    function upgradeTokens(address _token) public {
        require(!hasSwapped[msg.sender], "User already swapped");
        require(now <= swapStartedBlock + 1 days, "Timeframe exipred, please use manualUpgradeTokens function");
        require(_token == allowedSwapAddress01 || _token == allowedSwapAddress02, "Token not allowed to swap.");

        uint amountToUpgrade = ERC20(_token).balanceOf(msg.sender);

        require(amountToUpgrade <= ERC20(_token).allowance(msg.sender, this));
        require(ERC20(_token).transferFrom(msg.sender, this, amountToUpgrade));
        require(ERC20(_token).balanceOf(msg.sender) == 0);

        tokens[_token][msg.sender] = tokens[_token][msg.sender].add(amountToUpgrade);
        balances[msg.sender] = balances[msg.sender].add(amountToUpgrade);

        emit Transfer(this, msg.sender, amountToUpgrade);
        emit TokenSwapped(msg.sender, amountToUpgrade);

        if(
          ERC20(allowedSwapAddress01).balanceOf(msg.sender) == 0  &&
          ERC20(allowedSwapAddress02).balanceOf(msg.sender) == 0
        ) {
          hasSwapped[msg.sender] = true;
        }

    }

    /**
     * @dev Allow users to upgrade manualy from our previous tokens.
     * For trust issues, addresses are hardcoded.
     * Used when a user failed to swap in time.
     * Dev should manually verify the origin of these tokens before allowing it.
     * @param _token Token the user wants to swap.
     */
    function manualUpgradeTokens(address _token) public {
        require(!hasSwapped[msg.sender], "User already swapped");
        require(now >= swapStartedBlock + 1 days, "Timeframe incorrect");
        require(_token == allowedSwapAddress01 || _token == allowedSwapAddress02, "Token not allowed to swap.");

        uint amountToUpgrade = ERC20(_token).balanceOf(msg.sender);
        require(amountToUpgrade <= ERC20(_token).allowance(msg.sender, this));

        if (ERC20(_token).transferFrom(msg.sender, this, amountToUpgrade)) {
            require(ERC20(_token).balanceOf(msg.sender) == 0);
            if(
              ERC20(allowedSwapAddress01).balanceOf(msg.sender) == 0  &&
              ERC20(allowedSwapAddress02).balanceOf(msg.sender) == 0
            ) {
              hasSwapped[msg.sender] = true;
            }

            tokens[_token][msg.sender] = tokens[_token][msg.sender].add(amountToUpgrade);
            manualSwaps[msg.sender] = amountToUpgrade;
            emit NewSwapRequest(msg.sender, amountToUpgrade);
        }
    }

    /**
     * @dev Allow users to partially upgrade manualy from our previous tokens.
     * For trust issues, addresses are hardcoded.
     * Used when a user failed to swap in time.
     * Dev should manually verify the origin of these tokens before allowing it.
     * @param _token Token the user wants to swap.
     */
    function manualUpgradePartialTokens(address _token, uint _amount) public {
        require(!hasSwapped[msg.sender], "User already swapped");
        require(now >= swapStartedBlock + 1 days, "Timeframe incorrect");
        require(_token == allowedSwapAddress01 || _token == allowedSwapAddress02, "Token not allowed to swap.");

        uint amountToUpgrade = _amount; //ERC20(_token).balanceOf(msg.sender);
        require(amountToUpgrade <= ERC20(_token).allowance(msg.sender, this));

        uint newBalance = ERC20(_token).balanceOf(msg.sender) - (amountToUpgrade);
        if (ERC20(_token).transferFrom(msg.sender, this, amountToUpgrade)) {

            require(ERC20(_token).balanceOf(msg.sender) == newBalance, "Balance error.");

            if(
              ERC20(allowedSwapAddress01).balanceOf(msg.sender) == 0  &&
              ERC20(allowedSwapAddress02).balanceOf(msg.sender) == 0
            ) {
              hasSwapped[msg.sender] = true;
            }

            tokens[_token][msg.sender] = tokens[_token][msg.sender].add(amountToUpgrade);
            manualSwaps[msg.sender] = amountToUpgrade;
            emit NewSwapRequest(msg.sender, amountToUpgrade);
        }
    }

    /**
     * @dev Due to some bugs in the previous contracts, a handfull of users will
     * be unable to fully withdraw their masternodes. Owner can replace those tokens
     * who are forever locked up in the old contract with new ones.
     */
     function getLockedTokens(address _contract, address _holder) public view returns(uint) {
         return CaelumAcceptERC20(_contract).tokens(_contract, _holder);
     }

    /**
     * @dev Approve a request for manual token swaps
     * @param _holder Holder The user who requests a swap.
     */
    function approveManualUpgrade(address _holder) onlyOwner public {
        balances[_holder] = balances[_holder].add(manualSwaps[_holder]);
        emit Transfer(this, _holder, manualSwaps[_holder]);
    }

    /**
     * @dev Decline a request for manual token swaps
     * @param _holder Holder The user who requests a swap.
     */
    function declineManualUpgrade(address _token, address _holder) onlyOwner public {
        require(ERC20(_token).transfer(_holder, manualSwaps[_holder]));
        tokens[_token][_holder] = tokens[_token][_holder] - manualSwaps[_holder];
        delete manualSwaps[_holder];
        delete hasSwapped[_holder];
    }

    /**
     * @dev Due to some bugs in the previous contracts, a handfull of users will
     * be unable to fully withdraw their masternodes. Owner can replace those tokens
     * who are forever locked up in the old contract with new ones.
     */
     function replaceLockedTokens(address _contract, address _holder) onlyOwner public {
         uint amountLocked = getLockedTokens(_contract, _holder);
         balances[_holder] = balances[_holder].add(amountLocked);
         emit Transfer(this, _holder, amountLocked);
         hasSwapped[msg.sender] = true;
     }

    /**
     * @dev Used to grant the mining contract rights to reward users.
     * As our contracts are separate, we call this function with modifier onlyMiningContract to sent out rewards.
     * @param _receiver Who receives the mining reward.
     * @param _amount What amount to reward.
     */
    function rewardExternal(address _receiver, uint _amount) onlyMiningContract public {
        balances[_receiver] = balances[_receiver].add(_amount);
        emit Transfer(this, _receiver, _amount);
    }

    /**
     * @dev We allow the masternodecontract to add tokens to our whitelist. By this approach,
     * we can move all voting logic to a contract that can be upgraden when needed.
     */
    function addToWhitelistExternal(address _token, uint _amount, uint daysAllowed) onlyMasternodeContract public {
        addToWhitelist( _token, _amount, daysAllowed);
    }

    /**
     * @dev Fetch data from the actual reward. We do this to prevent pools payout out
     * the global reward instead of the calculated ones.
     * By default, pools fetch the `getMiningReward()` value and will payout this amount.
     */
    function getMiningRewardForPool() public view returns(uint) {
        return masternodeInterface.rewardsProofOfWork();
    }

    /**
     * @dev Return the Proof of Work reward from the masternode contract.
     */
    function rewardsProofOfWork() public view returns(uint) {
        return masternodeInterface.rewardsProofOfWork();
    }

    /**
     * @dev Return the masternode reward from the masternode contract.
     */
    function rewardsMasternode() public view returns(uint) {
        return masternodeInterface.rewardsMasternode();
    }

    /**
     * @dev Return the number of masternodes from the masternode contract.
     */
    function masternodeCounter() public view returns(uint) {
        return masternodeInterface.userCounter();
    }

    /**
     * @dev Return the general state from the masternode contract.
     */
    function contractProgress() public view returns
    (
        uint epoch,
        uint candidate,
        uint round,
        uint miningepoch,
        uint globalreward,
        uint powreward,
        uint masternodereward,
        uint usercounter
    )
    {
        return ICaelumMasternode(_contract_masternode()).contractProgress();

    }

    /**
     * @dev pull new masternode contract from the modifier contract
     */
    function setMasternodeContract() internal  {
        masternodeInterface = ICaelumMasternode(_contract_masternode());
    }

    /**
     * Override; For some reason, truffle testing does not recognize function.
     * Remove before live?
     */
    function setModifierContract (address _contract) onlyOwner public {
        require (now <= swapStartedBlock + 10 days);
        _internalMod = InterfaceContracts(_contract);
        setMasternodeContract();
    }

    /**
    * @dev Move the voting away from token. All votes will be made from the voting
    */
    function VoteModifierContract (address _contract) onlyVotingContract external {
        //_internalMod = CaelumModifierAbstract(_contract);
        _internalMod = InterfaceContracts(_contract);
        setMasternodeContract();
    }
    
    /**
     * Owner can transfer out any accidentally sent ERC20 tokens
     */
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        return ERC20Interface(tokenAddress).transfer(owner, tokens);
    }

    /**
     * @dev Needed for testnet only. Comment codeblock out before deploy, leave it as example.
     */
    /** 
    function setSwap(address _contract, address _contract_2) onlyOwner public {
        require (isOnTestNet == true);
        allowedSwapAddress01 = _contract;
        allowedSwapAddress02 = _contract_2;
    }
    */


}

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMiningRewardForPool","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_miner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"masternodeInterface","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"VoteModifierContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsProofOfWork","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"setModifierContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_holder","type":"address"}],"name":"declineManualUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawCollateral","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"manualUpgradePartialTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokensList","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"},{"name":"_amount","type":"uint256"}],"name":"rewardExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractProgress","outputs":[{"name":"epoch","type":"uint256"},{"name":"candidate","type":"uint256"},{"name":"round","type":"uint256"},{"name":"miningepoch","type":"uint256"},{"name":"globalreward","type":"uint256"},{"name":"powreward","type":"uint256"},{"name":"masternodereward","type":"uint256"},{"name":"usercounter","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"swapClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_voting","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"},{"name":"daysAllowed","type":"uint256"}],"name":"addToWhitelistExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"listAcceptedTokens","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getTokenDetails","outputs":[{"name":"ad","type":"address"},{"name":"required","type":"uint256"},{"name":"active","type":"bool"},{"name":"valid","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"upgradeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"depositCollateral","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"manualUpgradeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_contract","type":"address"},{"name":"_holder","type":"address"}],"name":"getLockedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_masternode","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_contract_token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_internalMod","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"masternodeCounter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"},{"name":"_holder","type":"address"}],"name":"replaceLockedTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","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":"_holder","type":"address"}],"name":"approveManualUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardsMasternode","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_swapper","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"NewSwapRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_swapper","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokenSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","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":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code

6003805460ff191660011781556009805460a060020a61ffff021916750100000000000000000000000000000000000000000017905560c060405260808190527f434c4d000000000000000000000000000000000000000000000000000000000060a09081526200007491600a919062000245565b5060408051808201909152600c8082527f4361656c756d20546f6b656e00000000000000000000000000000000000000006020909201918252620000bb91600b9162000245565b50600c805460ff19166008179055660775f05a074000600d55600e8054600160a060020a0319908116737600bf5112945f9f006c216d5d6db0df2806edc617909155600f80549091167316da16948e5092a3d2aa71aca7b57b8a9cfd8ddb1790553480156200012957600080fd5b5060008054600160a060020a031916331790556200014f6401000000006200015a810204565b5042601055620002e7565b60035460009060ff1615156200016f57600080fd5b6200018c3064746a528800618e946401000000006200019d810204565b506003805460ff1916905560015b90565b600160a060020a039092166000818152600560205260408120805460018083019590955542600383018190556201518090960290950160028083019190915560a060020a60ff0219600160a060020a031996871685171674010000000000000000000000000000000000000000179091558054938401815590527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054909216179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028857805160ff1916838001178555620002b8565b82800160010185558215620002b8579182015b82811115620002b85782518255916020019190600101906200029b565b50620002c6929150620002ca565b5090565b6200019a91905b80821115620002c65760008155600101620002d1565b61325e80620002f76000396000f3006080604052600436106102005763ffffffff60e060020a60003504166306fdde038114610205578063095ea7b31461028f5780630b2cb8a3146102c75780630de33210146102ee5780630e7b2f311461031f5780630ecf42531461033457806318160ddd146103575780631ad93a9b146102c75780631dfb396f1461036c57806323b872dd1461038d5780632ce85ad8146103b7578063313ce567146103de578063350c35e91461040957806342aef49d1461042d5780634d12e34e14610451578063508493bc146104695780636618846314610490578063680d5762146104b457806370a08231146104d8578063715018a6146104f95780637558d81e1461050e5780637d33bf541461056457806381ae8d861461057957806385ae7b2c1461058e5780638843c1ba146105b557806388aa8bee1461061a5780638da5cb5b1461066b57806395d89b4114610680578063a1c5032914610695578063a5d5db0c146106b6578063a88a7b46146106da578063a9059cbb146106fb578063a95bede41461071f578063aad5b4ae14610746578063be550be41461075b578063c28b294714610770578063c722cf4c14610785578063c7c811b21461079a578063d73dd623146107c1578063dc39d06d146107e5578063dd62ed3e14610809578063e114187614610830578063e1eca32714610851578063f2fde38b14610866575b600080fd5b34801561021157600080fd5b5061021a610887565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025457818101518382015260200161023c565b50505050905090810190601f1680156102815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029b57600080fd5b506102b3600160a060020a0360043516602435610915565b604080519115158252519081900360200190f35b3480156102d357600080fd5b506102dc61097b565b60408051918252519081900360200190f35b3480156102fa57600080fd5b50610303610a0b565b60408051600160a060020a039092168252519081900360200190f35b34801561032b57600080fd5b50610303610a6a565b34801561034057600080fd5b50610355600160a060020a0360043516610a79565b005b34801561036357600080fd5b506102dc610ba1565b34801561037857600080fd5b50610355600160a060020a0360043516610ba7565b34801561039957600080fd5b506102b3600160a060020a0360043581169060243516604435610bd2565b3480156103c357600080fd5b50610355600160a060020a0360043581169060243516610d37565b3480156103ea57600080fd5b506103f3610e4d565b6040805160ff9092168252519081900360200190f35b34801561041557600080fd5b50610355600160a060020a0360043516602435610e56565b34801561043957600080fd5b50610355600160a060020a0360043516602435611109565b34801561045d57600080fd5b50610303600435611693565b34801561047557600080fd5b506102dc600160a060020a03600435811690602435166116bb565b34801561049c57600080fd5b506102b3600160a060020a03600435166024356116d8565b3480156104c057600080fd5b50610355600160a060020a03600435166024356117c7565b3480156104e457600080fd5b506102dc600160a060020a0360043516611915565b34801561050557600080fd5b50610355611930565b34801561051a57600080fd5b5061052361199c565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561057057600080fd5b506102b3611a58565b34801561058557600080fd5b50610303611a79565b34801561059a57600080fd5b50610355600160a060020a0360043516602435604435611ad8565b3480156105c157600080fd5b506105ca611bc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106065781810151838201526020016105ee565b505050509050019250505060405180910390f35b34801561062657600080fd5b5061063b600160a060020a0360043516611c28565b60408051600160a060020a0390951685526020850193909352901515838301526060830152519081900360800190f35b34801561067757600080fd5b50610303611c73565b34801561068c57600080fd5b5061021a611c82565b3480156106a157600080fd5b50610355600160a060020a0360043516611cdd565b3480156106c257600080fd5b50610355600160a060020a036004351660243561227f565b3480156106e657600080fd5b50610355600160a060020a0360043516612501565b34801561070757600080fd5b506102b3600160a060020a0360043516602435612a2f565b34801561072b57600080fd5b506102dc600160a060020a0360043581169060243516612afe565b34801561075257600080fd5b50610303612b9e565b34801561076757600080fd5b50610303612bfd565b34801561077c57600080fd5b50610303612c5c565b34801561079157600080fd5b506102dc612c6b565b3480156107a657600080fd5b50610355600160a060020a0360043581169060243516612cca565b3480156107cd57600080fd5b506102b3600160a060020a0360043516602435612d7a565b3480156107f157600080fd5b506102b3600160a060020a0360043516602435612e13565b34801561081557600080fd5b506102dc600160a060020a0360043581169060243516612e9b565b34801561083c57600080fd5b50610355600160a060020a0360043516612ec6565b34801561085d57600080fd5b506102dc612f60565b34801561087257600080fd5b50610355600160a060020a0360043516612fbf565b600b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b505050505081565b336000818152600860209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600954604080517f1ad93a9b0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691631ad93a9b91600480830192602092919082900301818787803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b505050506040513d6020811015610a0457600080fd5b5051905090565b600154604080517f0de332100000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691630de3321091600480830192602092919082900301818787803b1580156109da57600080fd5b600954600160a060020a031681565b600160009054906101000a9004600160a060020a0316600160a060020a03166381ae8d866040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610acc57600080fd5b505af1158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b5051600160a060020a0316331480610b185750600054600160a060020a031633145b1515610b6e576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038316179055610b9e612fdf565b50565b600d5481565b600054600160a060020a03163314610bbe57600080fd5b601054620d2f0001421115610b6e57600080fd5b600160a060020a038316600090815260066020526040812054821115610bf757600080fd5b600160a060020a0384166000908152600860209081526040808320338452909152902054821115610c2757600080fd5b600160a060020a0383161515610c3c57600080fd5b600160a060020a038416600090815260066020526040902054610c65908363ffffffff61301616565b600160a060020a038086166000908152600660205260408082209390935590851681522054610c9a908363ffffffff61302d16565b600160a060020a038085166000908152600660209081526040808320949094559187168152600882528281203382529091522054610cde908363ffffffff61301616565b600160a060020a0380861660008181526008602090815260408083203384528252918290209490945580518681529051928716939192600080516020613213833981519152929181900390910190a35060019392505050565b600054600160a060020a03163314610d4e57600080fd5b600160a060020a0381811660008181526011602090815260408083205481517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101959095526024850152519386169363a9059cbb93604480820194918390030190829087803b158015610dc557600080fd5b505af1158015610dd9573d6000803e3d6000fd5b505050506040513d6020811015610def57600080fd5b50511515610dfc57600080fd5b600160a060020a03908116600081815260116020908152604080832080549690951683526004825280832093835292815282822080549590950390945591829055601290925220805460ff19169055565b600c5460ff1681565b6000600160a060020a0383161515610eb8576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f20746f6b656e207370656369666965640000000000000000000000000000604482015290519081900360640190fd5b610ec183613046565b1515610f17576040805160e560020a62461bcd02815260206004820152601460248201527f4552433230206e6f7420617574686f7269736564000000000000000000000000604482015290519081900360640190fd5b610f208361307c565b8214610f2b57600080fd5b50600160a060020a0382166000818152600460209081526040808320338085529083529281902080548690039055805193845290830191909152818101839052606082018390525182917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567919081900360800190a1604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0385169163a9059cbb9160448083019260209291908290030181600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505050506040513d602081101561103257600080fd5b5051151561108a576040805160e560020a62461bcd02815260206004820152601360248201527f6572726f722077697468207472616e7366657200000000000000000000000000604482015290519081900360640190fd5b611092612b9e565b600160a060020a031663c56280b1336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156110ec57600080fd5b505af1158015611100573d6000803e3d6000fd5b50505050505050565b33600090815260126020526040812054819060ff1615611173576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b60105462015180014210156111d2576040805160e560020a62461bcd02815260206004820152601360248201527f54696d656672616d6520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b600e54600160a060020a03858116911614806111fb5750600f54600160a060020a038581169116145b1515611251576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051849350600160a060020a0386169163dd62ed3e9160448083019260209291908290030181600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b50518211156112f357600080fd5b6040805160e060020a6370a0823102815233600482015290518391600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b50516040805160e060020a6323b872dd028152336004820152306024820152604481018690529051929091039250600160a060020a038616916323b872dd916064808201926020929091908290030181600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506040513d60208110156113f657600080fd5b50511561168d576040805160e060020a6370a0823102815233600482015290518291600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b505050506040513d602081101561147557600080fd5b5051146114cc576040805160e560020a62461bcd02815260206004820152600e60248201527f42616c616e6365206572726f722e000000000000000000000000000000000000604482015290519081900360640190fd5b600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561151c57600080fd5b505af1158015611530573d6000803e3d6000fd5b505050506040513d602081101561154657600080fd5b50511580156115ce5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b505050506040513d60208110156115ca57600080fd5b5051155b156115ee57336000908152601260205260409020805460ff191660011790555b600160a060020a0384166000908152600460209081526040808320338452909152902054611622908363ffffffff61302d16565b600160a060020a0385166000908152600460209081526040808320338085529083528184209490945560118252918290208590558151928352820184905280517f773870998542487d493dab21355d6bf368d08d39e927b7ec1eecd3171707075e9281900390910190a15b50505050565b60028054829081106116a157fe5b600091825260209091200154600160a060020a0316905081565b600460209081526000928352604080842090915290825290205481565b336000908152600860209081526040808320600160a060020a038616845290915281205480831061172c57336000908152600860209081526040808320600160a060020a0388168452909152812055611761565b61173c818463ffffffff61301616565b336000908152600860209081526040808320600160a060020a03891684529091529020555b336000818152600860209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160009054906101000a9004600160a060020a0316600160a060020a0316630de332106040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561181a57600080fd5b505af115801561182e573d6000803e3d6000fd5b505050506040513d602081101561184457600080fd5b5051600160a060020a031633146118a5576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600660205260409020546118ce908263ffffffff61302d16565b600160a060020a0383166000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a35050565b600160a060020a031660009081526006602052604090205490565b600054600160a060020a0316331461194757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000806000806000806000806119b0612b9e565b600160a060020a0316637558d81e6040518163ffffffff1660e060020a02815260040161010060405180830381600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d610100811015611a1957600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959f949e50929c50909a509850965091945092509050565b60095474010000000000000000000000000000000000000000900460ff1681565b600154604080517f81ae8d860000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916381ae8d8691600480830192602092919082900301818787803b1580156109da57600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a031663aad5b4ae6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b2b57600080fd5b505af1158015611b3f573d6000803e3d6000fd5b505050506040513d6020811015611b5557600080fd5b5051600160a060020a03163314611bb6576040805160e560020a62461bcd02815260206004820152600c60248201527f57726f6e672073656e6465720000000000000000000000000000000000000000604482015290519081900360640190fd5b611bc183838361309a565b505050565b60606002805480602002602001604051908101604052809291908181526020018280548015611c1e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611c00575b5050505050905090565b600160a060020a039081166000908152600560205260409020805460018201546002909201549281169391927401000000000000000000000000000000000000000090910460ff1691565b600054600160a060020a031681565b600a805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561090d5780601f106108e25761010080835404028352916020019161090d565b3360009081526012602052604081205460ff1615611d45576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b6010546201518001421115611dca576040805160e560020a62461bcd02815260206004820152603a60248201527f54696d656672616d6520657869707265642c20706c6561736520757365206d6160448201527f6e75616c55706772616465546f6b656e732066756e6374696f6e000000000000606482015290519081900360840190fd5b600e54600160a060020a0383811691161480611df35750600f54600160a060020a038381169116145b1515611e49576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015611e9457600080fd5b505af1158015611ea8573d6000803e3d6000fd5b505050506040513d6020811015611ebe57600080fd5b5051604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051919250600160a060020a0384169163dd62ed3e916044808201926020929091908290030181600087803b158015611f2b57600080fd5b505af1158015611f3f573d6000803e3d6000fd5b505050506040513d6020811015611f5557600080fd5b5051811115611f6357600080fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b505050506040513d6020811015611fe557600080fd5b50511515611ff257600080fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561203d57600080fd5b505af1158015612051573d6000803e3d6000fd5b505050506040513d602081101561206757600080fd5b50511561207357600080fd5b600160a060020a03821660009081526004602090815260408083203384529091529020546120a7908263ffffffff61302d16565b600160a060020a03831660009081526004602090815260408083203384528252808320939093556006905220546120e4908263ffffffff61302d16565b336000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a3604080513381526020810183905281517f5cf069f6412972a6c15aa4f5d0a340bfc369c3118f4cf8960b568ffe7ae46213929181900390910190a1600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156121a957600080fd5b505af11580156121bd573d6000803e3d6000fd5b505050506040513d60208110156121d357600080fd5b505115801561225b5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561222d57600080fd5b505af1158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b5051155b1561227b57336000908152601260205260409020805460ff191660011790555b5050565b61228882613046565b15156122de576040805160e560020a62461bcd02815260206004820152601460248201527f4552433230206e6f7420617574686f7269736564000000000000000000000000604482015290519081900360640190fd5b6122e78261307c565b81146122f257600080fd5b6122fb8261315d565b151561230657600080fd5b600160a060020a038216600090815260046020908152604080832033845290915290205461233a908263ffffffff61302d16565b600160a060020a03831660008181526004602090815260408083203380855290835292819020859055805193845290830191909152818101849052606082019290925290517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360800190a16040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b505050506040513d602081101561242b57600080fd5b50511515612483576040805160e560020a62461bcd02815260206004820152601360248201527f6572726f722077697468207472616e7366657200000000000000000000000000604482015290519081900360640190fd5b61248b612b9e565b600160a060020a031663d230df6a336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156124e557600080fd5b505af11580156124f9573d6000803e3d6000fd5b505050505050565b3360009081526012602052604081205460ff1615612569576040805160e560020a62461bcd02815260206004820152601460248201527f5573657220616c72656164792073776170706564000000000000000000000000604482015290519081900360640190fd5b60105462015180014210156125c8576040805160e560020a62461bcd02815260206004820152601360248201527f54696d656672616d6520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b600e54600160a060020a03838116911614806125f15750600f54600160a060020a038381169116145b1515612647576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e206e6f7420616c6c6f77656420746f20737761702e000000000000604482015290519081900360640190fd5b6040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561269257600080fd5b505af11580156126a6573d6000803e3d6000fd5b505050506040513d60208110156126bc57600080fd5b5051604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051919250600160a060020a0384169163dd62ed3e916044808201926020929091908290030181600087803b15801561272957600080fd5b505af115801561273d573d6000803e3d6000fd5b505050506040513d602081101561275357600080fd5b505181111561276157600080fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d60208110156127e357600080fd5b50511561227b576040805160e060020a6370a082310281523360048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561283557600080fd5b505af1158015612849573d6000803e3d6000fd5b505050506040513d602081101561285f57600080fd5b50511561286b57600080fd5b600e546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b505050506040513d60208110156128e557600080fd5b505115801561296d5750600f546040805160e060020a6370a082310281523360048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b505050506040513d602081101561296957600080fd5b5051155b1561298d57336000908152601260205260409020805460ff191660011790555b600160a060020a03821660009081526004602090815260408083203384529091529020546129c1908263ffffffff61302d16565b600160a060020a0383166000908152600460209081526040808320338085529083528184209490945560118252918290208490558151928352820183905280517f773870998542487d493dab21355d6bf368d08d39e927b7ec1eecd3171707075e9281900390910190a15050565b33600090815260066020526040812054821115612a4b57600080fd5b600160a060020a0383161515612a6057600080fd5b33600090815260066020526040902054612a80908363ffffffff61301616565b3360009081526006602052604080822092909255600160a060020a03851681522054612ab2908363ffffffff61302d16565b600160a060020a0384166000818152600660209081526040918290209390935580518581529051919233926000805160206132138339815191529281900390910190a350600192915050565b604080517f508493bc000000000000000000000000000000000000000000000000000000008152600160a060020a0380851660048301819052908416602483015291516000929163508493bc91604480830192602092919082900301818787803b158015612b6b57600080fd5b505af1158015612b7f573d6000803e3d6000fd5b505050506040513d6020811015612b9557600080fd5b50519392505050565b600154604080517faad5b4ae0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163aad5b4ae91600480830192602092919082900301818787803b1580156109da57600080fd5b600154604080517fbe550be40000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163be550be491600480830192602092919082900301818787803b1580156109da57600080fd5b600154600160a060020a031681565b600954604080517ff0c37a590000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163f0c37a5991600480830192602092919082900301818787803b1580156109da57600080fd5b60008054600160a060020a03163314612ce257600080fd5b612cec8383612afe565b600160a060020a038316600090815260066020526040902054909150612d18908263ffffffff61302d16565b600160a060020a0383166000818152600660209081526040918290209390935580518481529051919230926000805160206132138339815191529281900390910190a35050336000908152601260205260409020805460ff1916600117905550565b336000908152600860209081526040808320600160a060020a0386168452909152812054612dae908363ffffffff61302d16565b336000818152600860209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60008054600160a060020a03163314612e2b57600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b158015612b6b57600080fd5b600160a060020a03918216600090815260086020908152604080832093909416825291909152205490565b600054600160a060020a03163314612edd57600080fd5b600160a060020a038116600090815260116020908152604080832054600690925290912054612f119163ffffffff61302d16565b600160a060020a0382166000818152600660209081526040808320949094556011815290839020548351908152925191923092600080516020613213833981519152929181900390910190a350565b600954604080517fe1eca3270000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163e1eca32791600480830192602092919082900301818787803b1580156109da57600080fd5b600054600160a060020a03163314612fd657600080fd5b610b9e81613195565b612fe7612b9e565b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000808383111561302657600080fd5b5050900390565b60008282018381101561303f57600080fd5b9392505050565b600160a060020a031660009081526005602052604090205474010000000000000000000000000000000000000000900460ff1690565b600160a060020a031660009081526005602052604090206001015490565b600160a060020a039092166000818152600560205260408120805460018083019590955542600383018190556201518090960290950160028083019190915574ff00000000000000000000000000000000000000001973ffffffffffffffffffffffffffffffffffffffff1996871685171674010000000000000000000000000000000000000000179091558054938401815590527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054909216179055565b600160a060020a0381166000908152600560205260408120600201544281111561318a576001915061318f565b600091505b50919050565b600160a060020a03811615156131aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d01f7e94808b4cf074389050506cd19a9090847c642adffd59ac38dcdb351eb00029

Swarm Source

bzzr://d01f7e94808b4cf074389050506cd19a9090847c642adffd59ac38dcdb351eb0
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.