Contract 0xF24197f71fC9b2F4F4c24ecE461fB0Ff7C91FD23

 
Txn Hash
Method
Block
From
To
Value
0xb1170511c0c6a0ddeb932a8b0fc8f1cdc30036eb610f52522f2c3c0b3e3a8d8cCommit100093852020-05-06 0:01:31834 days 22 hrs ago0xc0aa4dc0763550161a6b59fa430361b5a26df28c IN  Swash: Contract0 Ether0.‍000334885
0x654aec003c116a256f05cf57c687759b19fc67ee598b9e7d1025cbcd0fefecc6Withdraw All For98475482020-04-10 23:42:21859 days 23 hrs agoSwash: Deployer IN  Swash: Contract0 Ether0.‍000724075.‍2121
0x9aca49e6dd59c9aed966a6f6086e7ee29b27182c5c37dc4b1692667763e41390Withdraw All For98475482020-04-10 23:42:21859 days 23 hrs ago0x4a4e02c29ad8d6c3111ba467f02fa7eb7758e071 IN  Swash: Contract0 Ether0.‍000724125.‍2121
0x18dd8e21243c9c2d8b99fae099f9f858959827af0cb58b7a08317aefc583e67fWithdraw All For98475482020-04-10 23:42:21859 days 23 hrs ago0x12ad3f850a0421c4d488f2cae65f22a4798b5f74 IN  Swash: Contract0 Ether0.‍000724175.‍2121
0x5862466364f62815ba204871de4487a248e26a9ab53dd0b705689da1d1ad4f5bWithdraw All For98475462020-04-10 23:41:36859 days 23 hrs ago0x4b43b95f85d113fef5bbebda1fdb5aa1b507001a IN  Swash: Contract0 Ether0.‍000724195.‍2121
0x988e01c1e658f908365bc9880c7f870f8eb13c40dce7b345653acda968a3d64eWithdraw All For98475452020-04-10 23:41:30859 days 23 hrs ago0x12ad3f850a0421c4d488f2cae65f22a4798b5f74 IN  Swash: Contract0 Ether0.‍000724175.‍2121
0x46f7b6249e8c29dd80851b83b8fd2674eac9b7cd7d145f62ecce29cfe8b36c56Withdraw All For98475452020-04-10 23:41:30859 days 23 hrs ago0x10d86a4bc945e6195ddeebdae38d646bc0c39b85 IN  Swash: Contract0 Ether0.‍000724135.‍2121
0x467f37265645fe32352f2cb75aedd422b5da05d664d002d0d5348a30d239d7fcWithdraw All For98475452020-04-10 23:41:30859 days 23 hrs ago0x4a4e02c29ad8d6c3111ba467f02fa7eb7758e071 IN  Swash: Contract0 Ether0.‍000724195.‍2121
0x92d78fea502e2e037f2786a41b8d1df6f2c00af1858d205fb39804110bb8f36cWithdraw All For98475442020-04-10 23:41:25859 days 23 hrs agoSwash: Deployer IN  Swash: Contract0 Ether0.‍000724295.‍2121
0xdd40ddf09460db578a33cfce133bb7ea46e2192d7ced3aa81f2fd265667d0f60Withdraw All For98475402020-04-10 23:40:50859 days 23 hrs ago0x10d86a4bc945e6195ddeebdae38d646bc0c39b85 IN  Swash: Contract0 Ether0.‍000724245.‍2121
0x48e613d699f572900e0f2ecb9c1ba46c3f2562335ca402350a03b5fbf0ab3855Withdraw All For98475402020-04-10 23:40:50859 days 23 hrs ago0x12ad3f850a0421c4d488f2cae65f22a4798b5f74 IN  Swash: Contract0 Ether0.‍000724235.‍2121
0x149a4e3f5ea652e40c5710d59531c9173ae0259b263dec53f4236b5d9666bd60Withdraw All For98475402020-04-10 23:40:50859 days 23 hrs ago0x4b43b95f85d113fef5bbebda1fdb5aa1b507001a IN  Swash: Contract0 Ether0.‍000724055.‍2121
0x438e83bf29347cc0611b9eb2240676f746db22cdc9cd62e0aeacbb1ee2050dffWithdraw All For98475392020-04-10 23:40:43859 days 23 hrs ago0x4a4e02c29ad8d6c3111ba467f02fa7eb7758e071 IN  Swash: Contract0 Ether0.‍000724175.‍2121
0x98c997af93810e9f42c137af80d53d61b85ee3e7026a8b74d0d7f16028474ee9Withdraw All For98475392020-04-10 23:40:43859 days 23 hrs agoSwash: Deployer IN  Swash: Contract0 Ether0.‍000724235.‍2121
0x2a264266a7a879bc8f708d575c83be529e18c79c0db070dc8b3941e05969c0c3Withdraw All For98475372020-04-10 23:40:31859 days 23 hrs ago0x4a4e02c29ad8d6c3111ba467f02fa7eb7758e071 IN  Swash: Contract0 Ether0.‍000724245.‍2121
0xfc5e60639c336d74d86c4c70fd1bd216fa1ccd4c0927c6a5f484624af1113ba4Withdraw All For98475372020-04-10 23:40:31859 days 23 hrs ago0x10d86a4bc945e6195ddeebdae38d646bc0c39b85 IN  Swash: Contract0 Ether0.‍000724345.‍2121
0x7b6d253390f41790153b7d6321dffc1fc96dff61e2ddfbc901195317a319fcb1Withdraw All For98475372020-04-10 23:40:31859 days 23 hrs ago0x4b43b95f85d113fef5bbebda1fdb5aa1b507001a IN  Swash: Contract0 Ether0.‍0007245.‍2121
0x384a6a66354928b455fdcf38b1a2c7b2eaea79adb3944476c5b3f0ffb791ec27Withdraw All For98475372020-04-10 23:40:31859 days 23 hrs agoSwash: Deployer IN  Swash: Contract0 Ether0.‍000724245.‍2121
0x72b00818d0c7168ca4b452572134fd7778567d414e70992182821df204e605f1Withdraw All For98475372020-04-10 23:40:31859 days 23 hrs ago0x12ad3f850a0421c4d488f2cae65f22a4798b5f74 IN  Swash: Contract0 Ether0.‍000724195.‍2121
0x951d485c8a38775e7df88f57d244c9121eb3d97633c952d163a3d1e8a442f238Withdraw All For98475352020-04-10 23:40:04859 days 23 hrs agoSwash: Deployer IN  Swash: Contract0 Ether0.‍000724245.‍2121
0x1bf53e8c8564bbcf8d11c8e5eaa4dd79b31520adf2fc4a4fefcecfe56fcb8038Withdraw All For98475352020-04-10 23:40:04859 days 23 hrs ago0x4b43b95f85d113fef5bbebda1fdb5aa1b507001a IN  Swash: Contract0 Ether0.‍000724235.‍2121
0x73f222b7b4014c13b1bd1e73d79a4e32cc0c4444400b58cf17e994d667d1ba66Withdraw All For98475352020-04-10 23:40:04859 days 23 hrs ago0x4a4e02c29ad8d6c3111ba467f02fa7eb7758e071 IN  Swash: Contract0 Ether0.‍000724295.‍2121
0x68596aaa21c7ddbb16feff4e05ed57b311637fb5be8d93a4f3c424f96e6594f8Withdraw All For98475342020-04-10 23:39:33859 days 23 hrs ago0x12ad3f850a0421c4d488f2cae65f22a4798b5f74 IN  Swash: Contract0 Ether0.‍000724245.‍2121
0xcc6039dccd9b8915db40f07823ffbab76a1a79c70462a5a6d3cf4f26c5be2cedWithdraw All For98475342020-04-10 23:39:33859 days 23 hrs ago0x10d86a4bc945e6195ddeebdae38d646bc0c39b85 IN  Swash: Contract0 Ether0.‍000724195.‍2121
0x183e8b3430a13c408a2dc091f55e10d324ec988db2ea3bc4984fd91d5b7b2855Withdraw All For98475322020-04-10 23:38:46859 days 23 hrs ago0x4a4e02c29ad8d6c3111ba467f02fa7eb7758e071 IN  Swash: Contract0 Ether0.‍000724075.‍2121
[ Download CSV Export 

OVERVIEW

Swash is a browser extension for collecting and aggregating your browsing activities. This extension collects information about your browsing activities and gives you, ability to sell your data on the Streamr Marketplace.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CommunityProduct

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-10-30
*/

pragma solidity ^0.4.24;

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

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

    uint256 c = a * b;
    require(c / a == b);

    return c;
  }

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

    return c;
  }

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

    return c;
  }

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

    return c;
  }

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


/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

  function transfer(address to, uint256 value) external returns (bool);

  function approve(address spender, uint256 value)
    external returns (bool);

  function transferFrom(address from, address to, uint256 value)
    external returns (bool);

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

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


/**
 * Abstract contract, requires implementation to specify who can commit blocks and what
 *   happens when a successful proof is presented
 * Verifies Merkle-tree inclusion proofs that show that certain address has
 *   certain earnings balance, according to hash published ("signed") by a
 *   sidechain operator or similar authority
 *
 * ABOUT Merkle-tree inclusion proof: Merkle-tree inclusion proof is an algorithm to prove memebership
 * in a set using minimal [ie log(N)] inputs. The hashes of the items are arranged by hash value in a binary Merkle tree where 
 * each node contains a hash of the hashes of nodes below. The root node (ie "root hash") contains hash information 
 * about the entire set, and that is the data that BalanceVerifier posts to the blockchain. To prove membership, you walk up the 
 * tree from the node in question, and use the supplied hashes (the "proof") to fill in the hashes from the adjacent nodes. The proof  
 * succeeds iff you end up with the known root hash when you get to the top of the tree. 
 * See https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5
 *
 * Merkle-tree inclusion proof is a RELATED concept to the blockchain Merkle tree, but a somewhat DIFFERENT application. 
 * BalanceVerifier posts the root hash of the CURRENT ledger only, and this does NOT depend on the hash of previous ledgers.
 * This is different from the blockchain, where each block contains the hash of the previous block. 
 *
 * TODO: see if it could be turned into a library, so many contracts could use it
 */
