Contract Overview | DigixCrowdSale
ETH Balance: 466,646.009531885422905454 Ether
ETH USD Value: $23,173,640.83 (@ $49.66/ETH)
No Of Transactions: 3335 txns + 790 internalTxns
Token Tracker DIGIX
Misc QRCODE
Address Watch Add To Watch List
Contract Creator 0x4366ddc115d8cf213c564da36e64c8ebaa30cdbdat txn 0xd93209e55e6c3e84c8b26612ab82ea7c2cb9f8c8b53f92b1a0a84c5a5fd68209
Token Tracker
  Latest 25 txns from a total Of 3335 transactions View All

TxHash Block Age From To Value [TxFee]
0xd31e147a4af7ec55275a9dc1009f86f19dc892dccb92a5b876f44300a87bd0ca34341427 mins ago0x12db61b729b287015d5229b511704024a45efb28  IN   DigixCrowdSale0 Ether0.00258972
0x3c3be3900f3dc20ee335d254a077f256c5dad1d997d52baf6c2ee4eff07373d2343408424 mins ago0x12db61b729b287015d5229b511704024a45efb28  IN   DigixCrowdSale0 Ether0.00258972
0x3ae9d3c39a1b79bf993aa278890da245a82fecbe24411fadcd1f6fda70765282335543713 days 4 hrs ago0x7ec20d8c2ee17efaf43ea134e44ac0a174f29630  IN   DigixCrowdSale0 Ether0.00448892
0x323324ecd7d9e853f99bc75ae728af1beb1e6c0bca4e8c6a4fe26ff527a77c70335541813 days 4 hrs ago0x7ec20d8c2ee17efaf43ea134e44ac0a174f29630  IN   DigixCrowdSale0 Ether0.00469392
0xf6af4ce53fe281f5645464cb662e6ba300922924d820d09e2cac230c6b430ad9335518013 days 5 hrs ago0x71a9f7622a48e78b9a650ec4d98b7a5963844189  IN   DigixCrowdSale0 Ether0.00091635
0xc20175db1282ef9ec465429113c01a639fc1ee29bf2fb08c4c00d3c06ba52a37335349413 days 12 hrs ago0x1285fccb5b551e4e048604d20fd25c685cfb50f3  IN   DigixCrowdSale0 Ether0.0054743
0x650c33903fcf2ff5a74c06861beafd694e23216ef5206e825420c10823bed7c2335346613 days 12 hrs ago0x96064de4e1ecc27eb80b4def9750bb63abc92d41  IN   DigixCrowdSale0 Ether0.0047243
0xdbcee9d2252aea86ac30e6d3dbf136536eaee3c5a1ece758f91a6859c8107f2f328378225 days 3 hrs ago0x0a58b1c9aaf19693813c11b8a20d20c2a8fe8883  IN   DigixCrowdSale0 Ether0.00218972
0xeecfdf256a3676e5230a3a2f1897da9b8c6402e1b587defaecac137489c996f7327971925 days 19 hrs ago0xd9cfd26d5eda672cbab487149bfa3355ff359d5b  IN   DigixCrowdSale0.2 Ether0.00448892
0x578b9b60e0eb3c6594f038524838e33b936cab3b80c74be39a98205c05cb0fed327958625 days 20 hrs ago0xd9cfd26d5eda672cbab487149bfa3355ff359d5b  IN   DigixCrowdSale0.02 Ether0.00469392
0x8ff2e82c7eae9111f8f85a35911daca13ba25470a0a1a53ec367d176e0c79c11327919325 days 21 hrs ago0xd9cfd26d5eda672cbab487149bfa3355ff359d5b  IN   DigixCrowdSale0.01 Ether0.00469392
0x7035022596fee68ddabf0cf473013582f7377d52f81349ad172ecc07b4e83f7b327623826 days 9 hrs ago0xd9cfd26d5eda672cbab487149bfa3355ff359d5b  IN   DigixCrowdSale0 Ether0.00469392
0xa60a6510ff990b88c9b809edbaa5cac6a43b4620abbafe85dab9ba9cd4c84369326545128 days 4 hrs ago0x30fab7dc42345904051621166a0369a2ee9aa7d1  IN   DigixCrowdSale0 Ether0.0003129
0xe784ebf09a1f3001fa8a0227fe73daee2a402c9d1c140d69bd303c09b115d2e1324977830 days 19 hrs ago0xb68800edb2e57a5200f44634ad56993549dce953  IN   DigixCrowdSale0 Ether0.000447
0xc889f6ae2404f81a1b64e719217c9b46ffb0c7ce4f18f44e7efb79e2d69dd4f1324973230 days 19 hrs ago0xb68800edb2e57a5200f44634ad56993549dce953  IN   DigixCrowdSale0 Ether0.000447
0x499b53d736edd239e93a2e91a045b45a648a7fb76c62c5f2b5cfac4834352fe8324290331 days 22 hrs ago0xb68800edb2e57a5200f44634ad56993549dce953  IN   DigixCrowdSale0.001 Ether0.000447
0x1788615b41c5bff7f2b92d7679a13089d67fd93f411a988cc2fbced90b738737323975932 days 10 hrs ago0xb68800edb2e57a5200f44634ad56993549dce953  IN   DigixCrowdSale0 Ether0.00051734
0x07c28453f185f3c28336dafedd017453805c9bbad71a15f4197409e26cbd8f0c323399133 days 9 hrs ago0xb68800edb2e57a5200f44634ad56993549dce953  IN   DigixCrowdSale0 Ether0.0023234
0x4a296120052e1d0b755d8ae4d0b243ba4d565065e547e88a857868416bea708c323393033 days 10 hrs ago0x3a1dd9ceec16c17d74a31f64040a77a6a6dec33d  IN   DigixCrowdSale0 Ether0.00054958
0xfdd02c04cef084afcff68e6db1daa6a8dfdb569521eb11bdc14ab0de57e997d5311640052 days 21 hrs ago0x8de07a6120e6c76a254a072377f259309ad8680c  IN   DigixCrowdSale0 Ether0.00387392
0x2c835b722df9444a90123654d678457a70a215e90d51007143eba1c5a1b137f7298834874 days 1 hr ago0x1ebf7db9cf4c62d59683712326decd50187ce96b  IN   DigixCrowdSale0 Ether0.00089351
0x9a648e9f480a36fdadbc5a2413f4a42c5e88010ab7a822b076bbd7d77c711799292319584 days 19 hrs ago0x4e29a44381602690a04e222b7a8a0cd099941b7c  IN   DigixCrowdSale0 Ether0.00091635
0x9fbf1817ea3dc37eed854ae0351c8190a83d86ac95e8f31b89ba700a8604b08a290555687 days 17 hrs ago0xd198768c1525cecd971453830a811690a0651f58  IN   DigixCrowdSale0 Ether0.0011175
0xa13d4e706f19013be6d785a2dd4edfcce4c8053c93b2d3e341adf48fa6176b6f285981695 days 7 hrs ago0xf9ecf98ac8f5af1579ba2ab5b8ebbcf769f38d8d  IN   DigixCrowdSale0 Ether0.0011175
0xe28c70706dc3c4f2656879a6dfe7fbd940af87fb70349e145e368f5e16ec4f27283523299 days 8 hrs ago0x6dea4ea1c5fc6ad3d7e9933665799936a9fdd89c  IN   DigixCrowdSale0 Ether0.0011175

[Download: CSV Export ]    
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 790 View All
ParentTxHash Block Age From To Value
0x6e336046587e37c970d227f5bd277e4d0a3c353bb20b5f5e6a3c27eb063199841425482333 days 1 hr ago0x2cab63e02d5b490e5f4a5d1b0d5189420ea54b2d0xf0160428a8552ac9bb7e050d90eeade4ddd528430.00310756 Ether
0xcbda7135ea9456bd09112cf21ed8c410dc0345e5acdf2b183cc86cc3d575230b1246256362 days 19 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xe096a2db29039b0eb8606bd641ec09787971a9ab833887112fcdf4dde293a2361245970362 days 20 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x01913b538dc70659f71ecb0b96e6e780900720618e94fd9143041b4a16f9e4161245774362 days 21 hrs ago0x010622d2885d3eb139d3ea329f55563e9a73224d0xf0160428a8552ac9bb7e050d90eeade4ddd5284332.42321034 Ether
0xdf0484bdf2f58319a7f02f9cc315a7fd73c667a93bba024c64e68b762fd86c941245543362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x79dce459ac90c56e970707d3ed4efe85943cbce499a032c08b9c646e17fee8f11245505362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xff0dec3c6c267eb0ebc368a823f842292ebfaedfc724bd0a78ef0010aafe5b221245503362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x56522333269648dc38d32691fee6a6efb83421f362bf9fa6f7482703116342b51245482362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xe6be770e642d34fee929d5166c669710071edda7a6bf683c16f96de44343f49f1245454362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x966942df3a23ecb9e2bb2c90e8c314a285f748839e23caa59e416e9e7b0c08c51245452362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x79d68ad7f0d17619ccd10ec0d46024a0531d9dee9b12cda81287098a34b0b9f51245433362 days 22 hrs ago0x128b7ec1c1c6cebd3bfd73938a9c860da01dbfb00xf0160428a8552ac9bb7e050d90eeade4ddd5284369.2088221 Ether
0xeafe2904cd93a51a9e0444980dacfcc18931d18c7f0aca5a3193255dc36ebef01245425362 days 22 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x5a154e6b36d5d0ec2dffa8f73dbc494fc60c5d1898397b3d50616e05d24e6e841245421362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x7aa24cc3d877593631619333a9fd3da3503ca655019135ebf03c1feee2a4bddf1245421362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xe17c5f709836ade2044cdb3f2bc98946b9f59df90852d9fe152fc266d2fca88d1245403362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x449d0f93223c971bd37a65cbd98f6992bea00c08cd1060b7b398ea15630f99fc1245387362 days 23 hrs ago0x2bdadc55ebfb632cc44d02e521ec5cc20d798ae00xf0160428a8552ac9bb7e050d90eeade4ddd528436.93 Ether
0x8192a692cc01bdacfb0a50db2b6ec1c1fd4ac193b28afad549dfddd020f2cad21245369362 days 23 hrs ago0x2f097fda1d3d4edad846d816db83395ac11fc8e80xf0160428a8552ac9bb7e050d90eeade4ddd5284360.40000048 Ether
0x0ef6c4b6d35d6dfabab3f1037e1239bf1cf97a231d620cd83daa647fde05af591245369362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x8b3015277c7a26c75c839267353e92770a03c1f7969326a2509ba8f53d444e881245363362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xeae931ea300fbc477fd5130b731ff878f1faecc75254655e04bdf5ace62e8acf1245353362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x7eb80990d1b222b82c76f3d49752b1147f7408911deb5a39bcb38c84429766f71245351362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x1901a804abf9e1261f9ef46542e38fbd59fc8205a81ee11da63b753f5563f0c41245351362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xc20e73f9d23401381899a2a7389466cfb1186f16bc1271ffde11954a3a44a6dd1245350362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0xcd29ff80352bd4b9f71341bc10ed28ac182902bf03440d5f7dd3689d2180f9cd1245348362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
0x522ae30a6e32cb4680fd0b3e919224488b607f1db89dd9d8b7d52119a13bc9a01245333362 days 23 hrs ago0xf0160428a8552ac9bb7e050d90eeade4ddd52843  Contract Creation0 Ether
Contract Source Code Verified
Contract Name: TokenSales
Compiler Version: 0.3.0-1f9578ce
Optimization Enabled: Yes
Online Solidity Editor:  -NA-



  Contract Source Code   Find Similiar Contracts
/// @title DigixDAO Contract Interfaces

contract ConfigInterface {
  address public owner;
  mapping (address => bool) admins;
  mapping (bytes32 => address) addressMap;
  mapping (bytes32 => bool) boolMap;
  mapping (bytes32 => bytes32) bytesMap;
  mapping (bytes32 => uint256) uintMap;

  /// @notice setConfigAddress sets configuration `_key` to `_val` 
  /// @param _key The key name of the configuration.
  /// @param _val The value of the configuration.
  /// @return Whether the configuration setting was successful or not.
  function setConfigAddress(bytes32 _key, address _val) returns (bool success);

  /// @notice setConfigBool sets configuration `_key` to `_val` 
  /// @param _key The key name of the configuration.
  /// @param _val The value of the configuration.
  /// @return Whether the configuration setting was successful or not.
  function setConfigBool(bytes32 _key, bool _val) returns (bool success);

  /// @notice setConfigBytes sets configuration `_key` to `_val`
  /// @param _key The key name of the configuration.
  /// @param _val The value of the configuration.
  /// @return Whether the configuration setting was successful or not.
  function setConfigBytes(bytes32 _key, bytes32 _val) returns (bool success);

  /// @notice setConfigUint `_key` to `_val`
  /// @param _key The key name of the configuration.
  /// @param _val The value of the configuration.
  /// @return Whether the configuration setting was successful or not.
  function setConfigUint(bytes32 _key, uint256 _val) returns (bool success);

  /// @notice getConfigAddress gets configuration `_key`'s value
  /// @param _key The key name of the configuration.
  /// @return The configuration value 
  function getConfigAddress(bytes32 _key) returns (address val);

  /// @notice getConfigBool gets configuration `_key`'s value
  /// @param _key The key name of the configuration.
  /// @return The configuration value 
  function getConfigBool(bytes32 _key) returns (bool val);

  /// @notice getConfigBytes gets configuration `_key`'s value
  /// @param _key The key name of the configuration.
  /// @return The configuration value 
  function getConfigBytes(bytes32 _key) returns (bytes32 val);

  /// @notice getConfigUint gets configuration `_key`'s value
  /// @param _key The key name of the configuration.
  /// @return The configuration value 
  function getConfigUint(bytes32 _key) returns (uint256 val);

  /// @notice addAdmin sets `_admin` as configuration admin
  /// @return Whether the configuration setting was successful or not.  
  function addAdmin(address _admin) returns (bool success);

  /// @notice removeAdmin removes  `_admin`'s rights
  /// @param _admin The key name of the configuration.
  /// @return Whether the configuration setting was successful or not.  
  function removeAdmin(address _admin) returns (bool success);

}

contract TokenInterface {

  struct User {
    bool locked;
    uint256 balance;
    uint256 badges;
    mapping (address => uint256) allowed;
  }

  mapping (address => User) users;
  mapping (address => uint256) balances;
  mapping (address => mapping (address => uint256)) allowed;
  mapping (address => bool) seller;

  address config;
  address owner;
  address dao;
  bool locked;

  /// @return total amount of tokens
  uint256 public totalSupply;
  uint256 public totalBadges;

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

  /// @param _owner The address from which the badge count will be retrieved
  /// @return The badges count
  function badgesOf(address _owner) constant returns (uint256 badge);

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

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

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

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

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

  /// @notice mint `_amount` of tokens to `_owner`
  /// @param _owner The address of the account receiving the tokens
  /// @param _amount The amount of tokens to mint
  /// @return Whether or not minting was successful
  function mint(address _owner, uint256 _amount) returns (bool success);

  /// @notice mintBadge Mint `_amount` badges to `_owner`
  /// @param _owner The address of the account receiving the tokens
  /// @param _amount The amount of tokens to mint
  /// @return Whether or not minting was successful
  function mintBadge(address _owner, uint256 _amount) returns (bool success);

  function registerDao(address _dao) returns (bool success);

  function registerSeller(address _tokensales) returns (bool success);

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

contract TokenSalesInterface {

  struct SaleProxy {
    address payout;
    bool isProxy;
  }

  struct SaleStatus {
    bool founderClaim;
    uint256 releasedTokens;
    uint256 releasedBadges;
    uint256 claimers;
  }

  struct Info {
    uint256 totalWei;
    uint256 totalCents;
    uint256 realCents;
    uint256 amount;
  }

  struct SaleConfig {
    uint256 startDate;
    uint256 periodTwo;
    uint256 periodThree;
    uint256 endDate;
    uint256 goal;
    uint256 cap;
    uint256 badgeCost;
    uint256 founderAmount;
    address founderWallet;
  }

  struct Buyer {
    uint256 centsTotal;
    uint256 weiTotal;
    bool claimed;
  }

  Info saleInfo;
  SaleConfig saleConfig;
  SaleStatus saleStatus;

  address config;
  address owner;
  bool locked;

  uint256 public ethToCents;

  mapping (address => Buyer) buyers;
  mapping (address => SaleProxy) proxies;

  /// @notice Calculates the parts per billion 1⁄1,000,000,000 of `_a` to `_b`
  /// @param _a The antecedent
  /// @param _c The consequent
  /// @return Part per billion value
  function ppb(uint256 _a, uint256 _c) public constant returns (uint256 b);


  /// @notice Calculates the share from `_total` based on `_contrib` 
  /// @param _contrib The contributed amount in USD
  /// @param _total The total amount raised in USD
  /// @return Total number of shares
  function calcShare(uint256 _contrib, uint256 _total) public constant returns (uint256 share);

  /// @notice Calculates the current USD cents value of `_wei` 
  /// @param _wei the amount of wei
  /// @return The USD cents value
  function weiToCents(uint256 _wei) public constant returns (uint256 centsvalue);

  function proxyPurchase(address _user) returns (bool success);

  /// @notice Send msg.value purchase for _user.  
  /// @param _user The account to be credited
  /// @return Success if purchase was accepted
  function purchase(address _user, uint256 _amount) private returns (bool success);

  /// @notice Get crowdsale information for `_user`
  /// @param _user The account to be queried
  /// @return `centstotal` the total amount of USD cents contributed
  /// @return `weitotal` the total amount in wei contributed
  /// @return `share` the current token shares earned
  /// @return `badges` the number of proposer badges earned
  /// @return `claimed` is true if the tokens and badges have been claimed
  function userInfo(address _user) public constant returns (uint256 centstotal, uint256 weitotal, uint256 share, uint badges, bool claimed); 

  /// @notice Get the crowdsale information from msg.sender (see userInfo)
  function myInfo() public constant returns (uint256 centstotal, uint256 weitotal, uint256 share, uint badges, bool claimed); 

  /// @notice get the total amount of wei raised for the crowdsale
  /// @return The amount of wei raised
  function totalWei() public constant returns (uint);

  /// @notice get the total USD value in cents raised for the crowdsale
  /// @return the amount USD cents
  function totalCents() public constant returns (uint);

  /// @notice get the current crowdsale information
  /// @return `startsale` The unix timestamp for the start of the crowdsale and the first period modifier
  /// @return `two` The unix timestamp for the start of the second period modifier
  /// @return `three` The unix timestamp for the start of the third period modifier
  /// @return `endsale` The unix timestamp of the end of crowdsale
  /// @return `totalwei` The total amount of wei raised
  /// @return `totalcents` The total number of USD cents raised
  /// @return `amount` The amount of DGD tokens available for the crowdsale
  /// @return `goal` The USD value goal for the crowdsale
  /// @return `famount` Founders endowment
  /// @return `faddress` Founder wallet address
  /*function getSaleInfo() public constant returns (uint256 startsale, uint256 two, uint256 three, uint256 endsale, uint256 totalwei, uint256 totalcents, uint256 amount, uint256 goal, uint256 famount, address faddress);*/

  function claimFor(address _user) returns (bool success); 

  /// @notice Allows msg.sender to claim the DGD tokens and badges if the goal is reached or refunds the ETH contributed if goal is not reached at the end of the crowdsale
  function claim() returns (bool success);

  function claimFounders() returns (bool success);

  /// @notice See if the crowdsale goal has been reached
  function goalReached() public constant returns (bool reached);

  /// @notice Get the current sale period
  /// @return `saleperiod` 0 = Outside of the crowdsale period, 1 = First reward period, 2 = Second reward period, 3 = Final crowdsale period.
  function getPeriod() public constant returns (uint saleperiod);

  /// @notice Get the date for the start of the crowdsale
  /// @return `date` The unix timestamp for the start
  function startDate() public constant returns (uint date);
  
  /// @notice Get the date for the second reward period of the crowdsale
  /// @return `date` The unix timestamp for the second period
  function periodTwo() public constant returns (uint date);

  /// @notice Get the date for the final period of the crowdsale
  /// @return `date` The unix timestamp for the final period
  function periodThree() public constant returns (uint date);

  /// @notice Get the date for the end of the crowdsale
  /// @return `date` The unix timestamp for the end of the crowdsale
  function endDate() public constant returns (uint date);

  /// @notice Check if crowdsale has ended
  /// @return `ended` If the crowdsale has ended
  
  function isEnded() public constant returns (bool ended);

  /// @notice Send raised funds from the crowdsale to the DAO
  /// @return `success` if the send succeeded
  function sendFunds() public returns (bool success);

  //function regProxy(address _payment, address _payout) returns (bool success);
  function regProxy(address _payout) returns (bool success);

  function getProxy(address _payout) public returns (address proxy);
  
  function getPayout(address _proxy) public returns (address payout, bool isproxy);

  function unlock() public returns (bool success);

  function getSaleStatus() public constant returns (bool fclaim, uint256 reltokens, uint256 relbadges, uint256 claimers);

  function getSaleInfo() public constant returns (uint256 weiamount, uint256 cents, uint256 realcents, uint256 amount);

  function getSaleConfig() public constant returns (uint256 start, uint256 two, uint256 three, uint256 end, uint256 goal, uint256 cap, uint256 badgecost, uint256 famount, address fwallet);
  
  event Purchase(uint256 indexed _exchange, uint256 indexed _rate, uint256 indexed _cents);
  event Claim(address indexed _user, uint256 indexed _amount, uint256 indexed _badges);

}

contract ProxyPayment {

  address payout;
  address tokenSales; 
  address owner;

  function ProxyPayment(address _payout, address _tokenSales) {
    payout = _payout;
    tokenSales = _tokenSales;
    owner = _payout;
  }

  function () {
    if (!TokenSalesInterface(tokenSales).proxyPurchase.value(msg.value).gas(106000)(payout)) throw;
  }

}

contract TokenSales is TokenSalesInterface {

  modifier ifOwner() {
    if (msg.sender != owner) throw;
    _
  }

  modifier ifOOrigin() {
    if (tx.origin != owner) throw;
    _
  }

  mapping (address => address) proxyPayouts;
  uint256 public WEI_PER_ETH = 1000000000000000000;
  uint256 public BILLION = 1000000000;
  uint256 public CENTS = 100;


  function TokenSales(address _config) {
    owner = msg.sender;
    config = _config;
    saleStatus.founderClaim = false;
    saleStatus.releasedTokens = 0;
    saleStatus.releasedBadges = 0;
    saleStatus.claimers = 0;
    saleConfig.startDate = ConfigInterface(_config).getConfigUint("sale1:period1");
    saleConfig.periodTwo = ConfigInterface(_config).getConfigUint("sale1:period2");
    saleConfig.periodThree = ConfigInterface(_config).getConfigUint("sale1:period3");
    saleConfig.endDate = ConfigInterface(_config).getConfigUint("sale1:end");
    saleConfig.founderAmount = ConfigInterface(_config).getConfigUint("sale1:famount") * BILLION;
    saleConfig.founderWallet = ConfigInterface(_config).getConfigAddress("sale1:fwallet");
    saleConfig.goal = ConfigInterface(_config).getConfigUint("sale1:goal") * CENTS;
    saleConfig.cap = ConfigInterface(_config).getConfigUint("sale1:cap") * CENTS;
    saleConfig.badgeCost = ConfigInterface(_config).getConfigUint("sale1:badgecost") * CENTS;
    saleInfo.amount = ConfigInterface(_config).getConfigUint("sale1:amount") * BILLION;
    saleInfo.totalWei = 0;
    saleInfo.totalCents = 0;
    saleInfo.realCents;
    saleStatus.founderClaim = false;
    locked = true;
  }

  function () {
    if (getPeriod() == 0) throw;
    uint256 _amount = msg.value;
    address _sender;
    if (proxies[msg.sender].isProxy == true) {
      _sender = proxies[msg.sender].payout;
    } else {
      _sender = msg.sender;
    }
    if (!purchase(_sender, _amount)) throw;
  }

  function proxyPurchase(address _user) returns (bool success) {
    return purchase(_user, msg.value);
  }

  function purchase(address _user, uint256 _amount) private returns (bool success) {
    uint256 _cents = weiToCents(_amount);
    if ((saleInfo.realCents + _cents) > saleConfig.cap) return false;
    uint256 _wei = _amount;
    uint256 _modifier;
    uint _period = getPeriod();
    if ((_period == 0) || (_cents == 0)) {
      return false;
    } else {
      if (_period == 3) _modifier = 100;
      if (_period == 2) _modifier = 115;
      if (_period == 1) _modifier = 130;
      uint256 _creditwei = _amount;
      uint256 _creditcents = (weiToCents(_creditwei) * _modifier * 10000) / 1000000 ;
      buyers[_user].centsTotal += _creditcents;
      buyers[_user].weiTotal += _creditwei; 
      saleInfo.totalCents += _creditcents;
      saleInfo.realCents += _cents;
      saleInfo.totalWei += _creditwei;
      Purchase(ethToCents, _modifier, _creditcents); 
      return true;
    }
  }

  function ppb(uint256 _a, uint256 _c) public constant returns (uint256 b) {
    b = (BILLION * _a + _c / 2) / _c;
    return b;
  }

  function calcShare(uint256 _contrib, uint256 _total) public constant returns (uint256 share) {
    uint256 _ppb = ppb(_contrib, _total);
    share = ((_ppb * saleInfo.amount) / BILLION);
    return share;
  }

  function weiToCents(uint256 _wei) public constant returns (uint256 centsvalue) {
    centsvalue = ((_wei * 100000 / WEI_PER_ETH) * ethToCents) / 100000;
    return centsvalue;
  }

  function setEthToCents(uint256 _eth) ifOwner returns (bool success) {
    ethToCents = _eth;
    success = true;
    return success;
  }


  function getSaleStatus() public constant returns (bool fclaim, uint256 reltokens, uint256 relbadges, uint256 claimers) {
    return (saleStatus.founderClaim, saleStatus.releasedTokens, saleStatus.releasedBadges, saleStatus.claimers);
  }

  function getSaleInfo() public constant returns (uint256 weiamount, uint256 cents, uint256 realcents, uint256 amount) {
    return (saleInfo.totalWei, saleInfo.totalCents, saleInfo.realCents, saleInfo.amount);
  }


  function getSaleConfig() public constant returns (uint256 start, uint256 two, uint256 three, uint256 end, uint256 goal, uint256 cap, uint256 badgecost, uint256 famount, address fwallet) {
    return (saleConfig.startDate, saleConfig.periodTwo, saleConfig.periodThree, saleConfig.endDate, saleConfig.goal, saleConfig.cap, saleConfig.badgeCost, saleConfig.founderAmount, saleConfig.founderWallet);
  }

  function goalReached() public constant returns (bool reached) {
    reached = (saleInfo.totalCents >= saleConfig.goal);
    return reached;
  }

  function claim() returns (bool success) {
    return claimFor(msg.sender);
  }

  function claimFor(address _user) returns (bool success) {
    if ( (now < saleConfig.endDate) || (buyers[_user].claimed == true) ) {
      return true;
    }
  
    if (!goalReached()) {
      if (!address(_user).send(buyers[_user].weiTotal)) throw;
      buyers[_user].claimed = true;
      return true;
    }

    if (goalReached()) {
      address _tokenc = ConfigInterface(config).getConfigAddress("ledger");
      uint256 _tokens = calcShare(buyers[_user].centsTotal, saleInfo.totalCents); 
      uint256 _badges = buyers[_user].centsTotal / saleConfig.badgeCost;
      if ((TokenInterface(_tokenc).mint(msg.sender, _tokens)) && (TokenInterface(_tokenc).mintBadge(_user, _badges))) {
        saleStatus.releasedTokens += _tokens;
        saleStatus.releasedBadges += _badges;
        saleStatus.claimers += 1;
        buyers[_user].claimed = true;
        Claim(_user, _tokens, _badges);
        return true;
      } else {
        return false;
      }
    }

  }

  function claimFounders() returns (bool success) {
    if (saleStatus.founderClaim == true) return false;
    if (now < saleConfig.endDate) return false;
    if (!goalReached()) return false;
    address _tokenc = ConfigInterface(config).getConfigAddress("ledger");
    uint256 _tokens = saleConfig.founderAmount;
    uint256 _badges = 4;
    address _faddr = saleConfig.founderWallet;
    if ((TokenInterface(_tokenc).mint(_faddr, _tokens)) && (TokenInterface(_tokenc).mintBadge(_faddr, _badges))) {
      saleStatus.founderClaim = true;
      saleStatus.releasedTokens += _tokens;
      saleStatus.releasedBadges += _badges;
      saleStatus.claimers += 1;
      Claim(_faddr, _tokens, _badges);
      return true;
    } else {
      return false;
    }
  }

  function getPeriod() public constant returns (uint saleperiod) {
    if ((now > saleConfig.endDate) || (now < saleConfig.startDate)) {
      saleperiod = 0;
      return saleperiod;
    }
    if (now >= saleConfig.periodThree) {
      saleperiod = 3;
      return saleperiod;
    }
    if (now >= saleConfig.periodTwo) {
      saleperiod = 2;
      return saleperiod;
    }
    if (now < saleConfig.periodTwo) {
      saleperiod = 1;
      return saleperiod;
    }
  }

  function userInfo(address _user) public constant returns (uint256 centstotal, uint256 weitotal, uint256 share, uint badges, bool claimed) {
    share = calcShare(buyers[_user].centsTotal, saleInfo.totalCents);
    badges = buyers[_user].centsTotal / saleConfig.badgeCost;
    return (buyers[_user].centsTotal, buyers[_user].weiTotal, share, badges, buyers[_user].claimed);
  }

  function myInfo() public constant returns (uint256 centstotal, uint256 weitotal, uint256 share, uint badges, bool claimed) {
    return userInfo(msg.sender);
  }

  function totalWei() public constant returns (uint) {
    return saleInfo.totalWei;
  }

  function totalCents() public constant returns (uint) {
    return saleInfo.totalCents;
  }

  function startDate() public constant returns (uint date) {
    return saleConfig.startDate;
  }
  
  function periodTwo() public constant returns (uint date) {
    return saleConfig.periodTwo;
  }

  function periodThree() public constant returns (uint date) {
    return saleConfig.periodThree;
  }

  function endDate() public constant returns (uint date) {
    return saleConfig.endDate;
  }

  function isEnded() public constant returns (bool ended) {
    return (now >= endDate());
  }
  
  function sendFunds() public returns (bool success) {
    if (locked) return false;
    if (!goalReached()) return false;
    if (!isEnded()) return false;
    address _dao = ConfigInterface(config).getConfigAddress("sale1:dao");
    if (_dao == 0x0000000000000000000000000000000000000000) return false;
    return _dao.send(totalWei());
  }

  function regProxy(address _payout) ifOOrigin returns (bool success) {
    address _proxy = new ProxyPayment(_payout, address(this));
    proxies[_proxy].payout = _payout;
    proxies[_proxy].isProxy = true;
    proxyPayouts[_payout] = _proxy;
    return true;
  }
  
  function getProxy(address _payout) public returns (address proxy) {
    return proxyPayouts[_payout];
  }

  function getPayout(address _proxy) public returns (address payout, bool isproxy) {
    return (proxies[_proxy].payout, proxies[_proxy].isProxy);
  }

  function unlock() ifOwner public returns (bool success) {
    locked = false;
    return true;
  }
}

  Contract ABI  
[{"constant":false,"inputs":[{"name":"_eth","type":"uint256"}],"name":"setEthToCents","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"startDate","outputs":[{"name":"date","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"claimFounders","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"userInfo","outputs":[{"name":"centstotal","type":"uint256"},{"name":"weitotal","type":"uint256"},{"name":"share","type":"uint256"},{"name":"badges","type":"uint256"},{"name":"claimed","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"getPeriod","outputs":[{"name":"saleperiod","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"periodTwo","outputs":[{"name":"date","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"}],"name":"proxyPurchase","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"BILLION","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"ethToCents","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_wei","type":"uint256"}],"name":"weiToCents","outputs":[{"name":"centsvalue","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalWei","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"WEI_PER_ETH","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"goalReached","outputs":[{"name":"reached","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_proxy","type":"address"}],"name":"getPayout","outputs":[{"name":"payout","type":"address"},{"name":"isproxy","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"myInfo","outputs":[{"name":"centstotal","type":"uint256"},{"name":"weitotal","type":"uint256"},{"name":"share","type":"uint256"},{"name":"badges","type":"uint256"},{"name":"claimed","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_payout","type":"address"}],"name":"regProxy","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"getSaleStatus","outputs":[{"name":"fclaim","type":"bool"},{"name":"reltokens","type":"uint256"},{"name":"relbadges","type":"uint256"},{"name":"claimers","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"sendFunds","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isEnded","outputs":[{"name":"ended","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"unlock","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_contrib","type":"uint256"},{"name":"_total","type":"uint256"}],"name":"calcShare","outputs":[{"name":"share","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_payout","type":"address"}],"name":"getProxy","outputs":[{"name":"proxy","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"periodThree","outputs":[{"name":"date","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalCents","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"endDate","outputs":[{"name":"date","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getSaleConfig","outputs":[{"name":"start","type":"uint256"},{"name":"two","type":"uint256"},{"name":"three","type":"uint256"},{"name":"end","type":"uint256"},{"name":"goal","type":"uint256"},{"name":"cap","type":"uint256"},{"name":"badgecost","type":"uint256"},{"name":"famount","type":"uint256"},{"name":"fwallet","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"getSaleInfo","outputs":[{"name":"weiamount","type":"uint256"},{"name":"cents","type":"uint256"},{"name":"realcents","type":"uint256"},{"name":"amount","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"}],"name":"claimFor","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"CENTS","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_a","type":"uint256"},{"name":"_c","type":"uint256"}],"name":"ppb","outputs":[{"name":"b","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_config","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_exchange","type":"uint256"},{"indexed":true,"name":"_rate","type":"uint256"},{"indexed":true,"name":"_cents","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"},{"indexed":true,"name":"_amount","type":"uint256"},{"indexed":true,"name":"_badges","type":"uint256"}],"name":"Claim","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405236156101695760e060020a6000350463034187fd81146101785780630b97bc861461019e5780630c77a697146101a85780631959a002146101c95780631ed24195146101fe5780633f5b7675146102235780634a5dddd21461022e5780634beda18b146102405780634e71d92d146102495780635d7e8c15146102575780636d568c43146102605780636d98e9fc1461028257806374ffdcd01461028e5780637d3d6522146102975780638006745b146102a857806385b31d7b146102eb5780638c0e2a31146103015780638c3c4b34146103275780638d68cf5914610344578063a4fd6f5614610363578063a69df4b514610371578063ab51902014610394578063b7fba4d3146103ac578063bb7859b5146103d2578063bc126ba1146103dd578063c24a0f8b146103e8578063cea943ee146103f4578063db83694c14610463578063ddeae03314610477578063f5582870146104c0578063f697a0ed146104c9575b6104e2600060006104e4610202565b610563600435601254600090600160a060020a0390811633919091161461070b57610002565b6105636004545b90565b610563600d54600090819081908190819060ff166001141561098d57610b59565b6105756004355b600160a060020a0381166000908152601460205260408120546001548291829182918291610b94919061039e565b6105635b600754600090421180610216575060045442105b15610b60575060006101a5565b6105636005546101a5565b61056360043560006105e3823461053d565b61056360185481565b61056360006107183361047e565b61056360135481565b6105636004355b601354601754620186a083810291909104909102045b919050565b6105635b6000546101a5565b61056360175481565b6105635b60085460015410156101a5565b600435600160a060020a03908116600090815260156020908152604080519281902054938416835260a060020a90930460ff169082015281519081900390910190f35b61057560006000600060006000610bd8336101d0565b610563600435601254600090819032600160a060020a03908116911614610cde57610002565b6105a0600d54600e54600f5460105460ff93909316925b90919293565b610563601254600090819060a060020a900460ff1615610c0a57610c06565b6105635b6000610be96103ec565b610563601254600090600160a060020a03908116339190911614610d8f57610002565b6105636004356024355b600060006106f984846104d3565b6105c6600435600160a060020a038181166000908152601660205260409020541661027d565b6105636006546101a5565b6105636001546101a5565b6105635b6007546101a5565b60408051600754600854600a54600554600654600454600954600b54600c549289526020890194909452878901929092526060870195909552608086019390935260a085019290925260c084015260e0830152600160a060020a03166101008201529051908190036101200190f35b6105a060005460015460025460035461033e565b6105636004355b6007546000908190819081904210806104b25750600160a060020a03851681526014602052604081206002015460ff166001145b1561071f5760019350610799565b61056360195481565b6105636004356024355b60185490910260028204010490565b005b600014156104f157610002565b33600160a060020a031660009081526015602052604090205434925060a060020a900460ff16600114156105345750604060002054600160a060020a0316610537565b50335b61055481835b60006000600060006000600060006105ea88610267565b151561055f57610002565b5050565b60408051918252519081900360200190f35b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b604080519485526020850193909352838301919091526060830152519081900360800190f35b60408051600160a060020a03929092168252519081900360200190f35b905061027d565b600954600254919750908701111561060557600096506106ed565b879450610610610202565b925082600014806106215750856000145b1561062f57600096506106ed565b826003141561063d57606493505b826002141561064b57607393505b826001141561065957608293505b879150620f42408461066a84610267565b600160a060020a038c1660009081526014602052604080822080549390940261271002949094049182018355600192830180548701905582548201909255600280548a01905581548501825591516013549293508392879290917f75cc31666f3b6385ba515cf89fd41064642231a796fa7eeea1ba48d9b8ebe2699190a4600196505b50505050505092915050565b60185460035490910204949350505050565b506013819055600161027d565b90506101a5565b61072761029b565b151561076557600160a060020a0385166000818152601460205260408051908220600101549082818181858883f19350505050151561076d57610002565b6107a161029b565b600160a060020a0385166000908152601460205260409020600201805460ff1916600190811790915593505b505050919050565b15610799576040805160115460e160020a637c4b281d02825260d160020a653632b233b2b90260048301529151600160a060020a03929092169163f896503a9160248082019260209290919082900301816000876161da5a03f1156100025750506040805151600160a060020a03881660009081526014602052919091205460015491955061083192509061039e565b600a54600160a060020a03878116600090815260146020908152604080518184205460e060020a6340c10f1902825233861660048301526024820188905291519698509490049550918716936340c10f1993604480820194939183900301908290876161da5a03f1156100025750506040515190508015610907575082600160a060020a031663e42bff6686836040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750506040515190505b1561098457600e805483019055600f805482019055601080546001908101909155600160a060020a038616600081815260146020526040808220600201805460ff1916909417909355915183928592917f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79190a460019350610799565b60009350610799565b6007544210156109a05760009450610b59565b6109a861029b565b15156109b75760009450610b59565b6040805160115460e160020a637c4b281d02825260d160020a653632b233b2b90260048301529151600160a060020a03929092169163f896503a9160248082019260209290919082900301816000876161da5a03f115610002575050604080518051600b54600c5460e060020a6340c10f19028452600160a060020a039081166004858101829052602486018490529551939a50919850939650945091871692506340c10f1991604480830192602092919082900301816000876161da5a03f1156100025750506040515190508015610ae5575083600160a060020a031663e42bff6682846040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750506040515190505b15610b5457600d805460ff19166001908117909155600e805485019055600f80548401905560108054909101905560405182908490600160a060020a038416907f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf790600090a460019450610b59565b600094505b5050505090565b6006544210610b71575060036101a5565b6005544210610b82575060026101a5565b6005544210156101a5575060016101a5565b600a54600160a060020a038816600090815260146020526040902080546001820154600292909201549098509096509194508604925060ff16905091939590929450565b945094509450945094509091929394565b42101590506101a5565b6040516000818181858888f19550505050505b5090565b610c1261029b565b1515610c215760009150610c06565b610c29610367565b1515610c385760009150610c06565b6040805160115460e160020a637c4b281d0282527f73616c65313a64616f000000000000000000000000000000000000000000000060048301529151600160a060020a03929092169163f896503a9160248082019260209290919082900301816000876161da5a03f11561000257505060405151915050600160a060020a03811660001415610cca5760009150610c06565b80600160a060020a03166000610bf3610286565b823060405160d780610db58339018083600160a060020a0316815260200182600160a060020a0316815260200192505050604051809103906000f0600160a060020a038181166000908152601560209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168a1774ff0000000000000000000000000000000000000000191660a060020a179091559790931682526016905220805490941617909255506001919050565b506012805474ff00000000000000000000000000000000000000001916905560016101a556606060408181528060d7833960a090525160805160008054600160a060020a031990811684179091556001805482168317905560028054909116831790555050608c80604b6000396000f360606040523615600a575b60886001546000547f4a5dddd200000000000000000000000000000000000000000000000000000000606090815273ffffffffffffffffffffffffffffffffffffffff918216606452911690634a5dddd29062019e10903490608490602090602481858988f11560025750506040515115159250608a915050576002565b005b56
View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward