Contract Overview
Balance: 0 Ether
Transactions: 4 txns
 Latest 4 txns

TxHash Age From To Value [TxFee]
0x68df2553a6f5db588083ddf84c394c512b314dcfe5a503ba126197d7038e6e40207 days 6 hrs ago0xb61b053d779d9e0d8cdaec9eaf94e3c6a4dcdfe3  IN   0x5566a8df931ae1e58166d566f8753e627610f1e20 Ether0.0028607
0x34fcf24f02d068e91822a193d4d40fdef60a11a890057e06c946f8214d721819211 days 22 hrs ago0xb61b053d779d9e0d8cdaec9eaf94e3c6a4dcdfe3  IN   0x5566a8df931ae1e58166d566f8753e627610f1e20 Ether0.0027468
0x8922c48ab5f98690183b355abc7516948805a168ea6d8e038a5ee8d30c75b349215 days 5 hrs ago0xb61b053d779d9e0d8cdaec9eaf94e3c6a4dcdfe3  IN   0x5566a8df931ae1e58166d566f8753e627610f1e20 Ether0.0043607
0xbd03fdcaa1d66760e7fd58e9c490850f53847a585dcbcc13e39753bf444a28c0215 days 5 hrs ago0xb61b053d779d9e0d8cdaec9eaf94e3c6a4dcdfe3  IN    Contract Creation0 Ether0.201457
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: MedRecs
Compiler Text: v0.4.21+commit.dfe3193c
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.21;

// template used from ethereum.org
// modified by Jack Neil
// EHR Token, used by Health-Record blockchain contracts (including User-Managed Personal Health Record)

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws 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 a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


contract owned {
    address public owner;

    function owned() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) onlyOwner public {
        owner = newOwner;
    }
}

//interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; }
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, uint _recnum, string _publicData, string _privateData) external returns (bool success); }

contract TokenERC20 {
    // Public variables of the token
    string public name;
    string public symbol;
    uint8 public decimals = 18;
    // 18 decimals is the strongly suggested default, avoid changing it
    uint256 public totalSupply;

    // This creates an array with all balances
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
		//mapping (address => mapping (address => uint256)) public allowanceChronic;

    // This generates a public event on the blockchain that will notify clients
    event Transfer(address indexed from, address indexed to, uint256 value);

    // This notifies clients about the amount burnt
    event Burn(address indexed from, uint256 value);

    /**
     * Constructor function
     *
     * Initializes contract with initial supply tokens to the creator of the contract
     */
    function TokenERC20(
        uint256 initialSupply,
        string tokenName,
        string tokenSymbol
    ) public {
        totalSupply = initialSupply * 10 ** uint256(decimals);  // Update total supply with the decimal amount
        balanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokens	
				emit Transfer(0, msg.sender, totalSupply);					// lets the world know we transferred to tokens to contract creator
        name = tokenName;                                   // Set the name for display purposes
        symbol = tokenSymbol;                               // Set the symbol for display purposes
    }

    /**
     * Internal transfer, only can be called by this contract
     */
    function _transfer(address _from, address _to, uint _value) internal {
        // Prevent transfer to 0x0 address. Use burn() instead
        require(_to != 0x0);
        // Check if the sender has enough
        require(balanceOf[_from] >= _value);
        // Check for overflows
        require(balanceOf[_to] + _value > balanceOf[_to]);
        // Save this for an assertion in the future
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        // Subtract from the sender
        balanceOf[_from] -= _value;
        // Add the same to the recipient
        balanceOf[_to] += _value;
        emit Transfer(_from, _to, _value);
        // Asserts are used to use static analysis to find bugs in your code. They should never fail
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }

    /**
     * Transfer tokens
     *
     * Send `_value` tokens to `_to` from your account
     *
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
    function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender, _to, _value);
    }

    /**
     * Transfer tokens from other address
     *
     * Send `_value` tokens to `_to` in behalf of `_from`
     *
     * @param _from The address of the sender
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
			/*if(_value <= allowanceChronic[_from][msg.sender]){
				_transfer(_from, _to, _value);
				return true;
			}
			else{*/
				require(_value <= allowance[_from][msg.sender]);     // Check allowance
				allowance[_from][msg.sender] -= _value;
				_transfer(_from, _to, _value);
				return true;
			//}
    }

    /**
     * Set allowance for other address
     *
     * Allows `_spender` to spend no more than `_value` tokens in your behalf
     *
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     */
    function approve(address _spender, uint256 _value) public
        returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        return true;
    }
		
		/**
     * Set allowance for other address for repeated transactions. Other address can spend this much any time they want 
		 * BE CAREFUL! Only set this for trusted contracts
     *
     * Allows `_spender` to spend no more than `_value` tokens on your behalf on EACH transaction
     *
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     
    function approveChronic(address _spender, uint256 _value) public returns (bool success) {
        allowanceChronic[msg.sender][_spender] = _value;
        return true;
    }

		//checks to see how much a given spender can spend upon each request
		function getAllowanceChronic(address _spender) view public returns (address, uint256){
			return (msg.sender, allowanceChronic[msg.sender][_spender]);
		}		
		*/
		
		/**
		* Set allowance for other address (i.e. a service contract address) and notify
		*
		* Allows `_spender` (i.e. a service contract address)
		*     to spend no more than `_value` tokens on your behalf, and then ping the contract about it
		*
		* @param _spender The address of the authorized service contract which will spend your tokens
		* @param _value the max amount they can spend
		* param _extraData some extra information to send to the approved contract (recommended to send a json string) bytes _extraData
		*/
    function approveAndCall(address _spender, uint256 _value, uint _recnum, string _publicData, string _privateData) public returns (bool success) {
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
          //spender.receiveApproval(msg.sender, _value, address(this), _extraData);
					spender.receiveApproval(msg.sender, _value, _recnum, _publicData, _privateData);
          return true;
        }
    }

    /**
     * Destroy tokens
     *
     * Remove `_value` tokens from the system irreversibly
     *
     * @param _value the amount of money to burn
     */
    function burn(uint256 _value) public returns (bool success) {
        require(balanceOf[msg.sender] >= _value);   // Check if the sender has enough
        balanceOf[msg.sender] -= _value;            // Subtract from the sender
        totalSupply -= _value;                      // Updates totalSupply
        emit Burn(msg.sender, _value);
        return true;
    }

    /**
     * Destroy tokens from other account
     *
     * Remove `_value` tokens from the system irreversibly on behalf of `_from`.
     *
     * @param _from the address of the sender
     * @param _value the amount of money to burn
     */
    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        require(balanceOf[_from] >= _value);                // Check if the targeted balance is enough
        require(_value <= allowance[_from][msg.sender]);    // Check allowance
        balanceOf[_from] -= _value;                         // Subtract from the targeted balance
        allowance[_from][msg.sender] -= _value;             // Subtract from the sender's allowance
        totalSupply -= _value;                              // Update totalSupply
        emit Burn(_from, _value);
        return true;
    }
}

contract EHRToken is owned, TokenERC20 {

    uint256 public sellPrice = 50000; // # per ETH (should be a smaller integer than buyPrice)
    uint256 public buyPrice = 5000; // # per ETH

    mapping (address => bool) public frozenAccount;

    /* This generates a public event on the blockchain that will notify clients */
    event FrozenFunds(address target, bool frozen);

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function EHRToken(
        uint256 initialSupply,
        string tokenName,
        string tokenSymbol
    ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {}

    /* Internal transfer, only can be called by this contract */
    function _transfer(address _from, address _to, uint _value) internal {
        require (_to != 0x0);                               // Prevent transfer to 0x0 address. Use burn() instead
        require (balanceOf[_from] >= _value);               // Check if the sender has enough
        require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows
        require(!frozenAccount[_from]);                     // Check if sender is frozen
        require(!frozenAccount[_to]);                       // Check if recipient is frozen
        balanceOf[_from] -= _value;                         // Subtract from the sender
        balanceOf[_to] += _value;                           // Add the same to the recipient
        emit Transfer(_from, _to, _value);
    }

		function getBalance(address addr)  public constant returns (uint256 balance){
			return balanceOf[addr];
		}
		
    /// @notice Create `mintedAmount` tokens and send it to `target`
    /// @param target Address to receive the tokens
    /// @param mintedAmount the amount of tokens it will receive
    function mintToken(address target, uint256 mintedAmount) onlyOwner public {
        balanceOf[target] += mintedAmount;
        totalSupply += mintedAmount;
        emit Transfer(0, this, mintedAmount);
        emit Transfer(this, target, mintedAmount);
    }

    /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens
    /// @param target Address to be frozen
    /// @param freeze either to freeze it or not
    function freezeAccount(address target, bool freeze) onlyOwner public {
        frozenAccount[target] = freeze;
        emit FrozenFunds(target, freeze);
    }

    /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth
    /// @param newSellPrice Price the users can sell to the contract
    /// @param newBuyPrice Price users can buy from the contract
    function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public {
        sellPrice = newSellPrice;
        buyPrice = newBuyPrice;
    }

    /// @notice Buy tokens from contract by sending ether
    function buy() payable public {
        uint amount = msg.value * buyPrice;               // calculates the amount
        _transfer(owner, msg.sender, amount);              // makes the transfers // was this
    }

    /// @notice Sell `amount` tokens to contract
    /// @param amount amount of tokens to be sold
    function sell(uint256 amount) public {
        require(owner.balance >= amount / sellPrice);      // checks if the contract has enough ether to buy
        _transfer(msg.sender, owner, amount);              // makes the transfers
        msg.sender.transfer(amount / sellPrice);          // sends ether to the seller. It's important to do this last to avoid recursion attacks
    }
		
}

//import './owned.sol';

interface tokenContract { 
	function balanceOf(address _addr) external returns (uint256 balance);
	function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); 
}