contract BalanceVerifier {
    event BlockCreated(uint blockNumber, bytes32 rootHash, string ipfsHash);

    /**
     * Sidechain "blocks" are simply root hashes of merkle-trees constructed from its balances
     * @param uint root-chain block number after which the balances were recorded
     * @return bytes32 root of the balances merkle-tree at that time
     */
    mapping (uint => bytes32) public blockHash;

    /**
     * Handler for proof of sidechain balances
     * It is up to the implementing contract to actually distribute out the balances
     * @param blockNumber the block whose hash was used for verification
     * @param account whose balances were successfully verified
     * @param balance the side-chain account balance
     */
    function onVerifySuccess(uint blockNumber, address account, uint balance) internal;

    /**
     * Implementing contract should should do access checks for committing
     */
    function onCommit(uint blockNumber, bytes32 rootHash, string ipfsHash) internal;

    /**
     * Side-chain operator submits commitments to main chain. These
     * For convenience, also publish the ipfsHash of the balance book JSON object
     * @param blockNumber the block after which the balances were recorded
     * @param rootHash root of the balances merkle-tree
     * @param ipfsHash where the whole balances object can be retrieved in JSON format
     */
    function commit(uint blockNumber, bytes32 rootHash, string ipfsHash) external {
        require(blockHash[blockNumber] == 0, "error_overwrite");
        string memory _hash = ipfsHash;
        onCommit(blockNumber, rootHash, _hash);
        blockHash[blockNumber] = rootHash;
        emit BlockCreated(blockNumber, rootHash, _hash);
    }

    /**
     * Proving can be used to record the sidechain balances permanently into root chain
     * @param blockNumber the block after which the balances were recorded
     * @param account whose balances will be verified
     * @param balance side-chain account balance
     * @param proof list of hashes to prove the totalEarnings
     */
    function prove(uint blockNumber, address account, uint balance, bytes32[] memory proof) public {
        require(proofIsCorrect(blockNumber, account, balance, proof), "error_proof");
        onVerifySuccess(blockNumber, account, balance);
    }

    /**
     * Check the merkle proof of balance in the given side-chain block for given account
     */
    function proofIsCorrect(uint blockNumber, address account, uint balance, bytes32[] memory proof) public view returns(bool) {
        bytes32 hash = keccak256(abi.encodePacked(account, balance));
        bytes32 rootHash = blockHash[blockNumber];
        require(rootHash != 0x0, "error_blockNotFound");
        return rootHash == calculateRootHash(hash, proof);
    }

    /**
     * Calculate root hash of a Merkle tree, given
     * @param hash of the leaf to verify
     * @param others list of hashes of "other" branches
     */
    function calculateRootHash(bytes32 hash, bytes32[] memory others) public pure returns (bytes32 root) {
        root = hash;
        for (uint8 i = 0; i < others.length; i++) {
            bytes32 other = others[i];
            if (other == 0x0) continue;     // odd branch, no need to hash
            if (root < other) {
                root = keccak256(abi.encodePacked(root, other));
            } else {
                root = keccak256(abi.encodePacked(other, root));
            }
        }
    }
}

/**
 * @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;
    address public pendingOwner;

    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, "onlyOwner");
        _;
    }

    /**
     * @dev Allows the current owner to set the pendingOwner address.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        pendingOwner = newOwner;
    }

    /**
     * @dev Allows the pendingOwner address to finalize the transfer.
     */
    function claimOwnership() public {
        require(msg.sender == pendingOwner, "onlyPendingOwner");
        emit OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0);
    }
}




/**
 * Monoplasma that is managed by an owner, likely the side-chain operator
 * Owner can add and remove recipients.
 */
