Sponsored:   Temco - Join the Largest VC Backed ICO on the Bitcoin Network! TEMCO KYC Whitelist Starts Now!!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 11271 txns
Token Tracker: Consensus Token (SEN)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xb9e06a1effb43bdda59046e9f30220a6fb8b94d4at txn 0xad7be35c6547a98cbcea1f7a6f31ba5d669e970b27d995d57d520d2f24d42b4c
Token Balance:
 Latest 25 transactions from a total of 11271 transactions

TxHash Age From To Value [TxFee]
0x5383aeec7b7681b2b345b70c0819fd9e7ba92376ed3c66935ff438ed4ee6902a16 hrs 55 mins agoBitfinex_4  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00221232
0x9c7bbfe32bc4a20b2c51e4f3810de14cf5b284af2d640febcd2ed922dba38f611 day 12 hrs ago0x14533c4bb1772c2c9300548e0c5ffcd61998d3ce  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00018902
0x54de2c9ca4144db4fd67428ac51b65ffd932dad4f66a7398476f05d6e839f67b1 day 12 hrs ago0x879580a86a10494f1eef2b876a788d10b09fbb52  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000395108
0x1008e449cdd213ac18d22097cb5e854e47510380bea6629402719521611c5dbc1 day 15 hrs ago0x24a0973db6ed735d564f799ee33f62bc55cc1ad9  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197554
0x9b7087d9bb25244a5e3772167ad4218daa0d8a6518ab8d47268ea860f06b32e51 day 15 hrs ago0xa700ba91964d5f22450b80598298ecaa847bad21  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000593046
0x0dae869bbcc979fcef45ba2f9396311540db6ccaf1790d280ece5128ed390cd51 day 18 hrs ago0x07fbf493056dd9df2c7f6ef081e1b77d44bd9d06  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000885952
0x3f81d5c202576d86c36cdac315e66fb8392e9d24b6eba0c6ac842abfac515fd51 day 18 hrs ago0x07f2ffdd7a8ae2dfaedd9726641d3c5bfc0935c2  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000885952
0x8fcf97371468c470529571e86cff164796e9533a2b06f86dbf9a053b03414eb71 day 19 hrs agoTidex-Tokens  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.0011068
0xb2fd0904d803f139118c291532dcce6928ba7176d8383f4d3136ec3e9dc7417d1 day 22 hrs ago0xa7330c78fd186caf19f031c319a965ccbfb7d7c5  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.001042746286
0x6abac8498d21a83caeae8e3cfdcec90cc6b9c3a05810827250a27396cff4402c2 days 1 hr ago0x6add777f779b1bc4f519f6de0d543e7dc2b7ef7d  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000424719
0xa5606f2f5158636c34e9a0a95bc3f911084e64ed5cfb10e1646ca74515bb4a6c2 days 1 hr ago0xdd8baec3c7a67424fd8ab41de9db436cb4dad7e3  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197298
0x7d7f3057ceaf41f220005bfe641c882abab454b0749f63b1100e56a6f61601a72 days 1 hr ago0xdd8baec3c7a67424fd8ab41de9db436cb4dad7e3  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000333235178
0x068d6add7e2789a03e58bedb612355b33cbde7ce7f24a0f8be6d157a17ae77ee2 days 3 hrs ago0xa7330c78fd186caf19f031c319a965ccbfb7d7c5  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00114313433
0x5ff0d5f9ecdbe0562422b54fa29b5d285ee3633a215c5c9bd2f58c2d8df4a4112 days 5 hrs ago0xa7330c78fd186caf19f031c319a965ccbfb7d7c5  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00042
0x276e6a248891515c20d2796d51867fc39ff152d2bb337d815550e055026a9f2a2 days 16 hrs agoTidex-Tokens  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.0011068
0x7631c3c7eec77e7e6d0d7c2bacb20706413901beccc04021719be59ac2302ae43 days 10 hrs ago0x24a0973db6ed735d564f799ee33f62bc55cc1ad9  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197554
0x26de216197d7f48a2a142c24392330682949dc048994ebcbedd58df6ac81ec0c3 days 10 hrs ago0xa700ba91964d5f22450b80598298ecaa847bad21  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000790728
0xd78513ee09642dfa6a3eb29cb829536cbc7603b1766bdef5c9f260efc8256f373 days 12 hrs ago0x4e9affebe5636c2e8e7a38e2089916a8570ac05e  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197554
0x1dc7f1d20ccc931bdca874d6967a7fa17aaab0fae968e97f9a5f94584af7a9703 days 12 hrs ago0x1a1458c1f4d565b7fd8e7349c577e3c5ca98200b  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.001186092
0xdcbd3e659c0af305847116a588d93a2ce71218e9ce2b474240f737f1c1f2873b3 days 12 hrs ago0xcb9a4281d439f520d8dcb2c3c9b7d746cf373370  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.0027686
0xa9619643242f8eef25eb8b91b716bcdccb2f88127f82df224fc1ff9cc0de6ad63 days 12 hrs ago0x37762cb34cebe735ce7e277abbea3a5030462e8a  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197554
0xdb83345afcebf3096a61af1a1b06aa0eff65b44fa956ba782a60a619060879e23 days 12 hrs ago0x9096410692868ea33f77ff1ca3ae3d9948faf82c  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.000471866934
0xb1c4dcf261ddc97594cf6f1fa77ce100ed8f42bedfd9050251f244db7ad796543 days 12 hrs ago0x4e9affebe5636c2e8e7a38e2089916a8570ac05e  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197554
0x2a20d64bfdc1fd05d8979d2abf3f715bbeab75c50fe18df9dd2dd22b4ffae7c33 days 12 hrs ago0x1a1458c1f4d565b7fd8e7349c577e3c5ca98200b  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.001186092
0x2641dfdd4bf271f4adcf6545965e412bd6ef74ff34b3d9141812e91f23bc72c83 days 15 hrs ago0x52ee55420e51d87e0ab7b3f0caa9da445dc6fd43  IN   0xd53370acf66044910bb49cbcfe8f3cd020337f600 Ether0.00197554
[ 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: SEN
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

/*
  Copyright 2017, Anton Egorov (Mothership Foundation)
  Copyright 2017, An Hoang Phan Ngo (Mothership Foundation)
  Copyright 2017, Joel Mislav Kunst (Mothership Fundation)
  Copyright 2016, Jordi Baylina

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

// File: contracts/interface/ApproveAndCallFallBack.sol

contract ApproveAndCallFallBack {
  function receiveApproval(
    address _from,
    uint256 _amount,
    address _token,
    bytes _data) public;
}

// File: contracts/interface/Controlled.sol

contract Controlled {
  /// @notice The address of the controller is the only address that can call
  ///  a function with this modifier
  modifier onlyController {
    require(msg.sender == controller);
    _;
  }

  address public controller;

  function Controlled() public { controller = msg.sender; }

  /// @notice Changes the controller of the contract
  /// @param _newController The new controller of the contract
  function changeController(address _newController) public onlyController {
    controller = _newController;
  }
}

// File: contracts/interface/Burnable.sol

/// @dev Burnable introduces a burner role, which could be used to destroy
///  tokens. The burner address could be changed by himself.
contract Burnable is Controlled {
  address public burner;

  /// @notice The function with this modifier could be called by a controller
  /// as well as by a burner. But burner could use the onlt his/her address as
  /// a target.
  modifier onlyControllerOrBurner(address target) {
    assert(msg.sender == controller || (msg.sender == burner && msg.sender == target));
    _;
  }

  modifier onlyBurner {
    assert(msg.sender == burner);
    _;
  }

  /// Contract creator become a burner by default
  function Burnable() public { burner = msg.sender;}

  /// @notice Change a burner address
  /// @param _newBurner The new burner address
  function changeBurner(address _newBurner) public onlyBurner {
    burner = _newBurner;
  }
}

// File: contracts/interface/ERC20Token.sol

// @dev Abstract contract for the full ERC 20 Token standard
//  https://github.com/ethereum/EIPs/issues/20
contract ERC20Token {
  /// total amount of tokens
  function totalSupply() public view returns (uint256 balance);

  /// @param _owner The address from which the balance will be retrieved
  /// @return The balance
  function balanceOf(address _owner) public view 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) public 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) public 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) public 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) public view returns (uint256 remaining);

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

// File: contracts/interface/MiniMeTokenI.sol

/// @dev MiniMeToken interface. Using this interface instead of whole contracts
///  will reduce contract sise and gas cost
contract MiniMeTokenI is ERC20Token, Burnable {

  string public name;                //The Token's name: e.g. DigixDAO Tokens
  uint8 public decimals;             //Number of decimals of the smallest unit
  string public symbol;              //An identifier: e.g. REP
  string public version = "MMT_0.1"; //An arbitrary versioning scheme

///////////////////
// ERC20 Methods
///////////////////

  /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
  ///  its behalf, and then a function is triggered in the contract that is
  ///  being approved, `_spender`. This allows users to use their tokens to
  ///  interact with contracts in one function call instead of two
  /// @param _spender The address of the contract able to transfer the tokens
  /// @param _amount The amount of tokens to be approved for transfer
  /// @return True if the function call was successful
  function approveAndCall(
    address _spender,
    uint256 _amount,
    bytes _extraData) public returns (bool success);

////////////////
// Query balance and totalSupply in History
////////////////

  /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
  /// @param _owner The address from which the balance will be retrieved
  /// @param _blockNumber The block number when the balance is queried
  /// @return The balance at `_blockNumber`
  function balanceOfAt(
    address _owner,
    uint _blockNumber) public constant returns (uint);

  /// @notice Total amount of tokens at a specific `_blockNumber`.
  /// @param _blockNumber The block number when the totalSupply is queried
  /// @return The total amount of tokens at `_blockNumber`
  function totalSupplyAt(uint _blockNumber) public constant returns(uint);

////////////////
// Generate and destroy tokens
////////////////

  /// @notice Generates `_amount` tokens that are assigned to `_owner`
  /// @param _owner The address that will be assigned the new tokens
  /// @param _amount The quantity of tokens generated
  /// @return True if the tokens are generated correctly
  function mintTokens(address _owner, uint _amount) public returns (bool);


  /// @notice Burns `_amount` tokens from `_owner`
  /// @param _owner The address that will lose the tokens
  /// @param _amount The quantity of tokens to burn
  /// @return True if the tokens are burned correctly
  function destroyTokens(address _owner, uint _amount) public returns (bool);

/////////////////
// Finalize 
////////////////
  function finalize() public;

//////////
// Safety Methods
//////////

  /// @notice This method can be used by the controller to extract mistakenly
  ///  sent tokens to this contract.
  /// @param _token The address of the token contract that you want to recover
  ///  set to 0 in case you want to extract ether.
  function claimTokens(address _token) public;

////////////////
// Events
////////////////

  event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
}

// File: contracts/interface/TokenController.sol

/// @dev The token controller contract must implement these functions
contract TokenController {
    /// @notice Called when `_owner` sends ether to the MiniMe Token contract
    /// @param _owner The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
  function proxyMintTokens(
    address _owner, 
    uint _amount,
    bytes32 _paidTxID) public returns(bool);

    /// @notice Notifies the controller about a token transfer allowing the
    ///  controller to react if desired
    /// @param _from The origin of the transfer
    /// @param _to The destination of the transfer
    /// @param _amount The amount of the transfer
    /// @return False if the controller does not authorize the transfer
  function onTransfer(address _from, address _to, uint _amount) public returns(bool);

    /// @notice Notifies the controller about an approval allowing the
    ///  controller to react if desired
    /// @param _owner The address that calls `approve()`
    /// @param _spender The spender in the `approve()` call
    /// @param _amount The amount in the `approve()` call
    /// @return False if the controller does not authorize the approval
  function onApprove(address _owner, address _spender, uint _amount) public
    returns(bool);
}

// File: contracts/MiniMeToken.sol

/// @title MiniMeToken Contract
/// @dev The actual token contract, the default controller is the msg.sender
///  that deploys the contract, so usually this token will be deployed by a
///  token controller contract, which Giveth will call a "Campaign"
contract MiniMeToken is MiniMeTokenI {

  /// @dev `Checkpoint` is the structure that attaches a block number to a
  ///  given value, the block number attached is the one that last changed the
  ///  value
  struct Checkpoint {

    // `fromBlock` is the block number that the value was generated from
    uint128 fromBlock;

    // `value` is the amount of tokens at a specific block number
    uint128 value;
  }

  // `parentToken` is the Token address that was cloned to produce this token;
  //  it will be 0x0 for a token that was not cloned
  MiniMeToken public parentToken;

  // `parentSnapShotBlock` is the block number from the Parent Token that was
  //  used to determine the initial distribution of the Clone Token
  uint public parentSnapShotBlock;

  // `creationBlock` is the block number that the Clone Token was created
  uint public creationBlock;

  // `balances` is the map that tracks the balance of each address, in this
  //  contract when the balance changes the block number that the change
  //  occurred is also included in the map
  mapping (address => Checkpoint[]) balances;

  // `allowed` tracks any extra transfer rights as in all ERC20 tokens
  mapping (address => mapping (address => uint256)) allowed;

  // Tracks the history of the `totalSupply` of the token
  Checkpoint[] totalSupplyHistory;


  bool public finalized;

  modifier notFinalized() {
    require(!finalized);
    _;
  }

////////////////
// Constructor
////////////////

  /// @notice Constructor to create a MiniMeToken
  /// @param _parentToken Address of the parent token, set to 0x0 if it is a
  ///  new token
  /// @param _parentSnapShotBlock Block of the parent token that will
  ///  determine the initial distribution of the clone token, set to 0 if it
  ///  is a new token
  /// @param _tokenName Name of the new token
  /// @param _decimalUnits Number of decimals of the new token
  /// @param _tokenSymbol Token Symbol for the new token
  function MiniMeToken(
    address _parentToken,
    uint _parentSnapShotBlock,
    string _tokenName,
    uint8 _decimalUnits,
    string _tokenSymbol
  ) public
  {
    name = _tokenName;                                 // Set the name
    decimals = _decimalUnits;                          // Set the decimals
    symbol = _tokenSymbol;                             // Set the symbol
    parentToken = MiniMeToken(_parentToken);
    parentSnapShotBlock = _parentSnapShotBlock;
    creationBlock = block.number;
  }

///////////////////
// ERC20 Methods
///////////////////

  /// @notice Send `_amount` tokens to `_to` from `msg.sender`
  /// @param _to The address of the recipient
  /// @param _amount The amount of tokens to be transferred
  /// @return Whether the transfer was successful or not
  function transfer(address _to, uint256 _amount) public returns (bool success) {
    return doTransfer(msg.sender, _to, _amount);
  }

  /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
  ///  is approved by `_from`
  /// @param _from The address holding the tokens being transferred
  /// @param _to The address of the recipient
  /// @param _amount The amount of tokens to be transferred
  /// @return True if the transfer was successful
  function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) {
    // The standard ERC 20 transferFrom functionality
    require(allowed[_from][msg.sender] >= _amount);
    allowed[_from][msg.sender] -= _amount;

    return doTransfer(_from, _to, _amount);
  }

  /// @dev This is the actual transfer function in the token contract, it can
  ///  only be called by other functions in this contract.
  /// @param _from The address holding the tokens being transferred
  /// @param _to The address of the recipient
  /// @param _amount The amount of tokens to be transferred
  /// @return True if the transfer was successful
  function doTransfer(address _from, address _to, uint _amount) internal returns(bool) {
    if (_amount == 0) {
      return true;
    }

    require(parentSnapShotBlock < block.number);

    // Do not allow transfer to 0x0 or the token contract itself
    require((_to != 0) && (_to != address(this)));

    // If the amount being transfered is more than the balance of the
    //  account the transfer returns false
    var previousBalanceFrom = balanceOfAt(_from, block.number);
    if (previousBalanceFrom < _amount) {
      return false;
    }

    // Alerts the token controller of the transfer
    // Check for transfer enable from controller
    if (isContract(controller)) {
      require(TokenController(controller).onTransfer(_from, _to, _amount));
    }

    // First update the balance array with the new value for the address
    //  sending the tokens
    updateValueAtNow(balances[_from], previousBalanceFrom - _amount);

    // Then update the balance array with the new value for the address
    //  receiving the tokens
    var previousBalanceTo = balanceOfAt(_to, block.number);
    require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
    updateValueAtNow(balances[_to], previousBalanceTo + _amount);

    // An event to make the transfer easy to find on the blockchain
    Transfer(_from, _to, _amount);

    return true;
  }

  /// @param _owner The address that's balance is being requested
  /// @return The balance of `_owner` at the current block
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balanceOfAt(_owner, block.number);
  }

  /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
  ///  its behalf. This is a modified version of the ERC20 approve function
  ///  to be a little bit safer
  /// @param _spender The address of the account able to transfer the tokens
  /// @param _amount The amount of tokens to be approved for transfer
  /// @return True if the approval was successful
  function approve(address _spender, uint256 _amount) public returns (bool success) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender,0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_amount == 0) || (allowed[msg.sender][_spender] == 0));

    // Alerts the token controller of the approve function call
    if (isContract(controller)) {
      require(TokenController(controller).onApprove(msg.sender, _spender, _amount));
    }

    allowed[msg.sender][_spender] = _amount;
    Approval(msg.sender, _spender, _amount);
    return true;
  }

  /// @dev This function makes it easy to read the `allowed[]` map
  /// @param _owner The address of the account that owns the token
  /// @param _spender The address of the account able to transfer the tokens
  /// @return Amount of remaining tokens of _owner that _spender is allowed
  ///  to spend
  function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

  /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
  ///  its behalf, and then a function is triggered in the contract that is
  ///  being approved, `_spender`. This allows users to use their tokens to
  ///  interact with contracts in one function call instead of two
  /// @param _spender The address of the contract able to transfer the tokens
  /// @param _amount The amount of tokens to be approved for transfer
  /// @return True if the function call was successful
  function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) {
    require(approve(_spender, _amount));

    ApproveAndCallFallBack(_spender).receiveApproval(
      msg.sender,
      _amount,
      this,
      _extraData
    );

    return true;
  }

  /// @dev This function makes it easy to get the total number of tokens
  /// @return The total number of tokens
  function totalSupply() public view returns (uint) {
    return totalSupplyAt(block.number);
  }

////////////////
// Query balance and totalSupply in History
////////////////

  /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
  /// @param _owner The address from which the balance will be retrieved
  /// @param _blockNumber The block number when the balance is queried
  /// @return The balance at `_blockNumber`
  function balanceOfAt(address _owner, uint _blockNumber) public view returns (uint) {

    // These next few lines are used when the balance of the token is
    //  requested before a check point was ever created for this token, it
    //  requires that the `parentToken.balanceOfAt` be queried at the
    //  genesis block for that token as this contains initial balance of
    //  this token
    if ((balances[_owner].length == 0) ||
        (balances[_owner][0].fromBlock > _blockNumber)) {
      if (address(parentToken) != 0) {
        return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
      } else {
        // Has no parent
        return 0;
      }

        // This will return the expected balance during normal situations
     } else {
      return getValueAt(balances[_owner], _blockNumber);
     }
  }

  /// @notice Total amount of tokens at a specific `_blockNumber`.
  /// @param _blockNumber The block number when the totalSupply is queried
  /// @return The total amount of tokens at `_blockNumber`
  function totalSupplyAt(uint _blockNumber) public view returns(uint) {

    // These next few lines are used when the totalSupply of the token is
    //  requested before a check point was ever created for this token, it
    //  requires that the `parentToken.totalSupplyAt` be queried at the
    //  genesis block for this token as that contains totalSupply of this
    //  token at this block number.
    if ((totalSupplyHistory.length == 0) ||
        (totalSupplyHistory[0].fromBlock > _blockNumber)) {
      if (address(parentToken) != 0) {
        return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
      } else {
        return 0;
      }

        // This will return the expected totalSupply during normal situations
     } else {
      return getValueAt(totalSupplyHistory, _blockNumber);
     }
  }

////////////////
// Mint and destroy tokens
////////////////

  /// @notice Mint `_amount` tokens that are assigned to `_owner`
  /// @param _owner The address that will be assigned the new tokens
  /// @param _amount The quantity of tokens minted
  /// @return True if the tokens are minted correctly
  function mintTokens(address _owner, uint _amount) public onlyController notFinalized returns (bool) {
    uint curTotalSupply = totalSupply();
    require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
    uint previousBalanceTo = balanceOf(_owner);
    require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
    updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
    updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
    Transfer(0, _owner, _amount);
    return true;
  }

  /// @notice Burns `_amount` tokens from `_owner`
  /// @param _owner The address that will lose the tokens
  /// @param _amount The quantity of tokens to burn
  /// @return True if the tokens are burned correctly
  function destroyTokens(address _owner, uint _amount) public onlyControllerOrBurner(_owner) returns (bool) {
    uint curTotalSupply = totalSupply();
    require(curTotalSupply >= _amount);
    uint previousBalanceFrom = balanceOf(_owner);
    require(previousBalanceFrom >= _amount);
    updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
    updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);
    Transfer(_owner, 0, _amount);
    return true;
  }

////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////

  /// @dev `getValueAt` retrieves the number of tokens at a given block number
  /// @param checkpoints The history of values being queried
  /// @param _block The block number to retrieve the value at
  /// @return The number of tokens being queried
  function getValueAt(Checkpoint[] storage checkpoints, uint _block) internal view returns (uint) {
    if (checkpoints.length == 0)
      return 0;

    // Shortcut for the actual value
    if (_block >= checkpoints[checkpoints.length-1].fromBlock)
      return checkpoints[checkpoints.length-1].value;
    if (_block < checkpoints[0].fromBlock)
      return 0;

    // Binary search of the value in the array
    uint min = 0;
    uint max = checkpoints.length-1;
    while (max > min) {
      uint mid = (max + min + 1) / 2;
      if (checkpoints[mid].fromBlock<=_block) {
        min = mid;
      } else {
        max = mid-1;
      }
    }
    return checkpoints[min].value;
  }

  /// @dev `updateValueAtNow` used to update the `balances` map and the
  ///  `totalSupplyHistory`
  /// @param checkpoints The history of data being updated
  /// @param _value The new number of tokens
  function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value) internal {
    if ((checkpoints.length == 0) ||
      (checkpoints[checkpoints.length - 1].fromBlock < block.number)) {
      Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++];
      newCheckPoint.fromBlock = uint128(block.number);
      newCheckPoint.value = uint128(_value);
    } else {
      Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
      oldCheckPoint.value = uint128(_value);
    }
  }

  /// @dev Internal function to determine if an address is a contract
  /// @param _addr The address being queried
  /// @return True if `_addr` is a contract
  function isContract(address _addr) internal view returns(bool) {
    uint size;
    if (_addr == 0)
      return false;
    assembly {
      size := extcodesize(_addr)
    }
    return size>0;
  }

  /// @dev Helper function to return a min betwen the two uints
  function min(uint a, uint b) pure internal returns (uint) {
    return a < b ? a : b;
  }

//////////
// Safety Methods
//////////

  /// @notice This method can be used by the controller to extract mistakenly
  ///  sent tokens to this contract.
  /// @param _token The address of the token contract that you want to recover
  ///  set to 0 in case you want to extract ether.
  function claimTokens(address _token) public onlyController {
    if (_token == 0x0) {
      controller.transfer(this.balance);
      return;
    }

    ERC20Token otherToken = ERC20Token(_token);
    uint balance = otherToken.balanceOf(this);
    otherToken.transfer(controller, balance);
    ClaimedTokens(_token, controller, balance);
  }

  function finalize() public onlyController notFinalized {
    finalized = true;
  }

////////////////
// Events
////////////////

  event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
  event Transfer(address indexed _from, address indexed _to, uint256 _amount);
  event Approval(
    address indexed _owner,
    address indexed _spender,
    uint256 _amount
  );

}

// File: contracts/SEN.sol

contract SEN is MiniMeToken {
  function SEN() public MiniMeToken(
    0x0,                // no parent token
    0,                  // no snapshot block number from parent
    "Consensus Token",  // Token name
    18,                 // Decimals
    "SEN"              // Symbolh
  )
  {}
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"burner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBurner","type":"address"}],"name":"changeBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mintTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526040805190810160405280600781526020017f4d4d545f302e31000000000000000000000000000000000000000000000000008152506005908051906020019062000051929190620001f7565b5034156200005e57600080fd5b6000806040805190810160405280600f81526020017f436f6e73656e73757320546f6b656e000000000000000000000000000000000081525060126040805190810160405280600381526020017f53454e0000000000000000000000000000000000000000000000000000000000815250336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826002908051906020019062000168929190620001f7565b5081600360006101000a81548160ff021916908360ff16021790555080600490805190602001906200019c929190620001f7565b5084600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600781905550436008819055505050505050620002a6565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200023a57805160ff19168380011785556200026b565b828001600101855582156200026b579182015b828111156200026a5782518255916020019190600101906200024d565b5b5090506200027a91906200027e565b5090565b620002a391905b808211156200029f57600081600090555060010162000285565b5090565b90565b6125ff80620002b66000396000f300606060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461014e578063095ea7b3146101dc578063176345141461023657806318160ddd1461025f57806323b872dd1461028857806327810b6e14610301578063313ce567146103565780633cebb823146103855780634bb278f3146103be5780634ee2cd7e146103d357806354fd4d501461042957806370a08231146104b757806380a540011461050457806380b022e81461055957806395d89b4114610592578063981b24d014610620578063a9059cbb14610657578063b3f05b97146106b1578063c5bcc4f1146106de578063cae9ca5114610707578063d3ce77fe146107a4578063dd62ed3e146107fe578063df8de3e71461086a578063f0dda65c146108a3578063f77c4791146108fd575b600080fd5b341561015957600080fd5b610161610952565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a1578082015181840152602081019050610186565b50505050905090810190601f1680156101ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101e757600080fd5b61021c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506109f0565b604051808215151515815260200191505060405180910390f35b341561024157600080fd5b610249610ccd565b6040518082815260200191505060405180910390f35b341561026a57600080fd5b610272610cd3565b6040518082815260200191505060405180910390f35b341561029357600080fd5b6102e7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610ce3565b604051808215151515815260200191505060405180910390f35b341561030c57600080fd5b610314610e0e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561036157600080fd5b610369610e34565b604051808260ff1660ff16815260200191505060405180910390f35b341561039057600080fd5b6103bc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e47565b005b34156103c957600080fd5b6103d1610ee5565b005b34156103de57600080fd5b610413600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f79565b6040518082815260200191505060405180910390f35b341561043457600080fd5b61043c6111ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047c578082015181840152602081019050610461565b50505050905090810190601f1680156104a95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c257600080fd5b6104ee600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061128c565b6040518082815260200191505060405180910390f35b341561050f57600080fd5b61051761129f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561056457600080fd5b610590600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112c5565b005b341561059d57600080fd5b6105a5611362565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e55780820151818401526020810190506105ca565b50505050905090810190601f1680156106125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561062b57600080fd5b6106416004808035906020019091905050611400565b6040518082815260200191505060405180910390f35b341561066257600080fd5b610697600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611589565b604051808215151515815260200191505060405180910390f35b34156106bc57600080fd5b6106c461159e565b604051808215151515815260200191505060405180910390f35b34156106e957600080fd5b6106f16115b1565b6040518082815260200191505060405180910390f35b341561071257600080fd5b61078a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506115b7565b604051808215151515815260200191505060405180910390f35b34156107af57600080fd5b6107e4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611730565b604051808215151515815260200191505060405180910390f35b341561080957600080fd5b610854600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611904565b6040518082815260200191505060405180910390f35b341561087557600080fd5b6108a1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061198b565b005b34156108ae57600080fd5b6108e3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611cbc565b604051808215151515815260200191505060405180910390f35b341561090857600080fd5b610910611e22565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b505050505081565b600080821480610a7c57506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1515610a8757600080fd5b610ab16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e47565b15610bdd576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da682aeb3385856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515610bb657600080fd5b6102c65a03f11515610bc757600080fd5b505050604051805190501515610bdc57600080fd5b5b81600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60085481565b6000610cde43611400565b905090565b600081600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610d7057600080fd5b81600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550610e05848484611e83565b90509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea257600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4057600080fd5b600c60009054906101000a900460ff16151515610f5c57600080fd5b6001600c60006101000a81548160ff021916908315150217905550565b600080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501480611053575081600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548110151561101457fe5b906000526020600020900160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16115b1561119d576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561119457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e846110e58560075461219e565b6000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561117257600080fd5b6102c65a03f1151561118357600080fd5b5050506040518051905090506111e8565b600090506111e8565b6111e5600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836121b7565b90505b92915050565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112845780601f1061125957610100808354040283529160200191611284565b820191906000526020600020905b81548152906001019060200180831161126757829003601f168201915b505050505081565b60006112988243610f79565b9050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561131e57fe5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113f85780601f106113cd576101008083540402835291602001916113f8565b820191906000526020600020905b8154815290600101906020018083116113db57829003601f168201915b505050505081565b600080600b805490501480611460575081600b600081548110151561142157fe5b906000526020600020900160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16115b15611576576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561156d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663981b24d06114f18460075461219e565b6000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b151561154b57600080fd5b6102c65a03f1151561155c57600080fd5b505050604051805190509050611584565b60009050611584565b611581600b836121b7565b90505b919050565b6000611596338484611e83565b905092915050565b600c60009054906101000a900460ff1681565b60075481565b60006115c384846109f0565b15156115ce57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156116c35780820151818401526020810190506116a8565b50505050905090810190601f1680156116f05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561171157600080fd5b6102c65a03f1151561172257600080fd5b505050600190509392505050565b6000806000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118155750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561181457508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b5b151561181d57fe5b611825610cd3565b925084831015151561183657600080fd5b61183f8661128c565b915084821015151561185057600080fd5b61185d600b8685036123cb565b6118a7600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208684036123cb565b60008673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a36001935050505092915050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119e957600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff161415611a85576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515611a8057600080fd5b611cb7565b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611b2b57600080fd5b6102c65a03f11515611b3c57600080fd5b5050506040518051905090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611c1457600080fd5b6102c65a03f11515611c2557600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c836040518082815260200191505060405180910390a35b505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d1c57600080fd5b600c60009054906101000a900460ff16151515611d3857600080fd5b611d40610cd3565b91508184830110151515611d5357600080fd5b611d5c8561128c565b90508084820110151515611d6f57600080fd5b611d7c600b8584016123cb565b611dc6600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208583016123cb565b8473ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff161415611e725760009150611e7d565b823b90506000811191505b50919050565b600080600080841415611e995760019250612195565b43600754101515611ea957600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff1614158015611efc57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1515611f0757600080fd5b611f118643610f79565b915083821015611f245760009250612195565b611f4e6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e47565b1561207a576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634a3931498787876000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561205357600080fd5b6102c65a03f1151561206457600080fd5b50505060405180519050151561207957600080fd5b5b6120c4600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208584036123cb565b6120ce8543610f79565b905080848201101515156120e157600080fd5b61212b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208583016123cb565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b50509392505050565b60008183106121ad57816121af565b825b905092915050565b6000806000806000868054905014156121d357600093506123c2565b8560018780549050038154811015156121e857fe5b906000526020600020900160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16851015156122865785600187805490500381548110151561224257fe5b906000526020600020900160000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1693506123c2565b85600081548110151561229557fe5b906000526020600020900160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168510156122e257600093506123c2565b60009250600186805490500391505b8282111561237457600260018484010181151561230a57fe5b04905084868281548110151561231c57fe5b906000526020600020900160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161115156123685780925061236f565b6001810391505b6122f1565b858381548110151561238257fe5b906000526020600020900160000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1693505b50505092915050565b6000806000848054905014806124315750438460018680549050038154811015156123f257fe5b906000526020600020900160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16105b156124de578384805480919060010161244a9190612542565b81548110151561245657fe5b90600052602060002090019150438260000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550828260000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555061253c565b8360018580549050038154811015156124f357fe5b90600052602060002090019050828160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b50505050565b81548183558181151161256957818360005260206000209182019101612568919061256e565b5b505050565b6125d091905b808211156125cc57600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905550600101612574565b5090565b905600a165627a7a72305820961970359a87b0c5d3ae00d286d3e5a7763abbdca189879bafd1c13739a022fb0029

   Swarm Source:
bzzr://961970359a87b0c5d3ae00d286d3e5a7763abbdca189879bafd1c13739a022fb

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.