Contract 0x501C17B26029F3a129Fd9Adeb4b642bD35A35248 2

 

Contract Overview

Balance:
0.‍102455 Ether

EtherValue:
$194.48 (@ $1,898.20/ETH)

Token:
Txn Hash
Method
Block
From
To
Value
0xb8e13dc600dc43f3709c1cbc7e83968094607c7a5e70f1e72aaf3bf7297d88a3Transfer52870352018-03-20 3:41:041605 days 14 hrs ago0x7383b7b34f993253b68898d831684c7b4525a066 IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480.‍1 Ether0.‍000090184
0x3cfa447868c65483d738f080707d80c2165950470b619e324e3258d22458b0b0Create Member52870342018-03-20 3:40:361605 days 14 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍000340214
0xc8189921e75b9eb4c6c8737100e86ab95764930211229d206cfa84b66ae1d59bCreate Member52870282018-03-20 3:39:251605 days 14 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍000340724
0x2b5874b990facb35704e447d3e9275f47ffa42957fd04ca8ecfc3ba52d8790d5Create Member52870202018-03-20 3:37:001605 days 14 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍000340724
0x0582ccd57e14eecb40341afdcb37de231e10207d2175fcf7c6cccd7ed2f8b05cCreate Member52870122018-03-20 3:34:071605 days 14 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍0003424
0xf86a87976285ed102fcd6dc4f04ac806bb12fd154d5d2a72ae743a676183d738Create Member52870122018-03-20 3:34:071605 days 14 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍000340724
0x879d7a9341503fd730135b1332975450e69f9254cfec143cec7bfe74086cf5caCreate Member52869742018-03-20 3:25:351605 days 14 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍000340984
0x72230129e74f0079a838f863e9fe209fa932467828495dbc345199d2202402b0Register52868292018-03-20 2:51:051605 days 15 hrs ago0xdb6794aca55ce8b87caf3d626dd4a7c758924b4d IN  0x501c17b26029f3a129fd9adeb4b642bd35a352480 Ether0.‍000434954
0x14f2473ec1b9b325d87e64d2be7aa17de02a6b0bf15f1e1c3d5b6d0e847f71630x6060604052690152018-03-17 2:44:191608 days 15 hrs ago0x8ac56196ec7e358e2d5b69e3b401dbb17c59c2df IN  Create: SolClub0 Ether0.‍00840884
[ Download CSV Export 
Latest 5 internal transactions
Parent Txn Hash Block From To Value
0x4502bb1a4c3bc33d054112ba003f359376b4bbf5bd5a917f342f83fb7ace2d9653051602018-03-23 4:36:311602 days 13 hrs ago 0xf7f6b7164fb3ab456715d2e8b84e8baac8bd09a9 0x501c17b26029f3a129fd9adeb4b642bd35a352480.‍000815 Ether
0x53eeb90df7e9f5a13c748aa0ce8d6651d154babac9ad7ec95df0201f86afb5f352959012018-03-21 15:40:491604 days 2 hrs ago 0xf7f6b7164fb3ab456715d2e8b84e8baac8bd09a9 0x501c17b26029f3a129fd9adeb4b642bd35a352480.‍00059 Ether
0x7c93d1a181473f5703a5980e5e8d89b8c775fb53c7981f63f361843035d032a252918632018-03-20 23:08:561604 days 18 hrs ago 0xf7f6b7164fb3ab456715d2e8b84e8baac8bd09a9 0x501c17b26029f3a129fd9adeb4b642bd35a352480.‍000535 Ether
0x29300d18087b7cda678b247193c7d67efc848a1d4ecc5ab5e8e7c5caa3c75c6852911442018-03-20 20:18:121604 days 21 hrs ago 0xf7f6b7164fb3ab456715d2e8b84e8baac8bd09a9 0x501c17b26029f3a129fd9adeb4b642bd35a352480.‍000515 Ether
0xdfb1aa505dec1f6c8d82ee2df6cde079dcd9af219f289c196618054f0e98f51152904212018-03-20 17:35:031605 days 20 mins ago 0xf7f6b7164fb3ab456715d2e8b84e8baac8bd09a9 0x501c17b26029f3a129fd9adeb4b642bd35a352480.‍00051 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SolClub

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-17
*/

pragma solidity ^0.4.18;

/** SafeMath libs are inspired by:
  *  https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol
  * There is debate as to whether this lib should use assert or require:
  *  https://github.com/OpenZeppelin/zeppelin-solidity/issues/565

  * `require` is used in these libraries for the following reasons:
  *   - overflows should not be checked in contract function bodies; DRY
  *   - "valid" user input can cause overflows, which should not assert()
  */
library SafeMath {
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);
    return c;
  }
}

library SafeMath64 {
  function sub(uint64 a, uint64 b) internal pure returns (uint64) {
    require(b <= a);
    return a - b;
  }

  function add(uint64 a, uint64 b) internal pure returns (uint64) {
    uint64 c = a + b;
    require(c >= a);
    return c;
  }
}


// https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/ownership/Ownable.sol
contract Ownable {
  address public owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}


// https://github.com/ethereum/EIPs/issues/179
contract ERC20Basic {
  uint256 public totalSupply;
  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);
}


// 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);
}


// https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/DetailedERC20.sol
contract DetailedERC20 is ERC20 {
  string public name;
  string public symbol;
  uint8 public decimals;

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


/** SolClub has the following properties:
  *
  * Member Creation:
  * - Self-registration
  *   - Owner signs hash(address, username, endowment), and sends to member
  *   - Member registers with username, endowment, and signature to create new account.
  * - Mod creates new member.
  * - Members are first eligible to withdraw dividends for the period after account creation.
  *
  * Karma/Token Rules:
  * - Karma is created by initial member creation endowment.
  * - Karma can also be minted by mod into an existing account.
  * - Karma can only be transferred to existing account holder.
  * - Karma implements the ERC20 token interface.
  *
  * Dividends:
  * - each member can withdraw a dividend once per month.
  * - dividend is total contract value minus owner cut at end of the month, divided by total number of members at end of month.
  * - owner cut is determined at beginning of new period.
  * - member has 1 month to withdraw their dividend from the previous month.
  * - if member does not withdraw their dividend, their share will be given to owner.
  * - mod can place a member on a 1 month "timeout", whereby they won't be eligible for a dividend.

  * Eg: 10 eth is sent to the contract in January, owner cut is 30%. 
  * There are 70 token holders on Jan 31. At any time in February, each token holder can withdraw .1 eth for their January 
  * dividend (unless they were given a "timeout" in January).
  */
contract SolClub is Ownable, DetailedERC20("SolClub", "SOL", 0) {
  // SafeMath libs are responsible for checking overflow.
  using SafeMath for uint256;
  using SafeMath64 for uint64;

  struct Member {
    bytes20 username;
    uint64 karma; 
    uint16 canWithdrawPeriod;
    uint16 birthPeriod;
  }

  // Manage members.
  mapping(address => Member) public members;
  mapping(bytes20 => address) public usernames;

  // Manage dividend payments.
  uint256 public epoch; // Timestamp at start of new period.
  uint256 dividendPool; // Total amount of dividends to pay out for last period.
  uint256 public dividend; // Per-member share of last period's dividend.
  uint256 public ownerCut; // Percentage, in basis points, of owner cut of this period's payments.
  uint64 public numMembers; // Number of members created before this period.
  uint64 public newMembers; // Number of members created during this period.
  uint16 public currentPeriod = 1;

  address public moderator;

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

  event Mint(address indexed to, uint256 amount);
  event PeriodEnd(uint16 period, uint256 amount, uint64 members);
  event Payment(address indexed from, uint256 amount);
  event Withdrawal(address indexed to, uint16 indexed period, uint256 amount);
  event NewMember(address indexed addr, bytes20 username, uint64 endowment);
  event RemovedMember(address indexed addr, bytes20 username, uint64 karma, bytes32 reason);

  modifier onlyMod() {
    require(msg.sender == moderator);
    _;
  }

  function SolClub() public {
    epoch = now;
    moderator = msg.sender;
  }

  function() payable public {
    Payment(msg.sender, msg.value);
  }

  /** 
   * Owner Functions 
   */

  function setMod(address _newMod) public onlyOwner {
    moderator = _newMod;
  }

  // Owner should call this on twice a month.
  // _ownerCut is new owner cut for new period.
  function newPeriod(uint256 _ownerCut) public onlyOwner {
    require(now >= epoch + 15 days);
    require(_ownerCut <= 10000);

    uint256 unclaimedDividend = dividendPool;
    uint256 ownerRake = (address(this).balance-unclaimedDividend) * ownerCut / 10000;

    dividendPool = address(this).balance - unclaimedDividend - ownerRake;

    // Calculate dividend.
    uint64 existingMembers = numMembers;
    if (existingMembers == 0) {
      dividend = 0;
    } else {
      dividend = dividendPool / existingMembers;
    }

    numMembers = numMembers.add(newMembers);
    newMembers = 0;
    currentPeriod++;
    epoch = now;
    ownerCut = _ownerCut;

    msg.sender.transfer(ownerRake + unclaimedDividend);
    PeriodEnd(currentPeriod-1, this.balance, existingMembers);
  }

  // Places member is a "banished" state whereby they are no longer a member,
  // but their username remains active (preventing re-registration)
  function removeMember(address _addr, bytes32 _reason) public onlyOwner {
    require(members[_addr].birthPeriod != 0);
    Member memory m = members[_addr];

    totalSupply = totalSupply.sub(m.karma);
    if (m.birthPeriod == currentPeriod) {
      newMembers--;
    } else {
      numMembers--;
    }

    // "Burns" username, so user can't recreate.
    usernames[m.username] = address(0x1);

    delete members[_addr];
    RemovedMember(_addr, m.username, m.karma, _reason);
  }

  // Place a username back into circulation for re-registration.
  function deleteUsername(bytes20 _username) public onlyOwner {
    require(usernames[_username] == address(0x1));
    delete usernames[_username];
  }

  /**
    * Mod Functions
    */

  function createMember(address _addr, bytes20 _username, uint64 _amount) public onlyMod {
    newMember(_addr, _username, _amount);
  }

  // Send karma to existing account.
  function mint(address _addr, uint64 _amount) public onlyMod {
    require(members[_addr].canWithdrawPeriod != 0);

    members[_addr].karma = members[_addr].karma.add(_amount);
    totalSupply = totalSupply.add(_amount);
    Mint(_addr, _amount);
  }

  // If a member has been bad, they won't be able to receive a dividend :(
  function timeout(address _addr) public onlyMod {
    require(members[_addr].canWithdrawPeriod != 0);

    members[_addr].canWithdrawPeriod = currentPeriod + 1;
  }

  /**
    * Member Functions
    */

  // Owner will sign hash(address, username, amount), and address owner uses this 
  // signature to register their account.
  function register(bytes20 _username, uint64 _endowment, bytes _sig) public {
    require(recover(keccak256(msg.sender, _username, _endowment), _sig) == owner);
    newMember(msg.sender, _username, _endowment);
  }

  // Member can withdraw their share of donations from the previous month.
  function withdraw() public {
    require(members[msg.sender].canWithdrawPeriod != 0);
    require(members[msg.sender].canWithdrawPeriod < currentPeriod);

    members[msg.sender].canWithdrawPeriod = currentPeriod;
    dividendPool -= dividend;
    msg.sender.transfer(dividend);
    Withdrawal(msg.sender, currentPeriod-1, dividend);
  }

  /**
    * ERC20 Functions
    */

  function balanceOf(address _owner) public view returns (uint256 balance) {
    return members[_owner].karma;
  }

  // Contrary to most ERC20 implementations, require that recipient is existing member.
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(members[_to].canWithdrawPeriod != 0);
    require(_value <= members[msg.sender].karma);

    // Type assertion to uint64 is safe because we require that _value is < uint64 above.
    members[msg.sender].karma = members[msg.sender].karma.sub(uint64(_value));
    members[_to].karma = members[_to].karma.add(uint64(_value));
    Transfer(msg.sender, _to, _value);
    return true;
  }

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

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

  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  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);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  // Contrary to most ERC20 implementations, require that recipient is existing member.
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(members[_to].canWithdrawPeriod != 0);
    require(_value <= members[_from].karma);
    require(_value <= allowed[_from][msg.sender]);

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

  /**
    * Private Functions
    */

  // Ensures that username isn't taken, and account doesn't already exist for
  // member's address.
  function newMember(address _addr, bytes20 _username, uint64 _endowment) private {
    require(usernames[_username] == address(0));
    require(members[_addr].canWithdrawPeriod == 0);

    members[_addr].canWithdrawPeriod = currentPeriod + 1;
    members[_addr].birthPeriod = currentPeriod;
    members[_addr].karma = _endowment;
    members[_addr].username = _username;
    usernames[_username] = _addr;

    newMembers = newMembers.add(1);
    totalSupply = totalSupply.add(_endowment);
    NewMember(_addr, _username, _endowment);
  }

  // https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/ECRecovery.sol
  function recover(bytes32 hash, bytes sig) internal pure returns (address) {
    bytes32 r;
    bytes32 s;
    uint8 v;

    //Check the signature length
    if (sig.length != 65) {
      return (address(0));
    }

    // Divide the signature in r, s and v variables
    assembly {
      r := mload(add(sig, 32))
      s := mload(add(sig, 64))
      v := byte(0, mload(add(sig, 96)))
    }

    // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
    if (v < 27) {
      v += 27;
    }

    // If the version is correct return the signer address
    if (v != 27 && v != 28) {
      return (address(0));
    } else {
      return ecrecover(hash, v, r, s);
    }
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"currentPeriod","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"members","outputs":[{"name":"username","type":"bytes20"},{"name":"karma","type":"uint64"},{"name":"canWithdrawPeriod","type":"uint16"},{"name":"birthPeriod","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividend","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ownerCut","type":"uint256"}],"name":"newPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint64"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_username","type":"bytes20"}],"name":"deleteUsername","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newMod","type":"address"}],"name":"setMod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"moderator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numMembers","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ownerCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newMembers","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"timeout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes20"}],"name":"usernames","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_reason","type":"bytes32"}],"name":"removeMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_username","type":"bytes20"},{"name":"_amount","type":"uint64"}],"name":"createMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_username","type":"bytes20"},{"name":"_endowment","type":"uint64"},{"name":"_sig","type":"bytes"}],"name":"register","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"period","type":"uint16"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"members","type":"uint64"}],"name":"PeriodEnd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"period","type":"uint16"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"username","type":"bytes20"},{"indexed":false,"name":"endowment","type":"uint64"}],"name":"NewMember","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"username","type":"bytes20"},{"indexed":false,"name":"karma","type":"uint64"},{"indexed":false,"name":"reason","type":"bytes32"}],"name":"RemovedMember","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6060604052600b8054608060020a61ffff02191670010000000000000000000000000000000017905534156200003457600080fd5b604080519081016040908152600782527f536f6c436c75620000000000000000000000000000000000000000000000000060208301528051908101604052600381527f534f4c0000000000000000000000000000000000000000000000000000000000602082015260008054600160a060020a03191633600160a060020a03161781556002838051620000cc9291602001906200011e565b506003828051620000e29291602001906200011e565b506004805460ff191660ff92909216919091179055505042600755600c8054600160a060020a03191633600160a060020a0316179055620001c3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200016157805160ff191683800117855562000191565b8280016001018555821562000191579182015b828111156200019157825182559160200191906001019062000174565b506200019f929150620001a3565b5090565b620001c091905b808211156200019f5760008155600101620001aa565b90565b611be980620001d36000396000f3006060604052600436106101715763ffffffff60e060020a6000350416630604061881146101b057806306fdde03146101da57806308ae4b0c14610264578063095ea7b3146102c85780630ff8cf9b146102fe57806318160ddd1461032357806321d6cdb61461033657806323b872dd1461034e5780632893c5b0146103765780632eac5ca2146103a2578063313ce567146103c2578063376d567c146103eb578063387439041461040a5780633ccfd60b146104395780634698d1101461044c578063661884631461047c57806370a082311461049e57806383b5ff8b146104bd5780638da5cb5b146104d0578063900cf0cf146104e357806395d89b41146104f65780639ae3884414610509578063a9059cbb1461051c578063aedd18dc1461053e578063b6f085c71461055d578063ca7ca5b41461057d578063d73dd6231461059f578063dd62ed3e146105c1578063f2fde38b146105e6578063fbe413e414610605578063ffd9ca401461063e575b33600160a060020a03167fd4f43975feb89f48dd30cabbb32011045be187d1e11c8ea9faa43efc352825193460405190815260200160405180910390a2005b34156101bb57600080fd5b6101c36106ae565b60405161ffff909116815260200160405180910390f35b34156101e557600080fd5b6101ed6106bf565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610229578082015183820152602001610211565b50505050905090810190601f1680156102565780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026f57600080fd5b610283600160a060020a036004351661075d565b6040516001606060020a0319909416845267ffffffffffffffff909216602084015261ffff908116604080850191909152911660608301526080909101905180910390f35b34156102d357600080fd5b6102ea600160a060020a03600435166024356107a7565b604051901515815260200160405180910390f35b341561030957600080fd5b610311610813565b60405190815260200160405180910390f35b341561032e57600080fd5b610311610819565b341561034157600080fd5b61034c60043561081f565b005b341561035957600080fd5b6102ea600160a060020a0360043581169060243516604435610a20565b341561038157600080fd5b61034c600160a060020a036004351667ffffffffffffffff60243516610c27565b34156103ad57600080fd5b61034c6001606060020a031960043516610d41565b34156103cd57600080fd5b6103d5610dc0565b60405160ff909116815260200160405180910390f35b34156103f657600080fd5b61034c600160a060020a0360043516610dc9565b341561041557600080fd5b61041d610e13565b604051600160a060020a03909116815260200160405180910390f35b341561044457600080fd5b61034c610e22565b341561045757600080fd5b61045f610f75565b60405167ffffffffffffffff909116815260200160405180910390f35b341561048757600080fd5b6102ea600160a060020a0360043516602435610f85565b34156104a957600080fd5b610311600160a060020a036004351661107f565b34156104c857600080fd5b6103116110ab565b34156104db57600080fd5b61041d6110b1565b34156104ee57600080fd5b6103116110c0565b341561050157600080fd5b6101ed6110c6565b341561051457600080fd5b61045f611131565b341561052757600080fd5b6102ea600160a060020a036004351660243561114d565b341561054957600080fd5b61034c600160a060020a03600435166112ce565b341561056857600080fd5b61041d6001606060020a03196004351661137b565b341561058857600080fd5b61034c600160a060020a0360043516602435611396565b34156105aa57600080fd5b6102ea600160a060020a03600435166024356115d5565b34156105cc57600080fd5b610311600160a060020a0360043581169060243516611679565b34156105f157600080fd5b61034c600160a060020a03600435166116a4565b341561061057600080fd5b61034c600160a060020a03600435166001606060020a03196024351667ffffffffffffffff6044351661173f565b341561064957600080fd5b61034c600480356001606060020a031916906024803567ffffffffffffffff16919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061176a95505050505050565b600b54608060020a900461ffff1681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b505050505081565b6005602052600090815260409020546c0100000000000000000000000081029067ffffffffffffffff60a060020a8204169061ffff60e060020a820481169160f060020a90041684565b600160a060020a033381166000818152600d6020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60095481565b60015481565b600080548190819033600160a060020a0390811691161461083f57600080fd5b6007546213c6800142101561085357600080fd5b61271084111561086257600080fd5b6008549250612710600a548430600160a060020a031631030281151561088457fe5b04600160a060020a03301631849003819003600855600b5490925067ffffffffffffffff1690508015156108bc5760006009556108d8565b8067ffffffffffffffff166008548115156108d357fe5b046009555b600b546109049067ffffffffffffffff808216916801000000000000000090041663ffffffff61180716565b600b805461ffff608060020a6fffffffffffffffff00000000000000001967ffffffffffffffff9590951667ffffffffffffffff19909316929092179384168290048116600101160271ffffffffffffffffffff00000000000000001990921691909117905542600755600a849055600160a060020a03331682840180156108fc0290604051600060405180830381858888f1935050505015156109a757600080fd5b7f95b96e1160963f28ab46857fdae15e1954dc91f74bb165bd4acaace3da7e22826001600b60109054906101000a900461ffff160330600160a060020a0316318360405161ffff9093168352602083019190915267ffffffffffffffff166040808301919091526060909101905180910390a150505050565b600160a060020a03821660009081526005602052604081205460e060020a900461ffff161515610a4f57600080fd5b600160a060020a03841660009081526005602052604090205460a060020a900467ffffffffffffffff16821115610a8557600080fd5b600160a060020a038085166000908152600d602090815260408083203390941683529290522054821115610ab857600080fd5b600160a060020a038416600090815260056020526040902054610aec9060a060020a900467ffffffffffffffff168361182d565b600160a060020a038581166000908152600560205260408082208054600080516020611b9e8339815191521660a060020a67ffffffffffffffff9687168102919091179091559287168252902054610b48929190041683611807565b600160a060020a038085166000908152600560209081526040808320805467ffffffffffffffff9690961660a060020a02600080516020611b9e833981519152909616959095179094558783168252600d8152838220339093168252919091522054610bba908363ffffffff61184f16565b600160a060020a038086166000818152600d6020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600c5433600160a060020a03908116911614610c4257600080fd5b600160a060020a03821660009081526005602052604090205460e060020a900461ffff161515610c7157600080fd5b600160a060020a038216600090815260056020526040902054610ca59060a060020a900467ffffffffffffffff1682611807565b600160a060020a03831660009081526005602052604090208054600080516020611b9e8339815191521660a060020a67ffffffffffffffff93841602179055600154610cf291831661185e565b600155600160a060020a0382167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405167ffffffffffffffff909116815260200160405180910390a25050565b60005433600160a060020a03908116911614610d5c57600080fd5b6001606060020a03198116600090815260066020526040902054600160a060020a0316600114610d8b57600080fd5b6001606060020a0319166000908152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60045460ff1681565b60005433600160a060020a03908116911614610de457600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600c54600160a060020a031681565b33600160a060020a031660009081526005602052604090205460e060020a900461ffff161515610e5157600080fd5b600b5433600160a060020a0316600090815260056020526040902054608060020a90910461ffff90811660e060020a9092041610610e8e57600080fd5b600b5433600160a060020a03166000818152600560205260409081902080547fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16608060020a90940461ffff1660e060020a029390931790925560095460088054829003905590916108fc821502919051600060405180830381858888f193505050501515610f1c57600080fd5b6001600b60109054906101000a900461ffff160361ffff1633600160a060020a03167f3c2087c927c21c23a795035961330088c6b19c494bd629dc572ab937e026e37760095460405190815260200160405180910390a3565b600b5467ffffffffffffffff1681565b600160a060020a033381166000908152600d6020908152604080832093861683529290529081205480831115610fe257600160a060020a033381166000908152600d60209081526040808320938816835292905290812055611019565b610ff2818463ffffffff61184f16565b600160a060020a033381166000908152600d60209081526040808320938916835292905220555b600160a060020a033381166000818152600d602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526005602052604090205460a060020a900467ffffffffffffffff1690565b600a5481565b600054600160a060020a031681565b60075481565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107555780601f1061072a57610100808354040283529160200191610755565b600b5468010000000000000000900467ffffffffffffffff1681565b600160a060020a03821660009081526005602052604081205460e060020a900461ffff16151561117c57600080fd5b33600160a060020a031660009081526005602052604090205460a060020a900467ffffffffffffffff168211156111b257600080fd5b33600160a060020a03166000908152600560205260409020546111e69060a060020a900467ffffffffffffffff168361182d565b33600160a060020a039081166000908152600560205260408082208054600080516020611b9e8339815191521660a060020a67ffffffffffffffff9687168102919091179091559287168252902054611243929190041683611807565b600160a060020a0380851660008181526005602052604090819020805467ffffffffffffffff9590951660a060020a02600080516020611b9e833981519152909516949094179093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600c5433600160a060020a039081169116146112e957600080fd5b600160a060020a03811660009081526005602052604090205460e060020a900461ffff16151561131857600080fd5b600b54600160a060020a0390911660009081526005602052604090208054600161ffff608060020a90940484160190921660e060020a027fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600660205260009081526040902054600160a060020a031681565b61139e611b76565b60005433600160a060020a039081169116146113b957600080fd5b600160a060020a03831660009081526005602052604090205460f060020a900461ffff1615156113e857600080fd5b600160a060020a038316600090815260056020526040908190209060809051908101604090815291546001606060020a03196c01000000000000000000000000820216825267ffffffffffffffff60a060020a8204166020830190815261ffff60e060020a830481169484019490945260f060020a9091049092166060820152915061148890516001549067ffffffffffffffff1663ffffffff61184f16565b600155600b54608060020a900461ffff16606082015161ffff1614156114ea57600b805460001967ffffffffffffffff6801000000000000000080840482169290920116026fffffffffffffffff000000000000000019909116179055611511565b600b805467ffffffffffffffff19811667ffffffffffffffff918216600019019091161790555b60016006600083516001606060020a031916815260208082019290925260409081016000908120805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0395861617905592861680845260059092528220919091557fceb569181f35f4971bb3fbc5ba013370ce4aa30f973f44253b407a1369aa8abe82518360200151856040516001606060020a0319909316835267ffffffffffffffff90911660208301526040808301919091526060909101905180910390a2505050565b600160a060020a033381166000908152600d6020908152604080832093861683529290529081205461160d908363ffffffff61185e16565b600160a060020a033381166000818152600d602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a039182166000908152600d6020908152604080832093909416825291909152205490565b60005433600160a060020a039081169116146116bf57600080fd5b600160a060020a03811615156116d457600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600c5433600160a060020a0390811691161461175a57600080fd5b611765838383611870565b505050565b600054600160a060020a03166117e9338585604051600160a060020a03939093166c010000000000000000000000000283526001606060020a031991909116601483015267ffffffffffffffff167801000000000000000000000000000000000000000000000000026028820152603001604051809103902083611a96565b600160a060020a0316146117fc57600080fd5b611765338484611870565b600082820167ffffffffffffffff808516908216101561182657600080fd5b9392505050565b600067ffffffffffffffff808416908316111561184957600080fd5b50900390565b60008282111561184957600080fd5b60008282018381101561182657600080fd5b6001606060020a03198216600090815260066020526040902054600160a060020a03161561189d57600080fd5b600160a060020a03831660009081526005602052604090205460e060020a900461ffff16156118cb57600080fd5b600b8054600160a060020a038516600081815260056020908152604080832080547fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e060020a608060020a9788900461ffff90811660019081018216929092029290921780845589547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911698900490911660f060020a0296909617600080516020611b9e8339815191521660a060020a67ffffffffffffffff8a8116919091029190911773ffffffffffffffffffffffffffffffffffffffff199081166c010000000000000000000000008c04179092556001606060020a03198a168552600690935292208054909216909217905591546119f692680100000000000000009091041690611807565b600b80546fffffffffffffffff000000000000000019166801000000000000000067ffffffffffffffff93841602179055600154611a3591831661185e565b600155600160a060020a0383167fa35b4c187b9e49379901f1ee81fc3deb30145c20c65b7c396aead0cf9da9d51e83836040516001606060020a0319909216825267ffffffffffffffff1660208201526040908101905180910390a2505050565b6000806000808451604114611aae5760009350611b6d565b6020850151925060408501519150606085015160001a9050601b8160ff161015611ad657601b015b8060ff16601b14158015611aee57508060ff16601c14155b15611afc5760009350611b6d565b6001868285856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515611b6157600080fd5b50506020604051035193505b50505092915050565b608060405190810160409081526000808352602083018190529082018190526060820152905600ffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffa165627a7a723058201a75c266d935067724fa53718d2b2860e61653ff092dc00f096dc40c5868ca000029

Swarm Source

bzzr://1a75c266d935067724fa53718d2b2860e61653ff092dc00f096dc40c5868ca00
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.