contract Monoplasma is BalanceVerifier, Ownable {
    using SafeMath for uint256;

    event OperatorChanged(address indexed newOperator);
    event AdminFeeChanged(uint adminFee);
    /**
     * Freeze period during which all side-chain participants should be able to
     *   acquire the whole balance book from IPFS (or HTTP server, or elsewhere)
     *   and validate that the published rootHash is correct
     * In case of incorrect rootHash, all members should issue withdrawals from the
     *   latest block they have validated (that is older than blockFreezeSeconds)
     * So: too short freeze period + bad availability => ether (needlessly) spent withdrawing earnings
     *     long freeze period == lag between purchase and withdrawal => bad UX
     * Blocks older than blockFreezeSeconds can be used to withdraw funds
     */
    uint public blockFreezeSeconds;

    /**
     * Block number => timestamp
     * Publish time of a block, where the block freeze period starts from.
     * Note that block number points to the block after which the root hash is calculated,
     *   not the block where BlockCreated was emitted (event must come later)
     */
    mapping (uint => uint) public blockTimestamp;

    address public operator;

    //fee fraction = adminFee/10^18
    uint public adminFee;

    IERC20 public token;

    mapping (address => uint) public earnings;
    mapping (address => uint) public withdrawn;
    uint public totalWithdrawn;
    uint public totalProven;

    constructor(address tokenAddress, uint blockFreezePeriodSeconds, uint _adminFee) public {
        blockFreezeSeconds = blockFreezePeriodSeconds;
        token = IERC20(tokenAddress);
        operator = msg.sender;
        setAdminFee(_adminFee);
    }

    function setOperator(address newOperator) public onlyOwner {
        operator = newOperator;
        emit OperatorChanged(newOperator);
    }

    /**
     * Admin fee as a fraction of revenue
     * Fixed-point decimal in the same way as ether: 50% === 0.5 ether
     * Smart contract doesn't use it, it's here just for storing purposes
     */
    function setAdminFee(uint _adminFee) public onlyOwner {
        require(adminFee <= 1 ether, "Admin fee cannot be greater than 1");
        adminFee = _adminFee;
        emit AdminFeeChanged(_adminFee);
    }

    /**
     * Operator creates the side-chain blocks
     */
    function onCommit(uint blockNumber, bytes32, string) internal {
        require(msg.sender == operator, "error_notPermitted");
        blockTimestamp[blockNumber] = now;
    }

    /**
     * Called from BalanceVerifier.prove
     * Prove can be called directly to withdraw less than the whole share,
     *   or just "cement" the earnings so far into root chain even without withdrawing
     */
    function onVerifySuccess(uint blockNumber, address account, uint newEarnings) internal {
        uint blockFreezeStart = blockTimestamp[blockNumber];
        require(now > blockFreezeStart + blockFreezeSeconds, "error_frozen");
        require(earnings[account] < newEarnings, "error_oldEarnings");
        totalProven = totalProven.add(newEarnings).sub(earnings[account]);
        require(totalProven.sub(totalWithdrawn) <= token.balanceOf(this), "error_missingBalance");
        earnings[account] = newEarnings;
    }

    /**
     * Prove and withdraw the whole revenue share from sidechain in one transaction
     * @param blockNumber of the leaf to verify
     * @param totalEarnings in the side-chain
     * @param proof list of hashes to prove the totalEarnings
     */
    function withdrawAll(uint blockNumber, uint totalEarnings, bytes32[] proof) external {
        withdrawAllFor(msg.sender, blockNumber, totalEarnings, proof);
    }

    /**
     * Prove and withdraw the whole revenue share for someone else
     * Validator needs to exit those it's watching out for, in case
     *   it detects Operator malfunctioning
     * @param recipient the address we're proving and withdrawing
     * @param blockNumber of the leaf to verify
     * @param totalEarnings in the side-chain
     * @param proof list of hashes to prove the totalEarnings
     */
    function withdrawAllFor(address recipient, uint blockNumber, uint totalEarnings, bytes32[] proof) public {
        prove(blockNumber, recipient, totalEarnings, proof);
        uint withdrawable = totalEarnings.sub(withdrawn[recipient]);
        withdrawTo(recipient, recipient, withdrawable);
    }

    /**
     * "Donate withdraw" function that allows you to prove and transfer
     *   your earnings to a another address in one transaction
     * @param recipient the address the tokens will be sent to (instead of msg.sender)
     * @param blockNumber of the leaf to verify
     * @param totalEarnings in the side-chain
     * @param proof list of hashes to prove the totalEarnings
     */
    function withdrawAllTo(address recipient, uint blockNumber, uint totalEarnings, bytes32[] proof) external {
        prove(blockNumber, msg.sender, totalEarnings, proof);
        uint withdrawable = totalEarnings.sub(withdrawn[msg.sender]);
        withdrawTo(recipient, msg.sender, withdrawable);
    }

    /**
     * Withdraw a specified amount of your own proven earnings (see `function prove`)
     */
    function withdraw(uint amount) public {
        withdrawTo(msg.sender, msg.sender, amount);
    }

    /**
     * Do the withdrawal on behalf of someone else
     * Validator needs to exit those it's watching out for, in case
     *   it detects Operator malfunctioning
     */
    function withdrawFor(address recipient, uint amount) public {
        withdrawTo(recipient, recipient, amount);
    }

    /**
     * Execute token withdrawal into specified recipient address from specified member account
     * @dev It is up to the sidechain implementation to make sure
     * @dev  always token balance >= sum of earnings - sum of withdrawn
     */
    function withdrawTo(address recipient, address account, uint amount) public {
        require(amount > 0, "error_zeroWithdraw");
        uint w = withdrawn[account].add(amount);
        require(w <= earnings[account], "error_overdraft");
        withdrawn[account] = w;
        totalWithdrawn = totalWithdrawn.add(amount);
        require(token.transfer(recipient, amount), "error_transfer");
    }
}


contract CommunityProduct is Monoplasma {

    string public joinPartStream;

    constructor(address operator, string joinPartStreamId, address tokenAddress, uint blockFreezePeriodSeconds, uint adminFeeFraction)
    Monoplasma(tokenAddress, blockFreezePeriodSeconds, adminFeeFraction) public {
        setOperator(operator);
        joinPartStream = joinPartStreamId;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"blockNumber","type":"uint256"},{"name":"totalEarnings","type":"uint256"},{"name":"proof","type":"bytes32[]"}],"name":"withdrawAllTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blockNumber","type":"uint256"},{"name":"account","type":"address"},{"name":"balance","type":"uint256"},{"name":"proof","type":"bytes32[]"}],"name":"prove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blockNumber","type":"uint256"},{"name":"totalEarnings","type":"uint256"},{"name":"proof","type":"bytes32[]"}],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWithdrawn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"joinPartStream","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"earnings","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"blockNumber","type":"uint256"},{"name":"totalEarnings","type":"uint256"},{"name":"proof","type":"bytes32[]"}],"name":"withdrawAllFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"others","type":"bytes32[]"}],"name":"calculateRootHash","outputs":[{"name":"root","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockFreezeSeconds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"blockTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"blockHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_adminFee","type":"uint256"}],"name":"setAdminFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalProven","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"blockNumber","type":"uint256"},{"name":"rootHash","type":"bytes32"},{"name":"ipfsHash","type":"string"}],"name":"commit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"blockNumber","type":"uint256"},{"name":"account","type":"address"},{"name":"balance","type":"uint256"},{"name":"proof","type":"bytes32[]"}],"name":"proofIsCorrect","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"operator","type":"address"},{"name":"joinPartStreamId","type":"string"},{"name":"tokenAddress","type":"address"},{"name":"blockFreezePeriodSeconds","type":"uint256"},{"name":"adminFeeFraction","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newOperator","type":"address"}],"name":"OperatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"adminFee","type":"uint256"}],"name":"AdminFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"blockNumber","type":"uint256"},{"indexed":false,"name":"rootHash","type":"bytes32"},{"indexed":false,"name":"ipfsHash","type":"string"}],"name":"BlockCreated","type":"event"}]

60806040523480156200001157600080fd5b506040516200267d3803806200267d833981018060405281019080805190602001909291908051820192919060200180519060200190929190805190602001909291908051906020019092919050505082828233600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160038190555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001488162000189640100000000026401000000009004565b505050620001658562000339640100000000026401000000009004565b83600c90805190602001906200017d92919062000486565b50505050505062000535565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200024f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b670de0b6b3a764000060065411151515620002f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f41646d696e206665652063616e6e6f742062652067726561746572207468616e81526020017f203100000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806006819055507f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd53487816040518082815260200191505060405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620003ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f4721129e0e676ed6a92909bb24e853ccdd63ad72280cc2e974e38e480e0e6e5460405160405180910390a250565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c957805160ff1916838001178555620004fa565b82800160010185558215620004fa579182015b82811115620004f9578251825591602001919060010190620004dc565b5b5090506200050991906200050d565b5090565b6200053291905b808211156200052e57600081600090555060010162000514565b5090565b90565b61213880620005456000396000f30060806040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063270231cc146101645780632e1a7d4d146101d357806332ef2b24146102005780634942e4cf1461029a5780634b319713146102e95780634beb62b7146103145780634e71e0c8146103a4578063543fd313146103bb578063570ca735146104125780636c7a9d24146104695780636dd4a7c9146105035780636ef610921461059357806371b15013146105ea57806373d8903b1461061557806385df51fd146106565780638beb60b61461069f5780638da5cb5b146106cc578063a0be06f914610723578063b3ab15fb1461074e578063b74d784e14610791578063c3ac610d146107bc578063c3b35a7e1461080f578063cb9b51c81461087c578063db518db21461092e578063e30c39781461097b578063f2fde38b146109d2578063fc0c546a14610a15575b600080fd5b34801561017057600080fd5b506101d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001908201803590602001919091929391929390505050610a6c565b005b3480156101df57600080fd5b506101fe60048036038101908080359060200190929190505050610b10565b005b34801561020c57600080fd5b5061029860048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610b1e565b005b3480156102a657600080fd5b506102e76004803603810190808035906020019092919080359060200190929190803590602001908201803590602001919091929391929390505050610baf565b005b3480156102f557600080fd5b506102fe610bf0565b6040518082815260200191505060405180910390f35b34801561032057600080fd5b50610329610bf6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561036957808201518184015260208101905061034e565b50505050905090810190601f1680156103965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b057600080fd5b506103b9610c94565b005b3480156103c757600080fd5b506103fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e9e565b6040518082815260200191505060405180910390f35b34801561041e57600080fd5b50610427610eb6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561047557600080fd5b50610501600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610edc565b005b34801561050f57600080fd5b50610575600480360381019080803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610f50565b60405180826000191660001916815260200191505060405180910390f35b34801561059f57600080fd5b506105d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110ff565b6040518082815260200191505060405180910390f35b3480156105f657600080fd5b506105ff611117565b6040518082815260200191505060405180910390f35b34801561062157600080fd5b506106406004803603810190808035906020019092919050505061111d565b6040518082815260200191505060405180910390f35b34801561066257600080fd5b5061068160048036038101908080359060200190929190505050611135565b60405180826000191660001916815260200191505060405180910390f35b3480156106ab57600080fd5b506106ca6004803603810190808035906020019092919050505061114d565b005b3480156106d857600080fd5b506106e16112fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072f57600080fd5b50610738611321565b6040518082815260200191505060405180910390f35b34801561075a57600080fd5b5061078f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611327565b005b34801561079d57600080fd5b506107a6611473565b6040518082815260200191505060405180910390f35b3480156107c857600080fd5b5061080d600480360381019080803590602001909291908035600019169060200190929190803590602001908201803590602001919091929391929390505050611479565b005b34801561081b57600080fd5b5061087a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611622565b005b34801561088857600080fd5b5061091460048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061197f565b604051808215151515815260200191505060405180910390f35b34801561093a57600080fd5b50610979600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b00565b005b34801561098757600080fd5b50610990611b0f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109de57600080fd5b50610a13600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b35565b005b348015610a2157600080fd5b50610a2a611c3e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000610aa9853386868680806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050610b1e565b610afb600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485611c6490919063ffffffff16565b9050610b08863383611622565b505050505050565b610b1b333383611622565b50565b610b2a8484848461197f565b1515610b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6572726f725f70726f6f6600000000000000000000000000000000000000000081525060200191505060405180910390fd5b610ba9848484611c85565b50505050565b610bea338585858580806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050610edc565b50505050565b600a5481565b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8c5780601f10610c6157610100808354040283529160200191610c8c565b820191906000526020600020905b815481529060010190602001808311610c6f57829003601f168201915b505050505081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6f6e6c7950656e64696e674f776e65720000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60086020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610eea84868585610b1e565b610f3c600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611c6490919063ffffffff16565b9050610f49858683611622565b5050505050565b6000806000849250600091505b83518260ff1610156110f757838260ff16815181101515610f7a57fe5b906020019060200201519050600060010281600019161415610f9b576110ea565b80600019168360001916101561104c5782816040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156110185780518252602082019150602081019050602083039250610ff3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902092506110e9565b80836040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156110b95780518252602082019150602081019050602083039250611094565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902092505b5b8180600101925050610f5d565b505092915050565b60096020528060005260406000206000915090505481565b60035481565b60046020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b670de0b6b3a7640000600654111515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f41646d696e206665652063616e6e6f742062652067726561746572207468616e81526020017f203100000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806006819055507f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd53487816040518082815260200191505060405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f4721129e0e676ed6a92909bb24e853ccdd63ad72280cc2e974e38e480e0e6e5460405160405180910390a250565b600b5481565b60606000600102600080878152602001908152602001600020546000191614151561150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6572726f725f6f7665727772697465000000000000000000000000000000000081525060200191505060405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050905061154c858583612009565b8360008087815260200190815260200160002081600019169055507f4268b0369742123cb8066ef715ccf53f3f1f710b5894e43e1ba1d159ed64e4c185858360405180848152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115df5780820151818401526020810190506115c4565b50505050905090810190601f16801561160c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050505050565b6000808211151561169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6572726f725f7a65726f5769746864726177000000000000000000000000000081525060200191505060405180910390fd5b6116ed82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120eb90919063ffffffff16565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111515156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6572726f725f6f7665726472616674000000000000000000000000000000000081525060200191505060405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ff82600a546120eb90919063ffffffff16565b600a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118ca57600080fd5b505af11580156118de573d6000803e3d6000fd5b505050506040513d60208110156118f457600080fd5b81019080805190602001909291905050501515611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6572726f725f7472616e7366657200000000000000000000000000000000000081525060200191505060405180910390fd5b50505050565b60008060008585604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611a1c57805182526020820191506020810190506020830392506119f7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091506000808881526020019081526020016000205490506000600102816000191614151515611ae0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6572726f725f626c6f636b4e6f74466f756e640000000000000000000000000081525060200191505060405180910390fd5b611aea8285610f50565b6000191681600019161492505050949350505050565b611b0b828383611622565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080838311151515611c7657600080fd5b82840390508091505092915050565b600060046000858152602001908152602001600020549050600354810142111515611d18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6572726f725f66726f7a656e000000000000000000000000000000000000000081525060200191505060405180910390fd5b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515611dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6572726f725f6f6c644561726e696e677300000000000000000000000000000081525060200191505060405180910390fd5b611e34600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2684600b546120eb90919063ffffffff16565b611c6490919063ffffffff16565b600b81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b505050506040513d6020811015611f2157600080fd5b8101908080519060200190929190505050611f49600a54600b54611c6490919063ffffffff16565b11151515611fbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6572726f725f6d697373696e6742616c616e636500000000000000000000000081525060200191505060405180910390fd5b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6572726f725f6e6f745065726d6974746564000000000000000000000000000081525060200191505060405180910390fd5b426004600085815260200190815260200160002081905550505050565b600080828401905083811015151561210257600080fd5b80915050929150505600a165627a7a72305820f639b0bb3911390662ef6be207c48280821a3429d59a459fb7a3ee03262554600029000000000000000000000000c0aa4dc0763550161a6b59fa430361b5a26df28c00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000cf0ee63788a0849fe5297f3407f701e122cc02300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000429d069189e0000000000000000000000000000000000000000000000000000000000000000001667543467305a6b69513947425f65574b4e37444d397700000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c0aa4dc0763550161a6b59fa430361b5a26df28c00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000cf0ee63788a0849fe5297f3407f701e122cc02300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000429d069189e0000000000000000000000000000000000000000000000000000000000000000001667543467305a6b69513947425f65574b4e37444d397700000000000000000000

-----Decoded View---------------
Arg [0] : operator (address): 0xc0aa4dc0763550161a6b59fa430361b5a26df28c
Arg [1] : joinPartStreamId (string): gT4g0ZkiQ9GB_eWKN7DM9w
Arg [2] : tokenAddress (address): 0x0cf0ee63788a0849fe5297f3407f701e122cc023
Arg [3] : blockFreezePeriodSeconds (uint256): 1
Arg [4] : adminFeeFraction (uint256): 300000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0aa4dc0763550161a6b59fa430361b5a26df28c
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000cf0ee63788a0849fe5297f3407f701e122cc023
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000429d069189e0000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [6] : 67543467305a6b69513947425f65574b4e37444d397700000000000000000000


Deployed ByteCode Sourcemap

15648:385:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14143:306;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14143:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14562:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14562:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;6245:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6245:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12832:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12832:165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10652:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10652:26:0;;;;;;;;;;;;;;;;;;;;;;;15697:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15697:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15697:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8808:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8808:231:0;;;;;;10555:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10555:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10429:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10429:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13431:302;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13431:302:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7157:513;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7157:513:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10603:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10603:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10038:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10038:30:0;;;;;;;;;;;;;;;;;;;;;;;10376:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10376:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4482:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4482:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11341:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11341:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;7896:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7896:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10498;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10498:20:0;;;;;;;;;;;;;;;;;;;;;;;10981:144;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10981:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10685:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10685:23:0;;;;;;;;;;;;;;;;;;;;;;;5542:344;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5542:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15234:405;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15234:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6608:372;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6608:372:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14853:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14853:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7923:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7923:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8607:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8607:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10527:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10527:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14143:306;14323:17;14260:52;14266:11;14279:10;14291:13;14306:5;;14260:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:52::i;:::-;14343:40;14361:9;:21;14371:10;14361:21;;;;;;;;;;;;;;;;14343:13;:17;;:40;;;;:::i;:::-;14323:60;;14394:47;14405:9;14416:10;14428:12;14394:10;:47::i;:::-;14143:306;;;;;;:::o;14562:99::-;14611:42;14622:10;14634;14646:6;14611:10;:42::i;:::-;14562:99;:::o;6245:247::-;6359:52;6374:11;6387:7;6396;6405:5;6359:14;:52::i;:::-;6351:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6438:46;6454:11;6467:7;6476;6438:15;:46::i;:::-;6245:247;;;;:::o;12832:165::-;12928:61;12943:10;12955:11;12968:13;12983:5;;12928:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:61::i;:::-;12832:165;;;;:::o;10652:26::-;;;;:::o;15697:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8808:231::-;8874:12;;;;;;;;;;;8860:26;;:10;:26;;;8852:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8951:12;;;;;;;;;;;8923:41;;8944:5;;;;;;;;;;;8923:41;;;;;;;;;;;;8983:12;;;;;;;;;;;8975:5;;:20;;;;;;;;;;;;;;;;;;9029:1;9006:12;;:25;;;;;;;;;;;;;;;;;;8808:231::o;10555:41::-;;;;;;;;;;;;;;;;;:::o;10429:23::-;;;;;;;;;;;;;:::o;13431:302::-;13609:17;13547:51;13553:11;13566:9;13577:13;13592:5;13547;:51::i;:::-;13629:39;13647:9;:20;13657:9;13647:20;;;;;;;;;;;;;;;;13629:13;:17;;:39;;;;:::i;:::-;13609:59;;13679:46;13690:9;13701;13712:12;13679:10;:46::i;:::-;13431:302;;;;;:::o;7157:513::-;7244:12;7296:7;7348:13;7276:4;7269:11;;7306:1;7296:11;;7291:372;7313:6;:13;7309:1;:17;;;7291:372;;;7364:6;7371:1;7364:9;;;;;;;;;;;;;;;;;;;;7348:25;;7401:3;7392:12;;:5;:12;;;;7388:26;;;7406:8;;7388:26;7475:5;7468:12;;;:4;:12;;;;7464:188;;;7535:4;7541:5;7518:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;7518:29:0;;;7508:40;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;7508:40:0;;;;;;;;;;;;;;;;7501:47;;7464:188;;;7623:5;7630:4;7606:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;7606:29:0;;;7596:40;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;7596:40:0;;;;;;;;;;;;;;;;7589:47;;7464:188;7291:372;7328:3;;;;;;;7291:372;;;7157:513;;;;;;:::o;10603:42::-;;;;;;;;;;;;;;;;;:::o;10038:30::-;;;;:::o;10376:44::-;;;;;;;;;;;;;;;;;:::o;4482:42::-;;;;;;;;;;;;;;;;;:::o;11341:212::-;8409:5;;;;;;;;;;;8395:19;;:10;:19;;;8387:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11426:7;11414:8;;:19;;11406:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11494:9;11483:8;:20;;;;11519:26;11535:9;11519:26;;;;;;;;;;;;;;;;;;11341:212;:::o;7896:20::-;;;;;;;;;;;;;:::o;10498:::-;;;;:::o;10981:144::-;8409:5;;;;;;;;;;;8395:19;;:10;:19;;;8387:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11062:11;11051:8;;:22;;;;;;;;;;;;;;;;;;11105:11;11089:28;;;;;;;;;;;;10981:144;:::o;10685:23::-;;;;:::o;5542:344::-;5697:19;5665:1;5639:27;;:9;:22;5649:11;5639:22;;;;;;;;;;;;:27;;;;5631:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5719:8;;5697:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5738:38;5747:11;5760:8;5770:5;5738:8;:38::i;:::-;5812:8;5787:9;:22;5797:11;5787:22;;;;;;;;;;;:33;;;;;;;5836:42;5849:11;5862:8;5872:5;5836:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5836:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5542:344;;;;;:::o;15234:405::-;15373:6;15338:1;15329:6;:10;15321:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15382:30;15405:6;15382:9;:18;15392:7;15382:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;15373:39;;15436:8;:17;15445:7;15436:17;;;;;;;;;;;;;;;;15431:1;:22;;15423:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15505:1;15484:9;:18;15494:7;15484:18;;;;;;;;;;;;;;;:22;;;;15534:26;15553:6;15534:14;;:18;;:26;;;;:::i;:::-;15517:14;:43;;;;15579:5;;;;;;;;;;;:14;;;15594:9;15605:6;15579:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15579:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15579:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15579:33:0;;;;;;;;;;;;;;;;15571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15234:405;;;;:::o;6608:372::-;6725:4;6742:12;6813:16;6784:7;6793;6767:34;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6767:34:0;;;6757:45;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6757:45:0;;;;;;;;;;;;;;;;6742:60;;6832:9;:22;6842:11;6832:22;;;;;;;;;;;;6813:41;;6885:3;6873:15;;:8;:15;;;;;6865:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6942:30;6960:4;6966:5;6942:17;:30::i;:::-;6930:42;;;:8;:42;;;;6923:49;;6608:372;;;;;;;;:::o;14853:119::-;14924:40;14935:9;14946;14957:6;14924:10;:40::i;:::-;14853:119;;:::o;7923:27::-;;;;;;;;;;;;;:::o;8607:104::-;8409:5;;;;;;;;;;;8395:19;;:10;:19;;;8387:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8695:8;8680:12;;:23;;;;;;;;;;;;;;;;;;8607:104;:::o;10527:19::-;;;;;;;;;;;;;:::o;1117:136::-;1175:7;1213:9;1204:1;1199;:6;;1191:15;;;;;;;;1229:1;1225;:5;1213:17;;1246:1;1239:8;;1117:136;;;;;:::o;12036:526::-;12134:21;12158:14;:27;12173:11;12158:27;;;;;;;;;;;;12134:51;;12229:18;;12210:16;:37;12204:3;:43;12196:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12303:11;12283:8;:17;12292:7;12283:17;;;;;;;;;;;;;;;;:31;12275:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12361:51;12394:8;:17;12403:7;12394:17;;;;;;;;;;;;;;;;12361:28;12377:11;12361;;:15;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;12347:11;:65;;;;12466:5;;;;;;;;;;;:15;;;12482:4;12466:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12466:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12466:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12466:21:0;;;;;;;;;;;;;;;;12431:31;12447:14;;12431:11;;:15;;:31;;;;:::i;:::-;:56;;12423:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12543:11;12523:8;:17;12532:7;12523:17;;;;;;;;;;;;;;;:31;;;;12036:526;;;;:::o;11626:178::-;11721:8;;;;;;;;;;;11707:22;;:10;:22;;;11699:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11793:3;11763:14;:27;11778:11;11763:27;;;;;;;;;;;:33;;;;11626:178;;;:::o;1321:136::-;1379:7;1395:9;1411:1;1407;:5;1395:17;;1432:1;1427;:6;;1419:15;;;;;;;;1450:1;1443:8;;1321:136;;;;;:::o

Swarm Source

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.