Latest 25 transactions from a total of 56418 transactions

TxHash Age From To Value [TxFee]
0x748f811ac11e0d40d9855db75a11152d411cc1b937f1a3a2df9f77eccdc8e08823 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001144848
0xc073ae35e62f648c5b5467f6ff2095d248b8a25f47f5e5bab0a27f95ee638d7323 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.002169276
0x54c8ef9ec2e59b8b4c264ea8c3ffe7f5faff058ad0174be175ec6499a1018a5d23 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x6ce89bbc9c9221c9ac7ec3ce26faf2287b8aa3f7a1d12a35c8a65e8e7b12461c23 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x1b022d85d15d0517b70eea0ded227351ccfe840b6519c4efbdb0824431fb779823 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x9bc952c25cd9d9d22ffb32da743f6dbd488f275acdfbced793ced6d045ab622b23 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.002169276
0x92a6d55d2ce2466ca2e9888ed150969d3e0d690a4fc9213fd6f03f3271ce562223 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.000447
0x99759f4ca708f05897661f93717fe1acd16abe6c0ad6fe7d3e29b6624137f79f23 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x2fb6f449b0bc951c945a050b971bb7a395fa54442cac9179f1ff53555cc8409723 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x84aa3d663633cd7073fb953e9e948914a00a546ecdace9ab9e3e9d9f03d5f70523 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.002168508
0xa916e98c4927a1fd8248ec529181e469bd17deeb45937e3f819a05d17bd2f50d23 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0xabf5d0aea43cb8e22962f4a3d491c3574260b48f5ba5af1be8ee939a6345776423 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x5075181807f41903d2723dac5e1f03d92aa1c18c4dd58ceb2d2335b345332f0623 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x834218da4fa553f049f7ee14ff7926a8912f8b57997b2d1e32510f71984b370923 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.002168508
0x97c4cd2433f9fe5c215c3dcb134525d010cc5837e3ebfd45aea071fd1eb1b5a223 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x0cf4eb9bbb51574ec30747cdde88832f850bb2430f75e58221c3e081596dda6523 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0xbdcc319e95cbe444b5d88231173bc49f81a19f6e9e597ac33a147b15f68d786423 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001384524
0xf62e529e36f59ebba19860795fc31ac48a3c9c8b989d69d291b57b57ffcbeb8023 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0xd0c0c53bee1fa983bbeebb684e0cf18f87a676146ebec818f378a56e5ac21e9d23 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001384524
0xd27ea0c4f69c87ffa734fed4f1c2f604d7b58c459dc77ef8308ff808ba1601f123 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.002169276
0xea0143d6204e60e9257272740eb7e0abbe948b65c0605c54e6f098e9d691b02523 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0xfd1dd8cbbc5ef4f3d098879a8481e2017b5e6c1824de7fcc8b124f38bd26c35e23 days 1 hr ago0x1d76b2cdf8964d1f9bc5d22625a00586839dacc4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x5cd31b06482dc6867c2cb214115d028cc67c70b0548f39c34af18dc749a541db23 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001385292
0x1568fdf018a116fa8efff37eca026c87357b6757847086eba1fad45a657021c323 days 1 hr ago0xc04f887c60d3697464b15c4ee65c2b93e8636ca4  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.001144848
0xe7a1637ed8cb83284d6d3411b12c4fe7a1562b570aeead200fdb9d862f2bdb1623 days 1 hr ago0x3cd9f8b8862c6f2f0c04d0ff3adacd69bd50d44e  IN   0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0 Ether0.002169276
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x748f811ac11e0d40d9855db75a11152d411cc1b937f1a3a2df9f77eccdc8e088491349123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xc073ae35e62f648c5b5467f6ff2095d248b8a25f47f5e5bab0a27f95ee638d73491349123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x54c8ef9ec2e59b8b4c264ea8c3ffe7f5faff058ad0174be175ec6499a1018a5d491348223 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x6ce89bbc9c9221c9ac7ec3ce26faf2287b8aa3f7a1d12a35c8a65e8e7b12461c491348223 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x1b022d85d15d0517b70eea0ded227351ccfe840b6519c4efbdb0824431fb7798491348223 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x9bc952c25cd9d9d22ffb32da743f6dbd488f275acdfbced793ced6d045ab622b491347223 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x92a6d55d2ce2466ca2e9888ed150969d3e0d690a4fc9213fd6f03f3271ce5622491346723 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x99759f4ca708f05897661f93717fe1acd16abe6c0ad6fe7d3e29b6624137f79f491346323 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x2fb6f449b0bc951c945a050b971bb7a395fa54442cac9179f1ff53555cc84097491346323 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x84aa3d663633cd7073fb953e9e948914a00a546ecdace9ab9e3e9d9f03d5f705491345123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xa916e98c4927a1fd8248ec529181e469bd17deeb45937e3f819a05d17bd2f50d491344123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xabf5d0aea43cb8e22962f4a3d491c3574260b48f5ba5af1be8ee939a63457764491344123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x5075181807f41903d2723dac5e1f03d92aa1c18c4dd58ceb2d2335b345332f06491344123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x834218da4fa553f049f7ee14ff7926a8912f8b57997b2d1e32510f71984b3709491343123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x97c4cd2433f9fe5c215c3dcb134525d010cc5837e3ebfd45aea071fd1eb1b5a2491342323 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x0cf4eb9bbb51574ec30747cdde88832f850bb2430f75e58221c3e081596dda65491342323 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xbdcc319e95cbe444b5d88231173bc49f81a19f6e9e597ac33a147b15f68d7864491340123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xf62e529e36f59ebba19860795fc31ac48a3c9c8b989d69d291b57b57ffcbeb80491340123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xd0c0c53bee1fa983bbeebb684e0cf18f87a676146ebec818f378a56e5ac21e9d491340123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xd27ea0c4f69c87ffa734fed4f1c2f604d7b58c459dc77ef8308ff808ba1601f1491339123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xea0143d6204e60e9257272740eb7e0abbe948b65c0605c54e6f098e9d691b025491338123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xfd1dd8cbbc5ef4f3d098879a8481e2017b5e6c1824de7fcc8b124f38bd26c35e491338123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x5cd31b06482dc6867c2cb214115d028cc67c70b0548f39c34af18dc749a541db491338123 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0x1568fdf018a116fa8efff37eca026c87357b6757847086eba1fad45a657021c3491337223 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
0xe7a1637ed8cb83284d6d3411b12c4fe7a1562b570aeead200fdb9d862f2bdb16491337223 days 1 hr ago0x1f09d05c460ee0a96a4b05a5923e7e248dc1421b0x6a0da963533662c2ed687e67237681f765306ec90 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0xe7615ad93bca725eff6350704112a64a3c95d783
Contract Name: Chain
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.24;

// File: zeppelin-solidity/contracts/ReentrancyGuard.sol

/**
 * @title Helps contracts guard against reentrancy attacks.
 * @author Remco Bloemen <[email protected]π.com>, Eenae <[email protected]>
 * @dev If you mark a function `nonReentrant`, you should also
 * mark it `external`.
 */
contract ReentrancyGuard {

  /// @dev Constant for unlocked guard state - non-zero to prevent extra gas costs.
  /// See: https://github.com/OpenZeppelin/openzeppelin-solidity/issues/1056
  uint private constant REENTRANCY_GUARD_FREE = 1;

  /// @dev Constant for locked guard state
  uint private constant REENTRANCY_GUARD_LOCKED = 2;

  /**
   * @dev We use a single lock for the whole contract.
   */
  uint private reentrancyLock = REENTRANCY_GUARD_FREE;

  /**
   * @dev Prevents a contract from calling itself, directly or indirectly.
   * If you mark a function `nonReentrant`, you should also
   * mark it `external`. Calling one `nonReentrant` function from
   * another is not supported. Instead, you can implement a
   * `private` function doing the actual work, and an `external`
   * wrapper marked as `nonReentrant`.
   */
  modifier nonReentrant() {
    require(reentrancyLock == REENTRANCY_GUARD_FREE);
    reentrancyLock = REENTRANCY_GUARD_LOCKED;
    _;
    reentrancyLock = REENTRANCY_GUARD_FREE;
  }

}

// File: zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
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.
   * @notice 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;
  }
}

// File: token-sale-contracts/contracts/Token.sol

// Abstract contract for the full ERC 20 Token standard
// https://github.com/ethereum/EIPs/issues/20

contract Token {
    /* This is a slight change to the ERC20 base standard.
    function totalSupply() constant returns (uint256 supply);
    is replaced with:
    uint256 public totalSupply;
    This automatically creates a getter function for the totalSupply.
    This is moved to the base contract since public getter functions are not
    currently recognised as an implementation of the matching abstract
    function by the compiler.
    */
    /// total amount of tokens
    uint256 public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) constant returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// File: token-sale-contracts/contracts/StandardToken.sol

/*
You should inherit from StandardToken or, for a token like you would want to
deploy in something like Mist, see HumanStandardToken.sol.
(This implements ONLY the standard functions and NOTHING else.
If you deploy this, you won't have anything useful.)

Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20
.*/


contract StandardToken is Token {

    function transfer(address _to, uint256 _value) returns (bool success) {
        //Default assumes totalSupply can't be over max (2^256 - 1).
        //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
        //Replace the if with this one instead.
        //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
        if (balances[msg.sender] >= _value && _value > 0) {
            balances[msg.sender] -= _value;
            balances[_to] += _value;
            Transfer(msg.sender, _to, _value);
            return true;
        } else { return false; }
    }

    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        //same as above. Replace this line with the following if you want to protect against wrapping uints.
        //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
        if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
            balances[_to] += _value;
            balances[_from] -= _value;
            allowed[_from][msg.sender] -= _value;
            Transfer(_from, _to, _value);
            return true;
        } else { return false; }
    }

    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
}

// File: token-sale-contracts/contracts/HumanStandardToken.sol

/*
This Token Contract implements the standard token functionality (https://github.com/ethereum/EIPs/issues/20) as well as the following OPTIONAL extras intended for use by humans.

In other words. This is intended for deployment in something like a Token Factory or Mist wallet, and then used by humans.
Imagine coins, currencies, shares, voting weight, etc.
Machine-based, rapid creation of many tokens would not necessarily need these extra features or will be minted in other manners.

1) Initial Finite Supply (upon creation one specifies how much is minted).
2) In the absence of a token registry: Optional Decimal, Symbol & Name.
3) Optional approveAndCall() functionality to notify a contract if an approval() has occurred.

.*/

contract HumanStandardToken is StandardToken {

    function () {
        //if ether is sent to this address, send it back.
        throw;
    }

    /* Public variables of the token */

    /*
    NOTE:
    The following variables are OPTIONAL vanities. One does not have to include them.
    They allow one to customise the token contract & in no way influences the core functionality.
    Some wallets/interfaces might not even bother to look at this information.
    */
    string public name;                   //fancy name: eg Simon Bucks
    uint8 public decimals;                //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
    string public symbol;                 //An identifier: eg SBX
    string public version = 'H0.1';       //human 0.1 standard. Just an arbitrary versioning scheme.

    function HumanStandardToken(
        uint256 _initialAmount,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol
        ) {
        balances[msg.sender] = _initialAmount;               // Give the creator all initial tokens
        totalSupply = _initialAmount;                        // Update total supply
        name = _tokenName;                                   // Set the name for display purposes
        decimals = _decimalUnits;                            // Amount of decimals for display purposes
        symbol = _tokenSymbol;                               // Set the symbol for display purposes
    }

    /* Approves and then calls the receiving contract */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);

        //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this.
        //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)
        //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead.
        if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; }
        return true;
    }
}

// File: digivice/contracts/VerifierRegistry.sol

contract VerifierRegistry is Ownable {
  event LogVerifierRegistered(
    address id,
    string location,
    bool created,
    uint256 balance,
    uint256 shard
  );

  event LogVerifierUpdated(
    address id,
    string location,
    bool created,
    uint256 balance,
    uint256 shard
  );

  event LogBalancePerShard(uint256 shard, uint256 balance);

  struct Verifier {
    address id;
    string location;
    bool created;
    uint256 balance;
    uint256 shard;
  }

  mapping(address => Verifier) public verifiers;

  /// @dev shard => balance
  mapping(uint256 => uint256) public balancesPerShard;

  address[] public addresses;
  address public tokenAddress;
  uint256 public verifiersPerShard;

  constructor(address _tokenAddress, uint256 _verifiersPerShard)
  public {
    tokenAddress = _tokenAddress;
    verifiersPerShard = _verifiersPerShard;
  }

  function create(string _location) public {
    Verifier storage verifier = verifiers[msg.sender];

    require(!verifier.created, "verifier already exists");

    verifier.id = msg.sender;
    verifier.location = _location;
    verifier.created = true;
    verifier.shard = uint256(addresses.length) / verifiersPerShard;

    addresses.push(verifier.id);

    emit LogVerifierRegistered(
      verifier.id,
      verifier.location,
      verifier.created,
      verifier.balance,
      verifier.shard
    );
  }

  function getNumberOfVerifiers() public view returns (uint) {
    return addresses.length;
  }

  function receiveApproval(address _from, uint256 _value, address _token, bytes _data) public returns (bool success) {
    Token token = Token(tokenAddress);

    uint256 allowance = token.allowance(_from, this);

    require(allowance > 0, "nothing to approve");

    require(token.transferFrom(_from, this, allowance), "transferFrom failed");

    verifiers[_from].balance += allowance;

    uint256 shard = verifiers[_from].shard;
    uint256 shardBalance = balancesPerShard[shard] + allowance;
    balancesPerShard[shard] = shardBalance;

    emit LogBalancePerShard(shard, shardBalance);

    return true;
  }

  function update(string _location) public {
    Verifier storage verifier = verifiers[msg.sender];

    require(verifier.created, "verifier do not exists");

    verifier.location = _location;

    emit LogVerifierUpdated(
      verifier.id,
      verifier.location,
      verifier.created,
      verifier.balance,
      verifier.shard
    );
  }

  function withdraw(uint256 _value) public returns (bool) {
    Verifier storage verifier = verifiers[msg.sender];

    require(_value > 0 && verifier.balance >= _value, "nothing to withdraw");

    verifier.balance -= _value;

    uint256 shard = verifier.shard;
    uint256 shardBalance = balancesPerShard[shard] - _value;
    balancesPerShard[shard] = shardBalance;

    emit LogBalancePerShard(shard, shardBalance);

    Token token = Token(tokenAddress);

    require(token.transfer(msg.sender, _value), "transfer failed");

    return true;
  }

  function updateTokenAddress(address _newTokenAddress) public onlyOwner {
    require(_newTokenAddress != address(0), "empty token address");

    tokenAddress = _newTokenAddress;
  }

  function updateVerifiersPerShard(uint256 _newVerifiersPerShard) public onlyOwner {
    require(_newVerifiersPerShard > 0, "_newVerifiersPerShard is empty");

    verifiersPerShard = _newVerifiersPerShard;
  }
}

// File: zeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @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 c) {
    // Gas optimization: this is cheaper than asserting '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;
    }

    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 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}

// File: contracts/ChainConfig.sol

/// @title Andromeda chain election configuration
/// @dev configuration methods for Chain contract
///      `proposeDuration` and `revealDuration` are durations in blocks (not timestamp).
contract ChainConfig is Ownable {

  using SafeMath for uint256;

  uint8 public blocksPerPhase;

  /// @dev address of `VerifierRegistry.sol`
  address public registryAddress;

  /// @dev required percent of all tokens for value for election tobe valid
  uint8 public minimumStakingTokenPercentage;

  modifier whenProposePhase() {
    require(getCurrentElectionCycleBlock() < blocksPerPhase, "we are not in propose phase");
    _;
  }
  modifier whenRevealPhase() {
    require(getCurrentElectionCycleBlock() >= blocksPerPhase, "we are not in reveal phase");
    _;
  }

  event LogChainConfig(uint8 blocksPerPhase, uint8 requirePercentOfTokens);

  event LogUpdateRegistryAddress(address indexed newRegistryAddress);

  constructor (address _registryAddress, uint8 _blocksPerPhase, uint8 _minimumStakingTokenPercentage)
  public {

    require(_blocksPerPhase > 0, "_blocksPerPhase can't be empty");
    blocksPerPhase = _blocksPerPhase;

    require(_minimumStakingTokenPercentage > 0, "_minimumStakingTokenPercentage can't be empty");
    require(_minimumStakingTokenPercentage <= 100, "_minimumStakingTokenPercentage can't be over 100%");
    minimumStakingTokenPercentage = _minimumStakingTokenPercentage;

    emit LogChainConfig(_blocksPerPhase, _minimumStakingTokenPercentage);


    require(_registryAddress != address(0), "registry address is empty");
    registryAddress = _registryAddress;

    emit LogUpdateRegistryAddress(_registryAddress);
  }

  function updateRegistryAddress(address _registryAddress)
  public
  onlyOwner
  returns (bool) {
    require(_registryAddress != address(0), "_registryAddress can't be empty");
    registryAddress = _registryAddress;
    emit LogUpdateRegistryAddress(_registryAddress);
    return true;
  }


  /// @return current block number with reference to whole cycle,
  ///         returned value will be between [0..C), where C is sum of all phases durations
  function getCurrentElectionCycleBlock()
  public
  view
  returns (uint256) {
    return block.number % (uint256(blocksPerPhase) * 2);
  }

  /// @return first block number (blockchain block) of current cycle
  function getFirstCycleBlock()
  public
  view
  returns (uint256) {
    return block.number.sub(getCurrentElectionCycleBlock());
  }

}

// File: contracts/Chain.sol

/// @title Andromeda chain election contract
/// @dev https://lucidity.slab.com/posts/andromeda-election-mechanism-e9a79c2a
contract Chain is ChainConfig, ReentrancyGuard {

  event LogPropose(address indexed sender, uint256 blockHeight, bytes32 blindedProposal, uint256 shard, uint256 balance);

  event LogReveal(address indexed sender, uint256 blockHeight, bytes32 proposal);

  event LogUpdateCounters(
    address indexed sender,
    uint256 blockHeight,
    uint256 shard,
    bytes32 proposal,
    uint256 counts,
    uint256 balance,
    bool newWinner,
    uint256 totalTokenBalanceForShard
  );


  /// @dev this is our structure for holding getBlockVoter/proposals
  ///      each vote will be deleted after reveal
  struct Voter {
    bytes32 blindedProposal;
    uint256 shard;
    bytes32 proposal;
    uint256 balance;
  }

  /// @dev structure of block that is created for each election
  struct Block {
    /// @dev shard => root of merkle tree (the winner)
    mapping (uint256 => bytes32) roots;
    mapping (bytes32 => bool) uniqueBlindedProposals;
    mapping (address => Voter) voters;

    /// @dev shard => max votes
    mapping (uint256 => uint256) maxsVotes;

    // shard => proposal => counts
    // Im using mapping, because its less gas consuming that array,
    // and also it is much easier to work with mapping than with array
    // unfortunately we can't be able to delete this data to release gas, why?
    // because to do this, we need to save all the keys and then run loop for all keys... that may cause OOG
    // also storing keys is more gas consuming so... I made decision to stay with mapping and never delete history
    mapping (uint256 => mapping(bytes32 => uint256)) counts;

    /// @dev shard => total amount of tokens
    mapping (uint256 => uint256) balancesPerShard;

    address[] verifierAddresses;
  }

  /// @dev blockHeight => Block - results of each elections will be saved here: one block (array element) per election
  mapping (uint256 => Block) blocks;

  constructor (
    address _registryAddress,
    uint8 _blocksPerPhase,
    uint8 _minimumStakingTokenPercentage
  )
  ChainConfig(_registryAddress, _blocksPerPhase, _minimumStakingTokenPercentage)
  public {

  }

  /// @dev Each operator / verifier submits an encrypted proposal, where each proposal
  ///      is a unique (per cycle) to avoid propsal peeking. When we start proposing,
  ///      we need one of the following:
  ///      1. a clear state (counters must be cleared)
  ///      2. OR, if nobody revealed in previous cycle, we continue previous state
  ///         with all previous getBlockVoter/proposals
  /// @param _blindedProposal this is hash of the proposal + secret
  function propose(bytes32 _blindedProposal)
  external
  whenProposePhase
  // we have external call in `_getVerifierInfo` to `verifierRegistry`,
  // so `nonReentrant` can be additional safety feature here
  nonReentrant
  returns (bool) {

    uint256 blockHeight = getBlockHeight();

    require(_blindedProposal != bytes32(0), "_blindedProposal is empty");
    require(!blocks[blockHeight].uniqueBlindedProposals[_blindedProposal], "blindedProposal not unique");

    bool created;
    uint256 balance;
    uint256 shard;
    (created, balance, shard) = _getVerifierInfo(msg.sender);
    require(created, "verifier is not in the registry");
    require(balance > 0, "verifier has no right to propose");


    Voter storage voter = blocks[blockHeight].voters[msg.sender];
    require(voter.blindedProposal == bytes32(0), "verifier already proposed in this round");

    // now we can save proposal

    blocks[blockHeight].uniqueBlindedProposals[_blindedProposal] = true;

    voter.blindedProposal = _blindedProposal;
    voter.shard = shard;
    voter.balance = balance;

    emit LogPropose(msg.sender, blockHeight, _blindedProposal, shard, balance);

    return true;
  }

  function createProof(bytes32 _proposal, bytes32 _secret)
  public
  pure
  returns (bytes32) {
    return keccak256(abi.encodePacked(_proposal, _secret));
  }

  /// @param _proposal this is proposal in clear form
  /// @param _secret this is secret in clear form
  function reveal(bytes32 _proposal, bytes32 _secret)
  external
  whenRevealPhase
  returns (bool) {

    uint256 blockHeight = getBlockHeight();
    bytes32 proof = createProof(_proposal, _secret);

    Voter storage voter = blocks[blockHeight].voters[msg.sender];
    require(voter.blindedProposal == proof, "your proposal do not exists (are you verifier?) OR invalid proof");
    require(voter.proposal == bytes32(0), "you already revealed");

    voter.proposal = _proposal;
    _updateCounters(voter.shard, _proposal);

    blocks[blockHeight].verifierAddresses.push(msg.sender);

    emit LogReveal(msg.sender, blockHeight, _proposal);

    return true;
  }

  /// @dev gets information about verifier from global registry
  /// @return (bool created, uint256 shard)
  function _getVerifierInfo(address _verifier)
  internal
  view
  returns (bool created, uint256 balance, uint256 shard) {
    VerifierRegistry registry = VerifierRegistry(registryAddress);

    ( , , created, balance, shard) = registry.verifiers(_verifier);
  }

  function _getTotalTokenBalancePerShard(uint256 _shard)
  internal
  view
  returns (uint256) {
    VerifierRegistry registry = VerifierRegistry(registryAddress);
    return registry.balancesPerShard(_shard);
  }

  function getBlockHeight()
  public
  view
  returns (uint256) {
    return block.number.div(uint256(blocksPerPhase) * 2);
  }


  /// @dev this function needs to be called each time we successfully reveal a proposal
  function _updateCounters(uint256 _shard, bytes32 _proposal)
  internal {
    uint256 blockHeight = getBlockHeight();

    uint256 balance = blocks[blockHeight].voters[msg.sender].balance;

    blocks[blockHeight].counts[_shard][_proposal] += balance;
    uint256 shardProposalsCount = blocks[blockHeight].counts[_shard][_proposal];
    bool newWinner;

    // unless it is not important for some reason, lets use `>` not `>=` in condition below
    // when we ignoring equal values we gain two important things:
    //  1. we save a lot of gas: we do not change state each time we have equal result
    //  2. we encourage voters to vote asap, because in case of equal results,
    //     winner is the first one that was revealed
    if (shardProposalsCount > blocks[blockHeight].maxsVotes[_shard]) {

      // we do expect that all (or most of) voters will agree about proposal.
      // We can save gas, if we read `roots[shard]` value and check, if we need a change.
      if (blocks[blockHeight].roots[_shard] != _proposal) {
        blocks[blockHeight].roots[_shard] = _proposal;
        newWinner = true;
      }

      blocks[blockHeight].maxsVotes[_shard] = shardProposalsCount;
    }

    uint256 tokensBalance = _getTotalTokenBalancePerShard(_shard);
    if (blocks[blockHeight].balancesPerShard[_shard] != tokensBalance) {
      blocks[blockHeight].balancesPerShard[_shard] = tokensBalance;
    }

    emit LogUpdateCounters(msg.sender, blockHeight, _shard, _proposal, shardProposalsCount, balance, newWinner, tokensBalance);
  }



  function getBlockRoot(uint256 _blockHeight, uint256 _shard) external view returns (bytes32) {
    return blocks[_blockHeight].roots[_shard];
  }

  function getBlockVoter(uint256 _blockHeight, address _voter)
  external
  view
  returns (bytes32, uint256, bytes32, uint256) {
    Voter storage voter = blocks[_blockHeight].voters[_voter];
    return (voter.blindedProposal, voter.shard, voter.proposal, voter.balance);
  }

  function getBlockMaxVotes(uint256 _blockHeight, uint256 _shard) external view returns (uint256) {
    return blocks[_blockHeight].maxsVotes[_shard];
  }

  function getBlockCount(uint256 _blockHeight, uint256 _shard, bytes32 _proposal) external view returns (uint256) {
    return blocks[_blockHeight].counts[_shard][_proposal];
  }

  function getBlockAddress(uint256 _blockHeight, uint256 _i) external view returns (address) {
    return blocks[_blockHeight].verifierAddresses[_i];
  }

  function getBlockAddressCount(uint256 _blockHeight) external view returns (uint256) {
    return blocks[_blockHeight].verifierAddresses.length;
  }

  function getStakeTokenBalanceFor(uint256 _blockHeight, uint256 _shard) external view returns (uint256) {
    return blocks[_blockHeight].balancesPerShard[_shard];
  }

  function isElectionValid(uint256 _blockHeight, uint256 _shard) external view returns (bool) {
    Block storage electionBlock = blocks[_blockHeight];
    if (electionBlock.balancesPerShard[_shard] == 0) return false;
    return electionBlock.maxsVotes[_shard] * 100 / electionBlock.balancesPerShard[_shard] >= minimumStakingTokenPercentage;
  }



}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_blockHeight","type":"uint256"},{"name":"_i","type":"uint256"}],"name":"getBlockAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockHeight","type":"uint256"},{"name":"_shard","type":"uint256"}],"name":"getBlockMaxVotes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockHeight","type":"uint256"},{"name":"_shard","type":"uint256"}],"name":"getBlockRoot","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentElectionCycleBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockHeight","type":"uint256"}],"name":"getBlockAddressCount","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":"_blockHeight","type":"uint256"},{"name":"_shard","type":"uint256"}],"name":"isElectionValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFirstCycleBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBlockHeight","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockHeight","type":"uint256"},{"name":"_shard","type":"uint256"}],"name":"getStakeTokenBalanceFor","outputs":[{"name":"","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":"_blockHeight","type":"uint256"},{"name":"_voter","type":"address"}],"name":"getBlockVoter","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_blindedProposal","type":"bytes32"}],"name":"propose","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"blocksPerPhase","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proposal","type":"bytes32"},{"name":"_secret","type":"bytes32"}],"name":"createProof","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_registryAddress","type":"address"}],"name":"updateRegistryAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minimumStakingTokenPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockHeight","type":"uint256"},{"name":"_shard","type":"uint256"},{"name":"_proposal","type":"bytes32"}],"name":"getBlockCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_proposal","type":"bytes32"},{"name":"_secret","type":"bytes32"}],"name":"reveal","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_registryAddress","type":"address"},{"name":"_blocksPerPhase","type":"uint8"},{"name":"_minimumStakingTokenPercentage","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"blockHeight","type":"uint256"},{"indexed":false,"name":"blindedProposal","type":"bytes32"},{"indexed":false,"name":"shard","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"LogPropose","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"blockHeight","type":"uint256"},{"indexed":false,"name":"proposal","type":"bytes32"}],"name":"LogReveal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"blockHeight","type":"uint256"},{"indexed":false,"name":"shard","type":"uint256"},{"indexed":false,"name":"proposal","type":"bytes32"},{"indexed":false,"name":"counts","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"},{"indexed":false,"name":"newWinner","type":"bool"},{"indexed":false,"name":"totalTokenBalanceForShard","type":"uint256"}],"name":"LogUpdateCounters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"blocksPerPhase","type":"uint8"},{"indexed":false,"name":"requirePercentOfTokens","type":"uint8"}],"name":"LogChainConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newRegistryAddress","type":"address"}],"name":"LogUpdateRegistryAddress","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 Switch To Opcodes View
6080604052600160025534801561001557600080fd5b506040516060806120da833981018060405281019080805190602001909291908051906020019092919080519060200190929190505050828282336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008260ff1611151561010a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f5f626c6f636b7350657250686173652063616e277420626520656d707479000081525060200191505060405180910390fd5b81600060146101000a81548160ff021916908360ff16021790555060008160ff161115156101c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f5f6d696e696d756d5374616b696e67546f6b656e50657263656e74616765206381526020017f616e277420626520656d7074790000000000000000000000000000000000000081525060400191505060405180910390fd5b60648160ff1611151515610268576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f5f6d696e696d756d5374616b696e67546f6b656e50657263656e74616765206381526020017f616e2774206265206f766572203130302500000000000000000000000000000081525060400191505060405180910390fd5b80600160146101000a81548160ff021916908360ff1602179055507fb3c249b0ed14c11380d2a5211ff065de51b71d96202934e696de780be8abb1378282604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390a1600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610373576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265676973747279206164647265737320697320656d7074790000000000000081525060200191505060405180910390fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f2946e20a9dcd908c83a8dcb3762f39c7dc6117017687921c109b86e3514e83cd60405160405180910390a2505050505050611cce8061040c6000396000f30060806040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630632a2f31461012257806347a34bcb146101995780635c67dd1e146101e4578063621df4be14610237578063669b7e6914610262578063715018a6146102a357806377d9e5fd146102ba578063793ca3fe146103095780637bb96acb146103345780637ded0c151461035f5780638da5cb5b146103aa578063921f5dec1461040157806399882cdb14610487578063af13aacc146104d0578063bfa8ad3614610501578063c57a88251461055c578063cefc0848146105b7578063d3d44e8b146105e8578063ed9aab5114610641578063f2fde38b14610698578063fc334e8c146106db575b600080fd5b34801561012e57600080fd5b506101576004803603810190808035906020019092919080359060200190929190505050610732565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101a557600080fd5b506101ce600480360381019080803590602001909291908035906020019092919050505061078a565b6040518082815260200191505060405180910390f35b3480156101f057600080fd5b5061021960048036038101908080359060200190929190803590602001909291905050506107bc565b60405180826000191660001916815260200191505060405180910390f35b34801561024357600080fd5b5061024c6107ee565b6040518082815260200191505060405180910390f35b34801561026e57600080fd5b5061028d60048036038101908080359060200190929190505050610816565b6040518082815260200191505060405180910390f35b3480156102af57600080fd5b506102b8610839565b005b3480156102c657600080fd5b506102ef600480360381019080803590602001909291908035906020019092919050505061093b565b604051808215151515815260200191505060405180910390f35b34801561031557600080fd5b5061031e6109d2565b6040518082815260200191505060405180910390f35b34801561034057600080fd5b506103496109f3565b6040518082815260200191505060405180910390f35b34801561036b57600080fd5b506103946004803603810190808035906020019092919080359060200190929190505050610a22565b6040518082815260200191505060405180910390f35b3480156103b657600080fd5b506103bf610a54565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040d57600080fd5b5061044c60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a79565b604051808560001916600019168152602001848152602001836000191660001916815260200182815260200194505050505060405180910390f35b34801561049357600080fd5b506104b66004803603810190808035600019169060200190929190505050610afc565b604051808215151515815260200191505060405180910390f35b3480156104dc57600080fd5b506104e5610fdc565b604051808260ff1660ff16815260200191505060405180910390f35b34801561050d57600080fd5b5061053e60048036038101908080356000191690602001909291908035600019169060200190929190505050610fef565b60405180826000191660001916815260200191505060405180910390f35b34801561056857600080fd5b5061059d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611093565b604051808215151515815260200191505060405180910390f35b3480156105c357600080fd5b506105cc611222565b604051808260ff1660ff16815260200191505060405180910390f35b3480156105f457600080fd5b5061062b60048036038101908080359060200190929190803590602001909291908035600019169060200190929190505050611235565b6040518082815260200191505060405180910390f35b34801561064d57600080fd5b50610656611281565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a457600080fd5b506106d9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a7565b005b3480156106e757600080fd5b506107186004803603810190808035600019169060200190929190803560001916906020019092919050505061130e565b604051808215151515815260200191505060405180910390f35b6000600360008481526020019081526020016000206006018281548110151561075757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b600060036000848152602001908152602001600020600301600083815260200190815260200160002054905092915050565b600060036000848152602001908152602001600020600001600083815260200190815260200160002054905092915050565b60006002600060149054906101000a900460ff1660ff16024381151561081057fe5b06905090565b600060036000838152602001908152602001600020600601805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561089457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600360008581526020019081526020016000209050600081600501600085815260200190815260200160002054141561097a57600091506109cb565b600160149054906101000a900460ff1660ff1681600501600085815260200190815260200160002054606483600301600087815260200190815260200160002054028115156109c557fe5b04101591505b5092915050565b60006109ee6109df6107ee565b4361164090919063ffffffff16565b905090565b6000610a1d6002600060149054906101000a900460ff1660ff16024361165990919063ffffffff16565b905090565b600060036000848152602001908152602001600020600501600083815260200190815260200160002054905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060006003600088815260200190815260200160002060020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020154836003015494509450945094505092959194509250565b600080600080600080600060149054906101000a900460ff1660ff16610b206107ee565b101515610b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f776520617265206e6f7420696e2070726f706f7365207068617365000000000081525060200191505060405180910390fd5b6001600254141515610ba657600080fd5b60028081905550610bb56109f3565b9450600060010260001916876000191614151515610c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5f626c696e64656450726f706f73616c20697320656d7074790000000000000081525060200191505060405180910390fd5b600360008681526020019081526020016000206001016000886000191660001916815260200190815260200160002060009054906101000a900460ff16151515610ced576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f626c696e64656450726f706f73616c206e6f7420756e6971756500000000000081525060200191505060405180910390fd5b610cf63361166f565b809450819550829650505050831515610d77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7665726966696572206973206e6f7420696e207468652072656769737472790081525060200191505060405180910390fd5b600083111515610def576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f766572696669657220686173206e6f20726967687420746f2070726f706f736581525060200191505060405180910390fd5b6003600086815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060010260001916816000015460001916141515610ef1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f766572696669657220616c72656164792070726f706f73656420696e2074686981526020017f7320726f756e640000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360008781526020019081526020016000206001016000896000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550868160000181600019169055508181600101819055508281600301819055503373ffffffffffffffffffffffffffffffffffffffff167f69f47e8a8ef3279604544fd81e85175c04f41a20ff5a1af46b5ef2e7c9848bc38689858760405180858152602001846000191660001916815260200183815260200182815260200194505050505060405180910390a26001955060016002819055505050505050919050565b600060149054906101000a900460ff1681565b600082826040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561105e5780518252602082019150602081019050602083039250611039565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110f057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5f7265676973747279416464726573732063616e277420626520656d7074790081525060200191505060405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f2946e20a9dcd908c83a8dcb3762f39c7dc6117017687921c109b86e3514e83cd60405160405180910390a260019050919050565b600160149054906101000a900460ff1681565b6000600360008581526020019081526020016000206004016000848152602001908152602001600020600083600019166000191681526020019081526020016000205490509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561130257600080fd5b61130b8161180e565b50565b600080600080600060149054906101000a900460ff1660ff1661132f6107ee565b101515156113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f776520617265206e6f7420696e2072657665616c20706861736500000000000081525060200191505060405180910390fd5b6113ad6109f3565b92506113b98686610fef565b91506003600084815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600019168160000154600019161415156114b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f796f75722070726f706f73616c20646f206e6f7420657869737473202861726581526020017f20796f752076657269666965723f29204f5220696e76616c69642070726f6f6681525060400191505060405180910390fd5b600060010260001916816002015460001916141515611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f796f7520616c72656164792072657665616c656400000000000000000000000081525060200191505060405180910390fd5b8581600201816000191690555061155b816001015487611908565b600360008481526020019081526020016000206006013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550503373ffffffffffffffffffffffffffffffffffffffff167f393ea91a2ccbefa4f42432d1862d4d257233d07d4d1e0e94066e1168df20392684886040518083815260200182600019166000191681526020019250505060405180910390a26001935050505092915050565b600082821115151561164e57fe5b818303905092915050565b6000818381151561166657fe5b04905092915050565b600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16636c824487866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060a081101561177357600080fd5b8101908080519060200190929190805164010000000081111561179557600080fd5b828101905060208101848111156117ab57600080fd5b81518560018202830111640100000000821117156117c857600080fd5b5050929190602001805190602001909291908051906020019092919080519060200190929190505050909192935090919250809450819550829650505050509193909250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561184a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006119186109f3565b94506003600086815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493508360036000878152602001908152602001600020600401600089815260200190815260200160002060008860001916600019168152602001908152602001600020600082825401925050819055506003600086815260200190815260200160002060040160008881526020019081526020016000206000876000191660001916815260200190815260200160002054925060036000868152602001908152602001600020600301600088815260200190815260200160002054831115611acd5785600019166003600087815260200190815260200160002060000160008981526020019081526020016000205460001916141515611aa057856003600087815260200190815260200160002060000160008981526020019081526020016000208160001916905550600191505b82600360008781526020019081526020016000206003016000898152602001908152602001600020819055505b611ad687611bc8565b90508060036000878152602001908152602001600020600501600089815260200190815260200160002054141515611b355780600360008781526020019081526020016000206005016000898152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f0c4b4d509de37fabf3c5ecde4bc6691e1571594f41511e94a890de070877026b868989878988886040518088815260200187815260200186600019166000191681526020018581526020018481526020018315151515815260200182815260200197505050505050505060405180910390a250505050505050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16634ff85794846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b505050506040513d6020811015611c8957600080fd5b81019080805190602001909291905050509150509190505600a165627a7a7230582097b14e435bef91e73c579ef4a335b682fb39a13035f8fd5a34fb944a2e45b2030029000000000000000000000000dd2cd445c4b0d38addd83c2606b2fbb2a3210d2c000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000046

   Swarm Source:
bzzr://97b14e435bef91e73c579ef4a335b682fb39a13035f8fd5a34fb944a2e45b203

 

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