contract MedRecs is owned {
	string public author;
	string public authorEmail;
	string public NOTICE;
	address public tokenContractAddress; //IMPORTANT: after deploying this contract, owner must call the update function to set this 
	uint256 public tokenUpdateCost; //the token cost per transaction (in wei)
	uint256 public tokenMinimumBalance; //the minimum token balance we require the user to keep (in wei)
	
	struct Record {
		address recordOwner;
		uint256 lastUpdate;
		string publicData; //json formatted NON-encrypted, public data
		string privateData; //ENCRYPTED json-formatted private data (only record owner has password)
		bool isValid;
	}
	
	mapping (uint => Record) public records;
	uint[] public recordMRNs;
	
	event LogUpdate(address recordOwner, string publicData, string privateData);
	event LogBalanceOK(address addr, bool isOK);
	
	function MedRecs() public {
		owner = msg.sender;
		author = "Jack N";
		authorEmail = "jackATjackmdDOTcom";
		NOTICE = "**DEMONSTRATION PURPOSES ONLY ... DO NOT SEND PRIVATE INFORMATION TO THIS CONTRACT**";
		tokenContractAddress = 0x0;
		tokenUpdateCost = 1*(10**18); //in WEI
		tokenMinimumBalance = 2*(10**18); //10**18; //in WEI
	}
	function changeTokenContract(address _newAddress) onlyOwner public {
		require(_newAddress != 0x0);
		tokenContractAddress = _newAddress;
	}
	
	//_newCost in WEI
	function changeUpdateCost(uint256 _newCost) onlyOwner public {
		require(_newCost >= 0);
		tokenUpdateCost = _newCost;
	}
	
	function changeMinimumBalance(uint256 _newMinimumBalance) onlyOwner public{
		require(_newMinimumBalance >= 0);
		tokenMinimumBalance = _newMinimumBalance;	
	}
	
	function updateRecord(address _sentBy, uint _mrn, string _publicData, string _privateData) internal returns (bool success){ 
		Record storage record = records[_mrn];
		//EHRToken token = EHRToken(tokenContract);
		require(!record.isValid || record.recordOwner == _sentBy || _sentBy == owner);
		//token.transferFrom(msg.sender, owner, 1);
		//require(tokenContract.call(bytes4(keccak256("transferFrom(address, address, uint256)")), msg.sender, owner, 1));
		if(!record.isValid) {record.recordOwner = _sentBy; }//stores the address of the last eth address that updated this record UNLESS we are performing maintenance
		record.publicData = _publicData;
		record.privateData = _privateData;
		record.lastUpdate = block.timestamp;
		record.isValid = true;
		//delete recordMRNs[_mrn];
		recordMRNs.push(_mrn) -1;	
		return true;
	}	
	
	//allows the owner of the contract to change a record's owner
	function changeRecordOwner(uint _mrn, address _newOwner) onlyOwner public { 
		require(_mrn >= 0);
		require(_newOwner != 0x0);
		Record storage record = records[_mrn];
		record.recordOwner = _newOwner;
	}
	
	function deleteRecord(uint _mrn) public {
		Record storage record = records[_mrn];
		require(record.recordOwner == msg.sender || msg.sender == owner);
		delete records[_mrn];
		delete recordMRNs[_mrn];
	}
	
	function getMRNs() view public returns (uint[]) {
		return recordMRNs;
	}
	
	function getRecord(uint _mrn) view public returns (address, string, string, uint256) { 
		return (records[_mrn].recordOwner, records[_mrn].publicData, records[_mrn].privateData, records[_mrn].lastUpdate); 
	}
	
	function countRecords() view public returns (uint) {
		return recordMRNs.length;
	}
	
	/* 
	* _value is in WEI
	* allows for us to process token transfers then process an internal function that required payment prior to processing
	*/
	function receiveApproval(address _spender, uint256 _value, uint _recnum, string _publicData, string _privateData) public returns (bool success){
		//require(_tokenContract == tokenContract);
		require(_value >= tokenUpdateCost); //makes sure they are transferring enough TOKEN to cover the update cost
		tokenContract tc = tokenContract(tokenContractAddress);
		//require(tokenContract.call(bytes4(keccak256("transferFrom(address, address, uint256)")), _spender, owner, _value));
		//tokenContract = EHRToken(tokenContract);
		uint256 tokenBalance = tc.balanceOf(_spender);
		require((tokenBalance - tokenMinimumBalance - tokenUpdateCost) >= 0);
		//else{ emit LogBalanceOK(_spender, true); }
		require(tc.transferFrom(_spender, owner, _value));
		require(updateRecord(_spender, _recnum, _publicData, _privateData));
		return true;
	}
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_mrn","type":"uint256"}],"name":"getRecord","outputs":[{"name":"","type":"address"},{"name":"","type":"string"},{"name":"","type":"string"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_mrn","type":"uint256"}],"name":"deleteRecord","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_mrn","type":"uint256"},{"name":"_newOwner","type":"address"}],"name":"changeRecordOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenMinimumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMRNs","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"records","outputs":[{"name":"recordOwner","type":"address"},{"name":"lastUpdate","type":"uint256"},{"name":"publicData","type":"string"},{"name":"privateData","type":"string"},{"name":"isValid","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NOTICE","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenUpdateCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAddress","type":"address"}],"name":"changeTokenContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newMinimumBalance","type":"uint256"}],"name":"changeMinimumBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContractAddress","outputs":[{"name":"","type":"address"}],"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":"author","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authorEmail","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCost","type":"uint256"}],"name":"changeUpdateCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_recnum","type":"uint256"},{"name":"_publicData","type":"string"},{"name":"_privateData","type":"string"}],"name":"receiveApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"countRecords","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"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"recordMRNs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recordOwner","type":"address"},{"indexed":false,"name":"publicData","type":"string"},{"indexed":false,"name":"privateData","type":"string"}],"name":"LogUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"isOK","type":"bool"}],"name":"LogBalanceOK","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040805190810160405280600681526020017f4a61636b204e000000000000000000000000000000000000000000000000000081525060019080519060200190620000dd9291906200022d565b506040805190810160405280601281526020017f6a61636b41546a61636b6d64444f54636f6d0000000000000000000000000000815250600290805190602001906200012b9291906200022d565b50608060405190810160405280605481526020017f2a2a44454d4f4e5354524154494f4e20505552504f534553204f4e4c59202e2e81526020017f2e20444f204e4f542053454e44205052495641544520494e464f524d4154494f81526020017f4e20544f205448495320434f4e54524143542a2a00000000000000000000000081525060039080519060200190620001c69291906200022d565b506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600581905550671bc16d674ec80000600681905550620002dc565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027057805160ff1916838001178555620002a1565b82800160010185558215620002a1579182015b82811115620002a057825182559160200191906001019062000283565b5b509050620002b09190620002b4565b5090565b620002d991905b80821115620002d5576000816000905550600101620002bb565b5090565b90565b61196380620002ec6000396000f300606060405260043610610107576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303e9e6091461010c578063061f98111461024e5780630ef457b91461027157806311e36c8c146102b357806327b3a185146102dc57806334461067146103465780634bfee686146104935780634d414a2014610521578063523aee691461054a578063812da3971461058357806382edaf94146105a65780638da5cb5b146105fb578063a6c3e6b914610650578063aea36224146106de578063aed68d241461076c578063e31ded471461078f578063e4673a4e14610878578063f2fde38b146108a1578063fc252615146108da575b600080fd5b341561011757600080fd5b61012d6004808035906020019091905050610911565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156101a957808201518184015260208101905061018e565b50505050905090810190601f1680156101d65780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561020f5780820151818401526020810190506101f4565b50505050905090810190601f16801561023c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b341561025957600080fd5b61026f6004808035906020019091905050610ae6565b005b341561027c57600080fd5b6102b1600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c4d565b005b34156102be57600080fd5b6102c6610d3d565b6040518082815260200191505060405180910390f35b34156102e757600080fd5b6102ef610d43565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610332578082015181840152602081019050610317565b505050509050019250505060405180910390f35b341561035157600080fd5b6103676004808035906020019091905050610da1565b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019080838360005b838110156103ed5780820151818401526020810190506103d2565b50505050905090810190601f16801561041a5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610453578082015181840152602081019050610438565b50505050905090810190601f1680156104805780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b341561049e57600080fd5b6104a6610f34565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104e65780820151818401526020810190506104cb565b50505050905090810190601f1680156105135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561052c57600080fd5b610534610fd2565b6040518082815260200191505060405180910390f35b341561055557600080fd5b610581600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610fd8565b005b341561058e57600080fd5b6105a4600480803590602001909190505061109d565b005b34156105b157600080fd5b6105b9611112565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561060657600080fd5b61060e611138565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561065b57600080fd5b61066361115d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106a3578082015181840152602081019050610688565b50505050905090810190601f1680156106d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156106e957600080fd5b6106f16111fb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610731578082015181840152602081019050610716565b50505050905090810190601f16801561075e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561077757600080fd5b61078d6004808035906020019091905050611299565b005b341561079a57600080fd5b61085e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061130e565b604051808215151515815260200191505060405180910390f35b341561088357600080fd5b61088b611553565b6040518082815260200191505060405180910390f35b34156108ac57600080fd5b6108d8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611560565b005b34156108e557600080fd5b6108fb60048080359060200190919050506115fe565b6040518082815260200191505060405180910390f35b600061091b6117f6565b6109236117f6565b60006007600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660076000878152602001908152602001600020600201600760008881526020019081526020016000206003016007600089815260200190815260200160002060010154828054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a345780601f10610a0957610100808354040283529160200191610a34565b820191906000526020600020905b815481529060010190602001808311610a1757829003601f168201915b50505050509250818054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b5050505050915093509350935093509193509193565b60006007600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610ba757506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610bb257600080fd5b60076000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000610c05919061180a565b600382016000610c15919061180a565b6004820160006101000a81549060ff02191690555050600882815481101515610c3a57fe5b9060005260206000209001600090555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610caa57600080fd5b60008310151515610cba57600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515610ce057600080fd5b600760008481526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60065481565b610d4b611852565b6008805480602002602001604051908101604052809291908181526020018280548015610d9757602002820191906000526020600020905b815481526020019060010190808311610d83575b5050505050905090565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e795780601f10610e4e57610100808354040283529160200191610e79565b820191906000526020600020905b815481529060010190602001808311610e5c57829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f175780601f10610eec57610100808354040283529160200191610f17565b820191906000526020600020905b815481529060010190602001808311610efa57829003601f168201915b5050505050908060040160009054906101000a900460ff16905085565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fca5780601f10610f9f57610100808354040283529160200191610fca565b820191906000526020600020905b815481529060010190602001808311610fad57829003601f168201915b505050505081565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561103357600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415151561105957600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110f857600080fd5b6000811015151561110857600080fd5b8060068190555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111f35780601f106111c8576101008083540402835291602001916111f3565b820191906000526020600020905b8154815290600101906020018083116111d657829003601f168201915b505050505081565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112915780601f1061126657610100808354040283529160200191611291565b820191906000526020600020905b81548152906001019060200180831161127457829003601f168201915b505050505081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112f457600080fd5b6000811015151561130457600080fd5b8060058190555050565b6000806000600554871015151561132457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156113e357600080fd5b5af115156113f057600080fd5b50505060405180519050905060006005546006548303031015151561141457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd896000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561150b57600080fd5b5af1151561151857600080fd5b50505060405180519050151561152d57600080fd5b61153988878787611622565b151561154457600080fd5b60019250505095945050505050565b6000600880549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115bb57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60088181548110151561160d57fe5b90600052602060002090016000915090505481565b6000806007600086815260200190815260200160002090508060040160009054906101000a900460ff1615806116a757508573ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806116fe57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b151561170957600080fd5b8060040160009054906101000a900460ff16151561176557858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8381600201908051906020019061177d929190611866565b5082816003019080519060200190611796929190611866565b5042816001018190555060018160040160006101000a81548160ff0219169083151502179055506001600880548060010182816117d391906118e6565b916000526020600020900160008890919091505550506001915050949350505050565b602060405190810160405280600081525090565b50805460018160011615610100020316600290046000825580601f10611830575061184f565b601f01602090049060005260206000209081019061184e9190611912565b5b50565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118a757805160ff19168380011785556118d5565b828001600101855582156118d5579182015b828111156118d45782518255916020019190600101906118b9565b5b5090506118e29190611912565b5090565b81548183558181151161190d5781836000526020600020918201910161190c9190611912565b5b505050565b61193491905b80821115611930576000816000905550600101611918565b5090565b905600a165627a7a72305820e3e5bf3d83210a3f11358cf3f7d91412984763770a029389cf67ca5301c392980029

   Swarm Source:
bzzr://e3e5bf3d83210a3f11358cf3f7d91412984763770a029389cf67ca5301c39298

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward