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

TxHash Age From To Value [TxFee]
0xf89fd784dce1a29afde1dc23cc63b042d6a19db5a987295092cf27a2437662f36 days 3 hrs ago0x1f30817232b7e95f9afb865c8c96d922405fec6d  IN   0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether0.000109064
0xad4e9e7a9128552953eb950663069c9a09f64c92f7e71a7df8d56f1a3834d0c46 days 4 hrs ago0xdacc0fd259ce0de2829b38a0765970e7ab65346c  IN   0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether0.000109
0x28e97ec74ad5d226df67eed4bacf6a553faff5e433b24eac80bef90dcd8dee536 days 4 hrs ago0x25d446d7b693ae3eac71a9f68f33a0f33628a741  IN    Contract Creation0 Ether0.004053281
[ 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
0xcc412744fb000f39aaa2bf25131eadb43386b80dab52db6f5e2a317884772cf0103417255 days 1 hr ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0xcc412744fb000f39aaa2bf25131eadb43386b80dab52db6f5e2a317884772cf0103417255 days 1 hr ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0xcc412744fb000f39aaa2bf25131eadb43386b80dab52db6f5e2a317884772cf0103417255 days 1 hr ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf69ca736d959519a79f9075021444a8a0ee384d30 Ether
0xcc412744fb000f39aaa2bf25131eadb43386b80dab52db6f5e2a317884772cf0103417255 days 1 hr ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0xcc412744fb000f39aaa2bf25131eadb43386b80dab52db6f5e2a317884772cf0103417255 days 1 hr ago0xf69ca736d959519a79f9075021444a8a0ee384d30xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0x213a28c6ffb094bc2710707965f22523f0fbd508e2c87d536792bae53fcdb3f3103396425 days 8 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0x213a28c6ffb094bc2710707965f22523f0fbd508e2c87d536792bae53fcdb3f3103396425 days 8 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0x213a28c6ffb094bc2710707965f22523f0fbd508e2c87d536792bae53fcdb3f3103396425 days 8 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf69ca736d959519a79f9075021444a8a0ee384d30 Ether
0x213a28c6ffb094bc2710707965f22523f0fbd508e2c87d536792bae53fcdb3f3103396425 days 8 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0x213a28c6ffb094bc2710707965f22523f0fbd508e2c87d536792bae53fcdb3f3103396425 days 8 hrs ago0xf69ca736d959519a79f9075021444a8a0ee384d30xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0xf351b835d1b4a46493906e63f9853d7ca13fee725eefc8a3dd854e480dfbcc59103341406 days 3 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0xf351b835d1b4a46493906e63f9853d7ca13fee725eefc8a3dd854e480dfbcc59103341406 days 3 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0xf351b835d1b4a46493906e63f9853d7ca13fee725eefc8a3dd854e480dfbcc59103341406 days 3 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf69ca736d959519a79f9075021444a8a0ee384d30 Ether
0xf351b835d1b4a46493906e63f9853d7ca13fee725eefc8a3dd854e480dfbcc59103341406 days 3 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0xf351b835d1b4a46493906e63f9853d7ca13fee725eefc8a3dd854e480dfbcc59103341406 days 3 hrs ago0xf69ca736d959519a79f9075021444a8a0ee384d30xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0xe2832da0f98cf4e64031352c3c06575ae0634ecec14e7d7a8fd60f7aa02f638e103340426 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0xe2832da0f98cf4e64031352c3c06575ae0634ecec14e7d7a8fd60f7aa02f638e103340426 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0xe2832da0f98cf4e64031352c3c06575ae0634ecec14e7d7a8fd60f7aa02f638e103340426 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf69ca736d959519a79f9075021444a8a0ee384d30 Ether
0xe2832da0f98cf4e64031352c3c06575ae0634ecec14e7d7a8fd60f7aa02f638e103340426 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0xe2832da0f98cf4e64031352c3c06575ae0634ecec14e7d7a8fd60f7aa02f638e103340426 days 4 hrs ago0xf69ca736d959519a79f9075021444a8a0ee384d30xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0x9696c8d2ad770fdc17ecbc81e72b1de7c4b5d449a45e8a8a5061870ba24aa51d103340376 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0x9696c8d2ad770fdc17ecbc81e72b1de7c4b5d449a45e8a8a5061870ba24aa51d103340376 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0x957e1893415b44e30eb678d0f5e5bd965957b0270 Ether
0x9696c8d2ad770fdc17ecbc81e72b1de7c4b5d449a45e8a8a5061870ba24aa51d103340376 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf69ca736d959519a79f9075021444a8a0ee384d30 Ether
0x9696c8d2ad770fdc17ecbc81e72b1de7c4b5d449a45e8a8a5061870ba24aa51d103340376 days 4 hrs ago0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
0x9696c8d2ad770fdc17ecbc81e72b1de7c4b5d449a45e8a8a5061870ba24aa51d103340376 days 4 hrs ago0xf69ca736d959519a79f9075021444a8a0ee384d30xf4ac5c7b854346024ae95cf15ae516fe60d198bb0 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0xa22b96733903a5e7c60948e9d6cf2ef9eda88479
Contract Name: HashtagSimpleDeal
Compiler Version: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

// File: contracts/IMiniMeToken.sol

contract IMiniMeToken {
	function transfer(address _to, uint256 _amount) public returns (bool success);
	function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success);
	function balanceOf(address _owner) constant public returns (uint256 balance);
	function generateTokens(address _owner, uint _amount) public;
}

// File: contracts/RepToken/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: contracts/RepToken/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) {
    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/RepToken/BasicToken.sol

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  uint256 totalSupply_;

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

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

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

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

}

// File: contracts/RepToken/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/RepToken/StandardToken.sol

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

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


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

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

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

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

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

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

}

// File: contracts/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 transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }
}

// File: contracts/RepToken/MintableToken.sol

/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/openzeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */
contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

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

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) hasMintPermission canMint public returns (bool) {
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Mint(_to, _amount);
    emit Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() onlyOwner canMint public returns (bool) {
    mintingFinished = true;
    emit MintFinished();
    return true;
  }

  function transfer(address _to, uint256 _value) public returns (bool) {
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    return true;
  }

  function approve(address _spender, uint256 _value) public returns (bool) {
    return true;
  }

  function increaseApproval(address _spender, uint _addedValue) public returns (bool success) {
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public  returns (bool success) {
    return true;
  }
}

// File: contracts/RepToken/DetailedERC20.sol

contract DetailedERC20 is MintableToken {
  string public name;
  string public symbol;
  uint8 public decimals;

  constructor(string _name, string _symbol, uint8 _decimals) public {
    name = _name;
    symbol = _symbol;
    decimals = _decimals;
  }
}

// File: contracts/HashtagSimpleDeal.sol

/**
*  @title Simple Deal Hashtag
*  @dev Created in Swarm City anno 2017,
*  for the world, with love.
*  description Symmetrical Escrow Deal Contract
*  description This is the hashtag contract for creating Swarm City marketplaces.
*  It's the first, most simple approach to making Swarm City work.
*  This contract creates "SimpleDeals".
*/



contract HashtagSimpleDeal is Ownable {
    /// @param_hashtagName The human readable name of the hashtag
    string public hashtagName;
    /// @param_hashtagFee The fixed hashtag fee in SWT
    uint public hashtagFee;
    /// @param_token The SWT token
    IMiniMeToken public token;
    /// @param_ProviderRep The rep token that is minted for the Provider
    DetailedERC20 public ProviderRep;
    /// @param_SeekerRep The rep token that is minted for the Seeker
    DetailedERC20 public SeekerRep;
    /// @param_payoutaddress The address where the hashtag fee is sent.
    address public payoutAddress;
    /// @param_hashtagMetadataHash The IPFS hash metadata for this hashtag
    /// @dev using bytes32 instead of string, * ref https://ethereum.stackexchange.com/questions/17094/how-to-store-ipfs-hash-using-bytes
    bytes32 public hashtagMetadataHash;
    /// @param_deployBlock Set in the constructor. Used to log more efficiently
    uint public deployBlock;
    /// @param_itemsHash Array with all items hashes.
    bytes32[] public itemHashes;

    /// @notice itemStatuses enum
    enum itemStatuses {
		Open,
        Funded,
		Done,
		Disputed,
		Resolved,
		Cancelled
    }

    /// @param_replyStruct The reply object.
    /// @param_replyValue The value of the reply (SWT)
    /// @param_provider The address of the provider
	/// @param_deals Array of deals made by this hashtag

    struct replyStruct {
        uint replyValue;
        uint providerRep;
        address providerAddress;
        bytes32 itemMetadataHash;
    }

    /// @param_dealStruct The deal object.
    /// @param_status Coming from itemStatuses enum.
    /// Statuses: Open, Done, Disputed, Resolved, Cancelled
    /// @param_hashtagFee The value of the hashtag fee is stored in the deal. This prevents the hashtagmaintainer to influence an existing deal when changing the hashtag fee.
    /// @param_dealValue The value of the deal (SWT)
    /// @param_provider The address of the provider
	/// @param_deals Array of deals made by this hashtag

    struct itemStruct {
        itemStatuses status;
        uint hashtagFee;
        uint itemValue;
        uint providerRep;
        uint seekerRep;
        address providerAddress;
        address seekerAddress;
        bytes32 itemMetadataHash;
        bytes32[] replies;
        address[] repliers;
        uint creationBlock;
    }

    mapping(bytes32=>itemStruct) items;

    /// @dev Event Seeker reputation token is minted and sent
    event SeekerRepAdded(address to, uint amount);

    /// @dev Event Provider reputation token is minted and sent
    event ProviderRepAdded(address to, uint amount);

    /// @dev Event NewItem - This event is fired when a new item is created
    event NewItem(address owner, bytes32 itemHash, bytes32 itemMetadataHash, uint itemValue, uint hashtagFee, uint seekerRep);

    /// @dev Event ReplyItem - This event is fired when a new reply is added
    event ReplyItem(bytes32 indexed itemHash, bytes32 replyMetadataHash, address provider);

    /// @dev Event RejectSelection - This event is fired when a selectee rejects the selection
    event RejectSelection(bytes32 indexed itemHash, address selectee);

    /// @dev ItemStatusChange - This event is fired when an item status is updated
    event ItemChange(bytes32 indexed itemHash, itemStatuses newstatus, address providerAddress);

    /// @dev ReceivedApproval - This event is fired when minime sends approval
    event ReceivedApproval(address sender, uint amount, address fromcontract, bytes extraData);
    event OnTokenTransfer(address sender, uint256 amount, bytes extraData);

    /// @dev hashtagChanged - This event is fired when any of the metadata is changed
    event HashtagChanged(string _change);

    /// @notice The function that creates the hashtag
    constructor(address _token, string _hashtagName, uint _hashtagFee, bytes32 _hashtagMetadataHash) public {

        /// @notice The name of the hashtag is set
        hashtagName = _hashtagName;

        /// @notice The seeker reputation token is created
        SeekerRep = new DetailedERC20("SeekerRep", "SWRS", 0);

        /// @notice The provider reputation token is created
        ProviderRep = new DetailedERC20("ProviderRep", "SWRP", 0);

        /// @notice SWT token is added
        token = IMiniMeToken(_token);

        /// Metadata added
        hashtagMetadataHash = _hashtagMetadataHash;

        /// hashtag fee is set to ...
        hashtagFee = _hashtagFee;

        /// Hashtag fee payout address is set
        /// First time we set it to msg.sender
        payoutAddress = msg.sender;

        /// Set creation block 
        deployBlock = block.number;
    }

    function receiveApproval(address _msgsender, uint _amount, address _fromcontract, bytes _extraData) public {
        require(address(this).call(_extraData), "Error calling extraData");
        emit ReceivedApproval(_msgsender, _amount, _fromcontract, _extraData);
    }

    function onTokenTransfer(address _msgsender, uint256 _amount, bytes _extraData) public {
        require(address(this).call(_extraData), "Error calling extraData");
        emit OnTokenTransfer(_msgsender, _amount, _extraData);
    }

    /// @notice The Hashtag owner can always update the payout address.
    function setPayoutAddress(address _payoutAddress) public onlyOwner {
        payoutAddress = _payoutAddress;
        emit HashtagChanged("payoutAddress changed");
    }

    /// @notice The Hashtag owner can always update the metadata for the hashtag.
    function setMetadataHash(bytes32 _hashtagMetadataHash ) public onlyOwner  {
        hashtagMetadataHash = _hashtagMetadataHash;
        emit HashtagChanged("metaDataHash changed");
    }

    /// @notice The Hashtag owner can always change the hashtag fee amount
    function setHashtagFee(uint _newHashtagFee) public onlyOwner {
        hashtagFee = _newHashtagFee;
        emit HashtagChanged("hashtagFee changed");
    }

    /// @notice The item making stuff

    /// @notice The create item function
    function newItem(
        bytes32 _itemHash, 
        uint _itemValue, 
        bytes32 _itemMetadataHash
    ) public {
        /// @dev make sure there is enough to pay the hashtag fee later on
        require (hashtagFee / 2 <= _itemValue, "Overflow protection: item value");
        require (_itemValue + hashtagFee / 2 >= _itemValue, "Overflow protection: total value");

        /// @dev if deal already exists don't allow to overwrite it
        require (items[_itemHash].hashtagFee == 0 && items[_itemHash].itemValue == 0, "hashtagFee and itemValue must be 0");

        /// @dev The Seeker transfers SWT to the hashtagcontract
        //  require (token.transferFrom(tx.origin, this, _itemValue + hashtagFee / 2), "Error transfering funds to contract");

        /// @dev The Seeker pays half of the hashtagFee to the Maintainer
        require(token.transfer(payoutAddress, hashtagFee / 2), "");

        /// @dev Initialize item struct
        itemStruct memory item;
        item.status = itemStatuses.Open;
        item.hashtagFee = hashtagFee;
        item.itemValue = _itemValue;
        item.seekerRep = SeekerRep.balanceOf(tx.origin);
        item.seekerAddress = tx.origin;
        item.itemMetadataHash = _itemMetadataHash;
        item.creationBlock = block.number;
        items[_itemHash] = item;

        /// @dev Append itemHash to the itemHashes record
        itemHashes.push(_itemHash);

        emit NewItem(
            tx.origin,
            _itemHash,
            _itemMetadataHash,
            _itemValue,
            hashtagFee, 
            SeekerRep.balanceOf(tx.origin)
        );
    }

    /// @notice The reply function
    function replyItem(bytes32 _itemHash, bytes32 _replyMetadataHash) public {
        items[_itemHash].replies.push(_replyMetadataHash);
        items[_itemHash].repliers.push(msg.sender);
        emit ReplyItem(_itemHash, _replyMetadataHash, msg.sender);
    }

    /// @notice The select function
    function selectReplier(bytes32 _itemHash, address _selectedReplier) public {
        itemStruct storage c = items[_itemHash];
        require (c.seekerAddress == msg.sender || c.providerAddress == msg.sender, "Sender must be the seeker");
        if(c.providerAddress == msg.sender) {
            c.providerAddress = 0x0;
            emit RejectSelection(_itemHash, msg.sender);
        }
        if(c.seekerAddress == msg.sender) {
            c.providerAddress = _selectedReplier;
        }
        emit ItemChange(_itemHash, c.status, _selectedReplier);
    }
    /// @dev To deselect, send 0x0 as _selectedReplier

    /// @notice Provider has to fund the deal
    function fundItem(bytes32 _itemHash) public {
        itemStruct storage c = items[_itemHash];

        /// @dev only allow open deals to be funded
        require (c.status == itemStatuses.Open, "Item must be in Open status");

        /// @dev if the provider is filled in - the deal was already funded
        require (c.providerAddress == tx.origin, "The selected provider must be the sender");

        /// @dev put the tokens from the provider on the deal
        require (c.itemValue + c.hashtagFee / 2 >= c.itemValue, "Overflow protection: total item value");

        /// @dev The fundItem method is called through a MiniMeToken ApproveAndCall method. 
        /// The msg.sender approves this contract to spend x amount and the the token transferFrom is called
        /// If someone exploits tx.origin through another contract the transferFrom would reject because it hasn't been previously authorized
        // // COMMENTED: no longer needed as the transferAndCall function already executed this
        //require (token.transferFrom(tx.origin, this, c.itemValue + c.hashtagFee / 2), "Error transfering tokens to the hashtag");

        /// @dev The Seeker pays half of the hashtagFee to the Maintainer
        require(token.transfer(payoutAddress, c.hashtagFee / 2), "Error transfering funds");

        /// @dev fill in the address of the provider ( to payout the deal later on )
        items[_itemHash].providerRep = ProviderRep.balanceOf(tx.origin);

        /// @dev you can only fund open deals
        items[_itemHash].status = itemStatuses.Funded;
        
        emit ItemChange(_itemHash, c.status, tx.origin);
    }

    /// @notice The payout function can only be called by the deal owner.
    function payoutItem(bytes32 _itemHash) public {

        itemStruct storage c = items[_itemHash];

        /// @dev Only Seeker can payout
        require (c.seekerAddress == msg.sender, "Sender must be the seeker");

        /// @dev you can only payout funded deals
        require (c.status == itemStatuses.Funded || c.status == itemStatuses.Disputed, "Item must be in Funded or Disputed status");

        /// @dev pay out the provider
        require (token.transfer(c.providerAddress,c.itemValue * 2), "Error transfering funds to the provider");

        /// @dev mint REP for Provider
        ProviderRep.mint(c.providerAddress, 5);
        emit ProviderRepAdded(c.providerAddress, 5);

        /// @dev mint REP for Seeker
        SeekerRep.mint(c.seekerAddress, 5);
        emit SeekerRepAdded(c.seekerAddress, 5);

        /// @dev mark the deal as done
        items[_itemHash].status = itemStatuses.Done;
        emit ItemChange(_itemHash, c.status, c.providerAddress);

    }

    /// @notice The Cancel Item Function
    /// @notice Half of the HashtagFee is sent to PayoutAddress
    function cancelItem(bytes32 _itemHash) public {
        itemStruct storage c = items[_itemHash];
        if(c.itemValue > 0 && c.providerAddress == 0x0 && c.status == itemStatuses.Open) {
            /// @dev The Seeker gets the remaining value
            require(token.transfer(c.seekerAddress, c.itemValue), "Error transfering fund to the seeker");
            emit ItemChange(_itemHash, itemStatuses.Cancelled, msg.sender);
        }
    }

    /// @notice The Dispute Item Function
    /// @notice The Seeker or Provider can dispute an item, only the Maintainer can resolve it.
    function disputeItem(bytes32 _itemHash) public {
        itemStruct storage c = items[_itemHash];
        require (c.status == itemStatuses.Funded, "Item must be in Funded status");

        if (msg.sender == c.seekerAddress) {
            /// @dev Seeker starts the dispute
            /// @dev Only items with Provider set can be disputed
            require (c.providerAddress != 0x0, "provider not 0 not open");
        } else {
            /// @dev Provider starts dispute
            require (c.providerAddress == msg.sender, "sender is provider");
        }
        /// @dev Set itemStatus to Disputed
        items[_itemHash].status = itemStatuses.Disputed;
        
        emit ItemChange(_itemHash, c.status, c.providerAddress);

    } 

    /// @notice The Resolve Item Function ♡
    /// @notice The Maintainer resolves the disputed item.
    function resolveItem(bytes32 _itemHash, uint _seekerFraction) public {
        itemStruct storage c = items[_itemHash];
        require (msg.sender == payoutAddress, "Sender must be the hashtag owner");
        require (c.status == itemStatuses.Disputed, "Item must be in Disputed status");
        require (token.transfer(c.seekerAddress, _seekerFraction), "Error transfering funds to the seeker");
        require (c.itemValue * 2 - _seekerFraction <= c.itemValue * 2, "Overflow protection");
        require (token.transfer(c.providerAddress, c.itemValue * 2 - _seekerFraction), "Error transfering funds to the provider");
        items[_itemHash].status = itemStatuses.Resolved;

        emit ItemChange(_itemHash, c.status, c.providerAddress);
    }

    /// @notice Read the data details of a deal
    function readItemData(bytes32 _itemHash) public view returns (
            itemStatuses status, 
            address providerAddress,
            uint providerRep,
            uint numberOfReplies)
        {
        return (
            items[_itemHash].status,
            items[_itemHash].providerAddress,
            items[_itemHash].providerRep,
            items[_itemHash].replies.length);
    }

    /// @notice Read the data details of a deal
    function readItemState(bytes32 _itemHash) public view returns (
            uint _itemValue,
            uint _seekerRep,
            address _seekerAddress,
            bytes32 _itemMetadataHash,
            uint _creationBlock
            )
        {
        return (
            items[_itemHash].itemValue,
            items[_itemHash].seekerRep,
            items[_itemHash].seekerAddress,
            items[_itemHash].itemMetadataHash,
            items[_itemHash].creationBlock
        );
    }

    /// @notice Read the details of a deal
    function readItemMetadataHash(bytes32 _itemHash) public view returns (bytes32 itemMetadataHash) {
        return (items[_itemHash].itemMetadataHash);
    }

    /// @notice Returns an array of all items' hash in the hashtag
    /// This array can potentially by really large. This can cause trouble if the array length is > 60.000
    /// In that case the gas on the eth_call should be increased to a huge number like 2**50
    /// * ref https://github.com/paritytech/parity-ethereum/issues/6293
    /// * ref https://ethereum.stackexchange.com/questions/23918/what-is-the-array-size-limit-of-a-returned-array-from-a-contract-function-call-i
    function getitemHashes() public view returns(bytes32[]) {
        return itemHashes;
    }

    function getItemsCount() public view returns(uint) {
        return itemHashes.length;
    }

    function getItemRepliesCount(bytes32 _itemHash) public view returns(uint) {
        return items[_itemHash].replies.length;
    }

    function getItemReply(bytes32 _itemHash, uint _index) public view returns(bytes32) {
        return items[_itemHash].replies[_index];
    }

    function getItemReplies(bytes32 _itemHash) public view returns(bytes32[]) {
        return items[_itemHash].replies;
    }

    function getItemRepliers(bytes32 _itemHash) public view returns(address[]) {
        return items[_itemHash].repliers;
    }
    
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"getitemHashes","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ProviderRep","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_payoutAddress","type":"address"}],"name":"setPayoutAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"},{"name":"_selectedReplier","type":"address"}],"name":"selectReplier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"itemHashes","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getItemsCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payoutAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashtagName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"readItemState","outputs":[{"name":"_itemValue","type":"uint256"},{"name":"_seekerRep","type":"uint256"},{"name":"_seekerAddress","type":"address"},{"name":"_itemMetadataHash","type":"bytes32"},{"name":"_creationBlock","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"readItemData","outputs":[{"name":"status","type":"uint8"},{"name":"providerAddress","type":"address"},{"name":"providerRep","type":"uint256"},{"name":"numberOfReplies","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"},{"name":"_seekerFraction","type":"uint256"}],"name":"resolveItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"fundItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"payoutItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hashtagMetadataHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"readItemMetadataHash","outputs":[{"name":"itemMetadataHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_msgsender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_fromcontract","type":"address"},{"name":"_extraData","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_hashtagMetadataHash","type":"bytes32"}],"name":"setMetadataHash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"},{"name":"_itemValue","type":"uint256"},{"name":"_itemMetadataHash","type":"bytes32"}],"name":"newItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"getItemRepliers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_msgsender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"cancelItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"getItemRepliesCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SeekerRep","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"},{"name":"_index","type":"uint256"}],"name":"getItemReply","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newHashtagFee","type":"uint256"}],"name":"setHashtagFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"disputeItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemHash","type":"bytes32"},{"name":"_replyMetadataHash","type":"bytes32"}],"name":"replyItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemHash","type":"bytes32"}],"name":"getItemReplies","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashtagFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_hashtagName","type":"string"},{"name":"_hashtagFee","type":"uint256"},{"name":"_hashtagMetadataHash","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"SeekerRepAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ProviderRepAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"itemHash","type":"bytes32"},{"indexed":false,"name":"itemMetadataHash","type":"bytes32"},{"indexed":false,"name":"itemValue","type":"uint256"},{"indexed":false,"name":"hashtagFee","type":"uint256"},{"indexed":false,"name":"seekerRep","type":"uint256"}],"name":"NewItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"itemHash","type":"bytes32"},{"indexed":false,"name":"replyMetadataHash","type":"bytes32"},{"indexed":false,"name":"provider","type":"address"}],"name":"ReplyItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"itemHash","type":"bytes32"},{"indexed":false,"name":"selectee","type":"address"}],"name":"RejectSelection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"itemHash","type":"bytes32"},{"indexed":false,"name":"newstatus","type":"uint8"},{"indexed":false,"name":"providerAddress","type":"address"}],"name":"ItemChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fromcontract","type":"address"},{"indexed":false,"name":"extraData","type":"bytes"}],"name":"ReceivedApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"extraData","type":"bytes"}],"name":"OnTokenTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_change","type":"string"}],"name":"HashtagChanged","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
60806040523480156200001157600080fd5b50604051620032bb380380620032bb833981016040908152815160208084015192840151606085015160008054600160a060020a0319163317905593909401805192949093909290916200006b9160019186019062000218565b506000620000786200029d565b60ff90911660408083019190915260608083526009908301527f5365656b65725265700000000000000000000000000000000000000000000000608083015260a0602083018190526004908301527f535752530000000000000000000000000000000000000000000000000000000060c0830152519081900360e001906000f0801580156200010b573d6000803e3d6000fd5b5060058054600160a060020a031916600160a060020a03929092169190911790556000620001386200029d565b60ff9091166040808301919091526060808352600b908301527f50726f7669646572526570000000000000000000000000000000000000000000608083015260a0602083018190526004908301527f535752500000000000000000000000000000000000000000000000000000000060c0830152519081900360e001906000f080158015620001cb573d6000803e3d6000fd5b5060048054600160a060020a03928316600160a060020a031991821617909155600380549690921695811695909517905560075560025550600680549091163317905543600855620002ce565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025b57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028b5782518255916020019190600101906200026e565b5062000299929150620002ae565b5090565b60405161091480620029a783390190565b620002cb91905b80821115620002995760008155600101620002b5565b90565b6126c980620002de6000396000f3006080604052600436106101ab5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630ccfe6e181146101b05780632a5cd1c11461021557806333ea51a81461024657806338febf54146102695780633f8656781461028d578063512dd020146102b75780635b8d02d7146102cc57806365dab005146102e157806367a28fa81461036b57806368c6d58b146103b65780636d8f173e1461040e578063715018a6146104295780637e3cf5561461043e5780638022abec14610456578063822bbec61461046e5780638781688e146104835780638da5cb5b1461049b5780638f4ffcb1146104b057806390578c81146105205780639b697a9414610538578063a105b08d14610556578063a3ec191a1461056e578063a4c0ed3614610583578063ae6ff03f146105ec578063ba9ad57114610604578063bc0ab3e51461061c578063db944b1a14610631578063e94176d01461064c578063ebfce11f14610664578063ecaa87dd1461067c578063f2fde38b14610697578063f7282bb6146106b8578063fb3b8a00146106d0578063fc0c546a146106e5575b600080fd5b3480156101bc57600080fd5b506101c56106fa565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102015781810151838201526020016101e9565b505050509050019250505060405180910390f35b34801561022157600080fd5b5061022a610754565b60408051600160a060020a039092168252519081900360200190f35b34801561025257600080fd5b50610267600160a060020a0360043516610763565b005b34801561027557600080fd5b50610267600435600160a060020a03602435166107f9565b34801561029957600080fd5b506102a5600435610968565b60408051918252519081900360200190f35b3480156102c357600080fd5b506102a5610987565b3480156102d857600080fd5b5061022a61098d565b3480156102ed57600080fd5b506102f661099c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610330578181015183820152602001610318565b50505050905090810190601f16801561035d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037757600080fd5b50610383600435610a29565b604080519586526020860194909452600160a060020a039092168484015260608401526080830152519081900360a00190f35b3480156103c257600080fd5b506103ce600435610a65565b604051808560058111156103de57fe5b60ff168152600160a060020a03909416602085015250604080840192909252606083015251908190036080019150f35b34801561041a57600080fd5b50610267600435602435610a9b565b34801561043557600080fd5b50610267610e3e565b34801561044a57600080fd5b50610267600435610e9d565b34801561046257600080fd5b50610267600435611222565b34801561047a57600080fd5b506102a561167e565b34801561048f57600080fd5b506102a5600435611684565b3480156104a757600080fd5b5061022a611699565b3480156104bc57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261026794600160a060020a038135811695602480359660443590931695369560849492019181908401838280828437509497506116a89650505050505050565b34801561052c57600080fd5b50610267600435611850565b34801561054457600080fd5b506102676004356024356044356118cf565b34801561056257600080fd5b506101c5600435611dcf565b34801561057a57600080fd5b506102a5611e3e565b34801561058f57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610267948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611e449650505050505050565b3480156105f857600080fd5b50610267600435611fd1565b34801561061057600080fd5b506102a560043561214d565b34801561062857600080fd5b5061022a612162565b34801561063d57600080fd5b506102a5600435602435612171565b34801561065857600080fd5b506102676004356121a1565b34801561067057600080fd5b50610267600435612220565b34801561068857600080fd5b50610267600435602435612397565b3480156106a357600080fd5b50610267600160a060020a0360043516612420565b3480156106c457600080fd5b506101c56004356124a7565b3480156106dc57600080fd5b506102a561250c565b3480156106f157600080fd5b5061022a612512565b6060600980548060200260200160405190810160405280929190818152602001828054801561074957602002820191906000526020600020905b81548152600190910190602001808311610734575b505050505090505b90565b600454600160a060020a031681565b600054600160a060020a0316331461077a57600080fd5b60068054600160a060020a031916600160a060020a0383161790556040805160208082526015908201527f7061796f757441646472657373206368616e67656400000000000000000000008183015290517ff77c9c1190f2fd7e281cefd1d3e66f82d21115fe87d8893ecc4330ae322e9dcb916060908290030190a150565b6000828152600a602052604090206006810154600160a060020a031633148061082e57506005810154600160a060020a031633145b1515610884576040805160e560020a62461bcd02815260206004820152601960248201527f53656e646572206d75737420626520746865207365656b657200000000000000604482015290519081900360640190fd5b6005810154600160a060020a03163314156108e257600581018054600160a060020a031916905560408051338152905184917f888e13f821a4376ffd11d58a022b56d42b66049aca768ebe71c677bebc7433f7919081900360200190a25b6006810154600160a060020a031633141561091557600581018054600160a060020a031916600160a060020a0384161790555b8054604051849160008051602061267e8339815191529160ff9091169085908083600581111561094157fe5b60ff168152600160a060020a039092166020830152506040805191829003019150a2505050565b600980548290811061097657fe5b600091825260209091200154905081565b60095490565b600654600160a060020a031681565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b505050505081565b6000908152600a602081905260409091206002810154600482015460068301546007840154939094015491949093600160a060020a0316929190565b6000908152600a6020526040902080546005820154600383015460089093015460ff90921693600160a060020a03909116929190565b6000828152600a60205260409020600654600160a060020a03163314610b0b576040805160e560020a62461bcd02815260206004820181905260248201527f53656e646572206d757374206265207468652068617368746167206f776e6572604482015290519081900360640190fd5b6003815460ff166005811115610b1d57fe5b14610b72576040805160e560020a62461bcd02815260206004820152601f60248201527f4974656d206d75737420626520696e2044697370757465642073746174757300604482015290519081900360640190fd5b60035460068201546040805160e060020a63a9059cbb028152600160a060020a039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b505050506040513d6020811015610bfa57600080fd5b50511515610c78576040805160e560020a62461bcd02815260206004820152602560248201527f4572726f72207472616e73666572696e672066756e647320746f20746865207360448201527f65656b6572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600280820154028281031115610cd8576040805160e560020a62461bcd02815260206004820152601360248201527f4f766572666c6f772070726f74656374696f6e00000000000000000000000000604482015290519081900360640190fd5b60035460058201546002808401546040805160e060020a63a9059cbb028152600160a060020a0394851660048201529190920286900360248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015610d4157600080fd5b505af1158015610d55573d6000803e3d6000fd5b505050506040513d6020811015610d6b57600080fd5b50511515610de9576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f72207472616e73666572696e672066756e647320746f20746865207060448201527f726f766964657200000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838152600a602052604090819020805460ff1916600417905581546005808401549251869360008051602061267e8339815191529360ff1692600160a060020a0390911691908190849081111561094157fe5b600054600160a060020a03163314610e5557600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b6000818152600a6020526040812090815460ff166005811115610ebc57fe5b14610f11576040805160e560020a62461bcd02815260206004820152601b60248201527f4974656d206d75737420626520696e204f70656e207374617475730000000000604482015290519081900360640190fd5b6005810154600160a060020a03163214610f9b576040805160e560020a62461bcd02815260206004820152602860248201527f5468652073656c65637465642070726f7669646572206d75737420626520746860448201527f652073656e646572000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b806002015460028260010154811515610fb057fe5b0482600201540110151515611035576040805160e560020a62461bcd02815260206004820152602560248201527f4f766572666c6f772070726f74656374696f6e3a20746f74616c206974656d2060448201527f76616c7565000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60035460065460018301546040805160e060020a63a9059cbb028152600160a060020a0393841660048201526002909204602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561109857600080fd5b505af11580156110ac573d6000803e3d6000fd5b505050506040513d60208110156110c257600080fd5b5051151561111a576040805160e560020a62461bcd02815260206004820152601760248201527f4572726f72207472616e73666572696e672066756e6473000000000000000000604482015290519081900360640190fd5b60048054604080517f70a08231000000000000000000000000000000000000000000000000000000008152329381019390935251600160a060020a03909116916370a082319160248083019260209291908290030181600087803b15801561118157600080fd5b505af1158015611195573d6000803e3d6000fd5b505050506040513d60208110156111ab57600080fd5b50516000838152600a6020526040908190206003810192909255815460ff191660011790915581549051839160008051602061267e8339815191529160ff909116903290808360058111156111fc57fe5b60ff168152600160a060020a039092166020830152506040805191829003019150a25050565b6000818152600a602052604090206006810154600160a060020a03163314611294576040805160e560020a62461bcd02815260206004820152601960248201527f53656e646572206d75737420626520746865207365656b657200000000000000604482015290519081900360640190fd5b6001815460ff1660058111156112a657fe5b14806112c157506003815460ff1660058111156112bf57fe5b145b151561133d576040805160e560020a62461bcd02815260206004820152602960248201527f4974656d206d75737420626520696e2046756e646564206f722044697370757460448201527f6564207374617475730000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60035460058201546002808401546040805160e060020a63a9059cbb028152600160a060020a0394851660048201529190920260248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156113a357600080fd5b505af11580156113b7573d6000803e3d6000fd5b505050506040513d60208110156113cd57600080fd5b5051151561144b576040805160e560020a62461bcd02815260206004820152602760248201527f4572726f72207472616e73666572696e672066756e647320746f20746865207060448201527f726f766964657200000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60048054600580840154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a0392831695810195909552602485019290925290519116916340c10f199160448083019260209291908290030181600087803b1580156114c257600080fd5b505af11580156114d6573d6000803e3d6000fd5b505050506040513d60208110156114ec57600080fd5b505060058082015460408051600160a060020a039092168252602082019290925281517f9b65e2e805a77c59940d80a27ad19ac784d41e4f7ab85cb086437fb35c2bdfba929181900390910190a1600580546006830154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810194909452519116916340c10f199160448083019260209291908290030181600087803b1580156115ad57600080fd5b505af11580156115c1573d6000803e3d6000fd5b505050506040513d60208110156115d757600080fd5b5050600681015460408051600160a060020a0390921682526005602083015280517f4c7c9ac2da5fcc9b685e17810d0c7f6b8cbfb32601e0f70cb788a8b527de07d59281900390910190a16000828152600a6020526040902080546002919060ff19166001835b02179055508054600580830154604051859360008051602061267e8339815191529360ff90911692600160a060020a03169190819084908111156111fc57fe5b60075481565b6000908152600a602052604090206007015490565b600054600160a060020a031681565b30600160a060020a03168160405180828051906020019080838360005b838110156116dd5781810151838201526020016116c5565b50505050905090810190601f16801561170a5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19150501515611775576040805160e560020a62461bcd02815260206004820152601760248201527f4572726f722063616c6c696e6720657874726144617461000000000000000000604482015290519081900360640190fd5b7f87e06b1b8a771d31d61a99c983030a65053deb5ade31175392ab61d50bdc3cbb848484846040518085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561180d5781810151838201526020016117f5565b50505050905090810190601f16801561183a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a150505050565b600054600160a060020a0316331461186757600080fd5b60078190556040805160208082526014908201527f6d6574614461746148617368206368616e6765640000000000000000000000008183015290517ff77c9c1190f2fd7e281cefd1d3e66f82d21115fe87d8893ecc4330ae322e9dcb9181900360600190a150565b6118d7612521565b6002805404831015611933576040805160e560020a62461bcd02815260206004820152601f60248201527f4f766572666c6f772070726f74656374696f6e3a206974656d2076616c756500604482015290519081900360640190fd5b60028054048301831115611991576040805160e560020a62461bcd02815260206004820181905260248201527f4f766572666c6f772070726f74656374696f6e3a20746f74616c2076616c7565604482015290519081900360640190fd5b6000848152600a60205260409020600101541580156119bf57506000848152600a6020526040902060020154155b1515611a3b576040805160e560020a62461bcd02815260206004820152602260248201527f6861736874616746656520616e64206974656d56616c7565206d75737420626560448201527f2030000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600354600654600280546040805160e060020a63a9059cbb028152600160a060020a03948516600482015292909104602483015251919092169163a9059cbb9160448083019260209291908290030181600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050506040513d6020811015611ac657600080fd5b50511515611af8576040805160e560020a62461bcd028152602060048201526000602482015290519081900360640190fd5b60008181905250600254602080830191909152604080830185905260055481517f70a082310000000000000000000000000000000000000000000000000000000081523260048201529151600160a060020a03909116926370a0823192602480820193918290030181600087803b158015611b7257600080fd5b505af1158015611b86573d6000803e3d6000fd5b505050506040513d6020811015611b9c57600080fd5b505160808201523260c082015260e08101829052436101408201526000848152600a602052604090208151815483929190829060ff19166001836005811115611be157fe5b0217905550602082810151600183015560408301516002830155606083015160038301556080830151600483015560a0830151600583018054600160a060020a03928316600160a060020a03199182161790915560c085015160068501805491909316911617905560e083015160078301556101008301518051611c6b9260088501920190612591565b506101208201518051611c889160098401916020909101906125de565b506101409190910151600a909101556009805460018101825560009182527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01859055600254600554604080517f70a08231000000000000000000000000000000000000000000000000000000008152326004820181905291517faae6f8b07fc1ad79e7a50b0837be2bcc954875ff476281f17a4dd37cd37407e09592948a9489948b949293600160a060020a03909216926370a082319260248083019360209383900390910190829087803b158015611d6157600080fd5b505af1158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b505160408051600160a060020a0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a150505050565b6000818152600a6020908152604091829020600901805483518184028101840190945280845260609392830182828015611e3257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611e14575b50505050509050919050565b60085481565b30600160a060020a03168160405180828051906020019080838360005b83811015611e79578181015183820152602001611e61565b50505050905090810190601f168015611ea65780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19150501515611f11576040805160e560020a62461bcd02815260206004820152601760248201527f4572726f722063616c6c696e6720657874726144617461000000000000000000604482015290519081900360640190fd5b7f705deaba554f5e5259f0520b52995bf4750622ce89803475cf5ed3998237c1348383836040518084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611f90578181015183820152602001611f78565b50505050905090810190601f168015611fbd5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b6000818152600a6020526040812060028101549091108015611ffe57506005810154600160a060020a0316155b801561201957506000815460ff16600581111561201757fe5b145b1561214957600354600682015460028301546040805160e060020a63a9059cbb028152600160a060020a039384166004820152602481019290925251919092169163a9059cbb9160448083019260209291908290030181600087803b15801561208157600080fd5b505af1158015612095573d6000803e3d6000fd5b505050506040513d60208110156120ab57600080fd5b50511515612128576040805160e560020a62461bcd028152602060048201526024808201527f4572726f72207472616e73666572696e672066756e6420746f2074686520736560448201527f656b657200000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604051829060008051602061267e83398151915290600590339080836111fc565b5050565b6000908152600a602052604090206008015490565b600554600160a060020a031681565b6000828152600a6020526040812060080180548390811061218e57fe5b9060005260206000200154905092915050565b600054600160a060020a031633146121b857600080fd5b60028190556040805160208082526012908201527f68617368746167466565206368616e67656400000000000000000000000000008183015290517ff77c9c1190f2fd7e281cefd1d3e66f82d21115fe87d8893ecc4330ae322e9dcb9181900360600190a150565b6000818152600a602052604090206001815460ff16600581111561224057fe5b14612295576040805160e560020a62461bcd02815260206004820152601d60248201527f4974656d206d75737420626520696e2046756e64656420737461747573000000604482015290519081900360640190fd5b6006810154600160a060020a0316331415612313576005810154600160a060020a0316151561230e576040805160e560020a62461bcd02815260206004820152601760248201527f70726f7669646572206e6f742030206e6f74206f70656e000000000000000000604482015290519081900360640190fd5b612377565b6005810154600160a060020a03163314612377576040805160e560020a62461bcd02815260206004820152601260248201527f73656e6465722069732070726f76696465720000000000000000000000000000604482015290519081900360640190fd5b6000828152600a6020526040902080546003919060ff191660018361163e565b6000828152600a6020908152604080832060088101805460018181018355918652848620018690556009909101805491820181558452928290209092018054600160a060020a03191633908117909155825184815291820152815184927f2d3ad65f4966206e503b55ed38d3f872199f96590ba9bc5de2e1e07a357d7200928290030190a25050565b600054600160a060020a0316331461243757600080fd5b600160a060020a038116151561244c57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000818152600a6020908152604091829020600801805483518184028101840190945280845260609392830182828015611e3257602002820191906000526020600020905b815481526001909101906020018083116124ec5750505050509050919050565b60025481565b600354600160a060020a031681565b6040805161016081019091528060008152602001600081526020016000815260200160008152602001600081526020016000600160a060020a031681526020016000600160a060020a03168152602001600080191681526020016060815260200160608152602001600081525090565b8280548282559060005260206000209081019282156125ce579160200282015b828111156125ce57825182556020909201916001909101906125b1565b506125da92915061263f565b5090565b828054828255906000526020600020908101928215612633579160200282015b828111156126335782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906125fe565b506125da929150612659565b61075191905b808211156125da5760008155600101612645565b61075191905b808211156125da578054600160a060020a031916815560010161265f56000a49f63779122ddd30ac85f7e6e5361d8011b33ff5c73d92095fb36c787a552fa165627a7a72305820356ae4f5bedaae07f7f1511bcfdb0429a15760c322854a208d83fcb18cda2676002960806040526003805460a060020a60ff021916905534801561002057600080fd5b5060405161091438038061091483398101604090815281516020808401519284015160038054600160a060020a0319163317905591840180519094939093019261007091600491908601906100a1565b5081516100849060059060208501906100a1565b506006805460ff191660ff929092169190911790555061013c9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e257805160ff191683800117855561010f565b8280016001018555821561010f579182015b8281111561010f5782518255916020019190600101906100f4565b5061011b92915061011f565b5090565b61013991905b8082111561011b5760008155600101610125565b90565b6107c98061014b6000396000f3006080604052600436106100f05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b81146100f557806306fdde031461011e578063095ea7b3146101a857806318160ddd146101cc57806323b872dd146101f3578063313ce5671461021d57806340c10f191461024857806366188463146101a857806370a082311461026c578063715018a61461028d5780637d64bcb4146102a45780638da5cb5b146102b957806395d89b41146102ea578063a9059cbb146101a8578063d73dd623146101a8578063dd62ed3e146102ff578063f2fde38b14610326575b600080fd5b34801561010157600080fd5b5061010a610347565b604080519115158252519081900360200190f35b34801561012a57600080fd5b50610133610368565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016d578181015183820152602001610155565b50505050905090810190601f16801561019a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101b457600080fd5b5061010a600160a060020a03600435166024356103f6565b3480156101d857600080fd5b506101e16103fe565b60408051918252519081900360200190f35b3480156101ff57600080fd5b5061010a600160a060020a0360043581169060243516604435610404565b34801561022957600080fd5b5061023261040d565b6040805160ff9092168252519081900360200190f35b34801561025457600080fd5b5061010a600160a060020a0360043516602435610416565b34801561027857600080fd5b506101e1600160a060020a0360043516610531565b34801561029957600080fd5b506102a261054c565b005b3480156102b057600080fd5b5061010a6105ba565b3480156102c557600080fd5b506102ce610660565b60408051600160a060020a039092168252519081900360200190f35b3480156102f657600080fd5b5061013361066f565b34801561030b57600080fd5b506101e1600160a060020a03600435811690602435166106ca565b34801561033257600080fd5b506102a2600160a060020a03600435166106f5565b60035474010000000000000000000000000000000000000000900460ff1681565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ee5780601f106103c3576101008083540402835291602001916103ee565b820191906000526020600020905b8154815290600101906020018083116103d157829003601f168201915b505050505081565b600192915050565b60015490565b60019392505050565b60065460ff1681565b600354600090600160a060020a0316331461043057600080fd5b60035474010000000000000000000000000000000000000000900460ff161561045857600080fd5b60015461046b908363ffffffff61078a16565b600155600160a060020a038316600090815260208190526040902054610497908363ffffffff61078a16565b600160a060020a03841660008181526020818152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a038516916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600192915050565b600160a060020a031660009081526020819052604090205490565b600354600160a060020a0316331461056357600080fd5b600354604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26003805473ffffffffffffffffffffffffffffffffffffffff19169055565b600354600090600160a060020a031633146105d457600080fd5b60035474010000000000000000000000000000000000000000900460ff16156105fc57600080fd5b6003805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b600354600160a060020a031681565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ee5780601f106103c3576101008083540402835291602001916103ee565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600354600160a060020a0316331461070c57600080fd5b600160a060020a038116151561072157600080fd5b600354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8181018281101561079757fe5b929150505600a165627a7a72305820b0367b68bd0fad5b7dea852214953ef82df0a531a6f190541efbb6b21ea6af460029000000000000000000000000f69ca736d959519a79f9075021444a8a0ee384d30000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000002386f26fc100008d456e4634ed942c18f76d26e90b7abe2bf7eeded6d249ca23de459dfa4f4f9900000000000000000000000000000000000000000000000000000000000000094661726d48616e64730000000000000000000000000000000000000000000000

   Swarm Source:
bzzr://b0367b68bd0fad5b7dea852214953ef82df0a531a6f190541efbb6b21ea6af46

 

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