Sponsored Link:   trade.io - The Future of Crypto Trading - A Better, Faster, Smarter Crypto Exchange - Pre-Register Now!
Contract Overview
Balance: 0.641005180240367959 Ether
Ether Value: $323.16 (@ $504.14/ETH)
Transactions: 119 txns
Token Contract: EthPyramid (EPY)
Misc
Address Watch: Add To Watch List
Contract Creator: 0xca8315aa826bcdb56facb1c62dbd558e4972e43dat txn 0x265ca20bba8c5e4bcc358350bbd90e3b73a7fa59f8b711d6499f9269d1c7cc9d
Token Balances:
 Latest 25 txns from a total Of 119 transactions

TxHash Age From To Value [TxFee]
0xc7e4a4f07dba0b6caa64dfb3bf271e62b68401a6fb2ea0d301694f0a8756b46c9 days 1 hr ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.0004070755
0x71afa04b145635c6999c238f642eea11588ed70ce5653d829ead93d8a7d1d63d18 days 5 hrs ago0x894bcd33b13c2c521913b634d92efa01d7b32970  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000062627
0x3c6f60245ea08367bcd192974b2ffa33140cb8f6f14b8561eed700311542713740 days 14 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000751524
0x0989bfb1e097cf0d7b89dc516f87ae28c282016609012fe0b34cd1038dd7c3cc48 days 8 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.1 Ether0.00148506
0xc69d9d309182558e6d58cf58d49c3f9f779ceabea1a9956272cf80a1d2d25c7849 days 5 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000751524
0x8acc47bbd6847785433d2fa38d1cf3bfa8b13c0264dda4ce4b85ae68228fb0fc52 days 4 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.00025022
0x36acd1c1fbe9998c94dacff4aafdb7eaa1218e25fc8b6f95a9a3e8d5eeea632e52 days 14 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.00062555
0x37ca92aaaa22d361f0be4cc9420f3332b29280c6974c7d3d46edbf06a541e7ee70 days 10 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.0063 Ether0.000236724
0x0eb0a3028854f65d49ebab20988499349a5b35f6a017fe1013b1d3f368eb362175 days 6 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000137781
0x2889cc733e4902b71dbe40c065fbf3a57c909034fda8d86deaefa8c514389df884 days 15 hrs ago0xab8c5c034f1cd123c62413a88ef3ada2d90f68c5  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.00012511
0x4b4df2c5915db528cd3f610d0659254e5a32046b84006c4e2c0e1d2178dbe68a85 days 4 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000062555
0xd03624760c3e42b0aced74113ea1cdd1fb7f49474bb659c5efe75a6b6cd4727190 days 14 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000045927
0xc32e3327873a4693279d3bef94e794b2c8a68296c7f1270116128a2d4faf407e90 days 15 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000637836
0xc0d97e565694c237472f07722fbe2a930b705c771f0bc9659f178cae1a58639e90 days 15 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000637836
0x73210b9c4eb1fd8de87c44f56980285fd99a8dc2c029c979882787825cf66e5d90 days 15 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000038153
0x19a4254d741c4fedf15bb3a5450b1c95bef4a080e0b34a6412addeecd9b7169f92 days 1 hr ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.006004 Ether0.000059181
0xc979c46ccb5808d6eaa7cdf75adaa90d76cf2af21ddefcaad6b5c39e8330b69192 days 10 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.005983 Ether0.0001872801
0x14467e0674ee1e7512c64602cd45f55fd0b0207c6613621ba7971a0d2e468a1192 days 19 hrs ago0x1bff0f6a253ea6a5e18a0d4f25bfe32fe92f9b5d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.005961 Ether0.000089181
0x5b5125d21ad3850fb7beb70851b203c783c71eb9fbec6daa3c0d5e69f07f040a99 days 17 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000065441
0xbd9547a45e5bbee2e14a9cb3c6ede3b2f4472df9de9aeb7883eac6d381a83931100 days 5 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000045927
0x09945cb424c54706521dd94639982d166146b147547191e9711ccf5697486209101 days 10 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.0000523528
0x89005c3da2f1b01bb2179db2913b1f72dcd6c4f5ed63cc376d9ee273dc9b8591101 days 13 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.5 Ether0.000089181
0x85581df3bd2596409b1f7bb823f1329d4e267394ef8b9058d4cf1d0dc1b3abc4103 days 9 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.0037 Ether0.0000267759
0xb620e282cd5c03cc1ceeb9c0cfb1a7d2975fff72d9d7ea66730e343f482222b1104 days 22 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.01 Ether0.0000816783
0x83e34078422038214d958730ead319f14d4f6dd9f70df0fd2fb5a1e824d663b1107 days 13 hrs ago0x3e5386fc13c123da53523f6b11417e83433c4fca  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000125254
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0xc7e4a4f07dba0b6caa64dfb3bf271e62b68401a6fb2ea0d301694f0a8756b46c59299209 days 1 hr ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x415e94a5246ac4d3f16a833f51ff9066f215a4210.003167878207081618 Ether
0x71afa04b145635c6999c238f642eea11588ed70ce5653d829ead93d8a7d1d63d587636718 days 5 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x894bcd33b13c2c521913b634d92efa01d7b329700.014861763932624224 Ether
0x3c6f60245ea08367bcd192974b2ffa33140cb8f6f14b8561eed7003115427137574710940 days 14 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x361084af8d45e07885b31fcedcb642b9cc7b72d70.007444719890230833 Ether
0xc69d9d309182558e6d58cf58d49c3f9f779ceabea1a9956272cf80a1d2d25c78569848349 days 5 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.370515165208017599 Ether
0x8acc47bbd6847785433d2fa38d1cf3bfa8b13c0264dda4ce4b85ae68228fb0fc568175752 days 4 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.012626688624470864 Ether
0x36acd1c1fbe9998c94dacff4aafdb7eaa1218e25fc8b6f95a9a3e8d5eeea632e567950452 days 14 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x341c48c0e833e179cca6c605b823e9a4911a3d000.034894353845781655 Ether
0x0eb0a3028854f65d49ebab20988499349a5b35f6a017fe1013b1d3f368eb3621555038275 days 6 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x341c48c0e833e179cca6c605b823e9a4911a3d000.00380332921615407 Ether
0x2889cc733e4902b71dbe40c065fbf3a57c909034fda8d86deaefa8c514389df8549673084 days 15 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.027050449953222267 Ether
0x4b4df2c5915db528cd3f610d0659254e5a32046b84006c4e2c0e1d2178dbe68a549354085 days 4 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.072516617465819813 Ether
0xd03624760c3e42b0aced74113ea1cdd1fb7f49474bb659c5efe75a6b6cd47271546191890 days 14 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xbe23a099ee09f34e75095c7b1ff62b678a313a5a0.0097137265413919 Ether
0xbd9547a45e5bbee2e14a9cb3c6ede3b2f4472df9de9aeb7883eac6d381a839315404858100 days 5 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x415e94a5246ac4d3f16a833f51ff9066f215a4210.000327370789874031 Ether
0x83e34078422038214d958730ead319f14d4f6dd9f70df0fd2fb5a1e824d663b15360703107 days 13 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x3e5386fc13c123da53523f6b11417e83433c4fca0.002154294516182259 Ether
0xd159c74e3aa4f5ff5dec5ef191907fecc8b550e9af622bd92e1d7b858c3d089b5350984109 days 3 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x9afda2dd29775559f42833302feb357b0cf33f970.016231446940578701 Ether
0x74cbf09cff9a87b11ff133ee76c396e5dcce100c018a39ad040d2ec90ef331b35257032124 days 22 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xf2898375a42deda8a52147ae7bbf58d6c84c3b760.002995856232832636 Ether
0xfe47bd3f1c0a1839cc02a4f6b751a5581c623e6d3df1cc7a9f5b2101296119065190405136 days 6 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.007554552280443105 Ether
0x347a2348d150dadf59a1190be5510caa455dec7478acd6abbdaf0a3679afa6b65160489141 days 8 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.000407321110953174 Ether
0xa1b15f748c04dda2426847f493dec8609c94251678b285590e3c3b0800d6c6e65077112155 days 11 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x522273122b20212fe255875a4737b6f50cc720060.046534558540538741 Ether
0x297ad2cbfcf3e8d0c427ac4d6b006a0377b8d82674f0bdb96575ed4080f336355074331155 days 22 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x097254e687e480b914ef83fa9d5089ed83fa33190.012101952548306201 Ether
0x01fd4231772684a2fbe15b39eadd9987940515dcaa5ae22b008db25f37e8d45b5072124156 days 7 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x415e94a5246ac4d3f16a833f51ff9066f215a4210.000241194860534278 Ether
0x6754d74f613b1affeaf54b1bcaf01e316f7fbf0ae546232bbcd272bd6691be3e5068626156 days 21 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x5e79ec5eb679cea45be3392381f4637fe1eb6e620.000807152568013314 Ether
0x1a90c8cb55c1799137925ec6e00dbde37847b7f3ef6b9f68d5deeb81689a2a125062619157 days 21 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x522273122b20212fe255875a4737b6f50cc720060.010911733481298711 Ether
0x2ff2ce077af0c058358de92a39c6244a2e37624030ec8657da80f8f834be1f7b5060439158 days 6 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x32f695533cf79987c48316496c66ec3150619ba60.003256659338505259 Ether
0xf79efd9a6d6390e8536ece2fadb3c4ce878c43b5a787988af27a7c2b35b623985036599162 days 6 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x7b2116380f3bf546d4df4c0d775eae5f83e6ab330.033112945476635497 Ether
0x8e94e23955187bb70ae68f831b963dd347e6ab406e404a6fd3e69340e8e723515034519162 days 14 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xd0e70797d431f5f0a78879bcd912ab6a9c17fe5d0.060132810262694362 Ether
0x51efff51faea0de12c00c386fb740ab778c14209706b9366d63a18b105ded3605028401163 days 15 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x83b1e4a0c173974b45845653240f712ec76342c50.040185778904666105 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Similar match)
Note: Displaying similar matching verified source code at contract 0xc908a34165d2720d12ffcfb6b99b47161b1c9946(excluding Constructor Arguments if any)
Contract Name: EthPyramid
Compiler Version: v0.4.20-nightly.2018.1.29+commit.a668b9de
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

/*
          ,/`.
        ,'/ __`.
      ,'_/_  _ _`.
    ,'__/_ ___ _  `.
  ,'_  /___ __ _ __ `.
 '-.._/___...-"-.-..__`.
  B

 EthPyramid. A no-bullshit, transparent, self-sustaining pyramid scheme.
 
 Inspired by https://test.jochen-hoenicke.de/eth/ponzitoken/

 Developers:
	Arc
	Divine
	Norsefire
	ToCsIcK
	
 Front-End:
	Cardioth
	tenmei
	Trendium
	
 Moral Support:
	DeadCow.Rat
	Dots
	FatKreamy
	Kaseylol
	QuantumDeath666
	Quentin
 
 Shit-Tier:
	HentaiChrist
 
*/

contract EthPyramid {

	// scaleFactor is used to convert Ether into tokens and vice-versa: they're of different
	// orders of magnitude, hence the need to bridge between the two.
	uint256 constant scaleFactor = 0x10000000000000000;  // 2^64

	// CRR = 50%
	// CRR is Cash Reserve Ratio (in this case Crypto Reserve Ratio).
	// For more on this: check out https://en.wikipedia.org/wiki/Reserve_requirement
	int constant crr_n = 1; // CRR numerator
	int constant crr_d = 2; // CRR denominator

	// The price coefficient. Chosen such that at 1 token total supply
	// the amount in reserve is 0.5 ether and token price is 1 Ether.
	int constant price_coeff = -0x296ABF784A358468C;

	// Typical values that we have to declare.
	string constant public name = "EthPyramid";
	string constant public symbol = "EPY";
	uint8 constant public decimals = 18;

	// Array between each address and their number of tokens.
	mapping(address => uint256) public tokenBalance;
		
	// Array between each address and how much Ether has been paid out to it.
	// Note that this is scaled by the scaleFactor variable.
	mapping(address => int256) public payouts;

	// Variable tracking how many tokens are in existence overall.
	uint256 public totalSupply;

	// Aggregate sum of all payouts.
	// Note that this is scaled by the scaleFactor variable.
	int256 totalPayouts;

	// Variable tracking how much Ether each token is currently worth.
	// Note that this is scaled by the scaleFactor variable.
	uint256 earningsPerToken;
	
	// Current contract balance in Ether
	uint256 public contractBalance;

	function EthPyramid() public {}

	// The following functions are used by the front-end for display purposes.

	// Returns the number of tokens currently held by _owner.
	function balanceOf(address _owner) public constant returns (uint256 balance) {
		return tokenBalance[_owner];
	}

	// Withdraws all dividends held by the caller sending the transaction, updates
	// the requisite global variables, and transfers Ether back to the caller.
	function withdraw() public {
		// Retrieve the dividends associated with the address the request came from.
		var balance = dividends(msg.sender);
		
		// Update the payouts array, incrementing the request address by `balance`.
		payouts[msg.sender] += (int256) (balance * scaleFactor);
		
		// Increase the total amount that's been paid out to maintain invariance.
		totalPayouts += (int256) (balance * scaleFactor);
		
		// Send the dividends to the address that requested the withdraw.
		contractBalance = sub(contractBalance, balance);
		msg.sender.transfer(balance);
	}

	// Converts the Ether accrued as dividends back into EPY tokens without having to
	// withdraw it first. Saves on gas and potential price spike loss.
	function reinvestDividends() public {
		// Retrieve the dividends associated with the address the request came from.
		var balance = dividends(msg.sender);
		
		// Update the payouts array, incrementing the request address by `balance`.
		// Since this is essentially a shortcut to withdrawing and reinvesting, this step still holds.
		payouts[msg.sender] += (int256) (balance * scaleFactor);
		
		// Increase the total amount that's been paid out to maintain invariance.
		totalPayouts += (int256) (balance * scaleFactor);
		
		// Assign balance to a new variable.
		uint value_ = (uint) (balance);
		
		// If your dividends are worth less than 1 szabo, or more than a million Ether
		// (in which case, why are you even here), abort.
		if (value_ < 0.000001 ether || value_ > 1000000 ether)
			revert();
			
		// msg.sender is the address of the caller.
		var sender = msg.sender;
		
		// A temporary reserve variable used for calculating the reward the holder gets for buying tokens.
		// (Yes, the buyer receives a part of the distribution as well!)
		var res = reserve() - balance;

		// 10% of the total Ether sent is used to pay existing holders.
		var fee = div(value_, 10);
		
		// The amount of Ether used to purchase new tokens for the caller.
		var numEther = value_ - fee;
		
		// The number of tokens which can be purchased for numEther.
		var numTokens = calculateDividendTokens(numEther, balance);
		
		// The buyer fee, scaled by the scaleFactor variable.
		var buyerFee = fee * scaleFactor;
		
		// Check that we have tokens in existence (this should always be true), or
		// else you're gonna have a bad time.
		if (totalSupply > 0) {
			// Compute the bonus co-efficient for all existing holders and the buyer.
			// The buyer receives part of the distribution for each token bought in the
			// same way they would have if they bought each token individually.
			var bonusCoEff =
			    (scaleFactor - (res + numEther) * numTokens * scaleFactor / (totalSupply + numTokens) / numEther)
			    * (uint)(crr_d) / (uint)(crr_d-crr_n);
				
			// The total reward to be distributed amongst the masses is the fee (in Ether)
			// multiplied by the bonus co-efficient.
			var holderReward = fee * bonusCoEff;
			
			buyerFee -= holderReward;

			// Fee is distributed to all existing token holders before the new tokens are purchased.
			// rewardPerShare is the amount gained per token thanks to this buy-in.
			var rewardPerShare = holderReward / totalSupply;
			
			// The Ether value per token is increased proportionally.
			earningsPerToken += rewardPerShare;
		}
		
		// Add the numTokens which were just created to the total supply. We're a crypto central bank!
		totalSupply = add(totalSupply, numTokens);
		
		// Assign the tokens to the balance of the buyer.
		tokenBalance[sender] = add(tokenBalance[sender], numTokens);
		
		// Update the payout array so that the buyer cannot claim dividends on previous purchases.
		// Also include the fee paid for entering the scheme.
		// First we compute how much was just paid out to the buyer...
		var payoutDiff  = (int256) ((earningsPerToken * numTokens) - buyerFee);
		
		// Then we update the payouts array for the buyer with this amount...
		payouts[sender] += payoutDiff;
		
		// And then we finally add it to the variable tracking the total amount spent to maintain invariance.
		totalPayouts    += payoutDiff;
		
	}

	// Sells your tokens for Ether. This Ether is assigned to the callers entry
	// in the tokenBalance array, and therefore is shown as a dividend. A second
	// call to withdraw() must be made to invoke the transfer of Ether back to your address.
	function sellMyTokens() public {
		var balance = balanceOf(msg.sender);
		sell(balance);
	}

	// The slam-the-button escape hatch. Sells the callers tokens for Ether, then immediately
	// invokes the withdraw() function, sending the resulting Ether to the callers address.
    function getMeOutOfHere() public {
		sellMyTokens();
        withdraw();
	}

	// Gatekeeper function to check if the amount of Ether being sent isn't either
	// too small or too large. If it passes, goes direct to buy().
	function fund() payable public {
		// Don't allow for funding if the amount of Ether sent is less than 1 szabo.
		if (msg.value > 0.000001 ether) {
		    contractBalance = add(contractBalance, msg.value);
			buy();
		} else {
			revert();
		}
    }

	// Function that returns the (dynamic) price of buying a finney worth of tokens.
	function buyPrice() public constant returns (uint) {
		return getTokensForEther(1 finney);
	}

	// Function that returns the (dynamic) price of selling a single token.
	function sellPrice() public constant returns (uint) {
        var eth = getEtherForTokens(1 finney);
        var fee = div(eth, 10);
        return eth - fee;
    }

	// Calculate the current dividends associated with the caller address. This is the net result
	// of multiplying the number of tokens held by their current value in Ether and subtracting the
	// Ether that has already been paid out.
	function dividends(address _owner) public constant returns (uint256 amount) {
		return (uint256) ((int256)(earningsPerToken * tokenBalance[_owner]) - payouts[_owner]) / scaleFactor;
	}

	// Version of withdraw that extracts the dividends and sends the Ether to the caller.
	// This is only used in the case when there is no transaction data, and that should be
	// quite rare unless interacting directly with the smart contract.
	function withdrawOld(address to) public {
		// Retrieve the dividends associated with the address the request came from.
		var balance = dividends(msg.sender);
		
		// Update the payouts array, incrementing the request address by `balance`.
		payouts[msg.sender] += (int256) (balance * scaleFactor);
		
		// Increase the total amount that's been paid out to maintain invariance.
		totalPayouts += (int256) (balance * scaleFactor);
		
		// Send the dividends to the address that requested the withdraw.
		contractBalance = sub(contractBalance, balance);
		to.transfer(balance);		
	}

	// Internal balance function, used to calculate the dynamic reserve value.
	function balance() internal constant returns (uint256 amount) {
		// msg.value is the amount of Ether sent by the transaction.
		return contractBalance - msg.value;
	}

	function buy() internal {
		// Any transaction of less than 1 szabo is likely to be worth less than the gas used to send it.
		if (msg.value < 0.000001 ether || msg.value > 1000000 ether)
			revert();
						
		// msg.sender is the address of the caller.
		var sender = msg.sender;
		
		// 10% of the total Ether sent is used to pay existing holders.
		var fee = div(msg.value, 10);
		
		// The amount of Ether used to purchase new tokens for the caller.
		var numEther = msg.value - fee;
		
		// The number of tokens which can be purchased for numEther.
		var numTokens = getTokensForEther(numEther);
		
		// The buyer fee, scaled by the scaleFactor variable.
		var buyerFee = fee * scaleFactor;
		
		// Check that we have tokens in existence (this should always be true), or
		// else you're gonna have a bad time.
		if (totalSupply > 0) {
			// Compute the bonus co-efficient for all existing holders and the buyer.
			// The buyer receives part of the distribution for each token bought in the
			// same way they would have if they bought each token individually.
			var bonusCoEff =
			    (scaleFactor - (reserve() + numEther) * numTokens * scaleFactor / (totalSupply + numTokens) / numEther)
			    * (uint)(crr_d) / (uint)(crr_d-crr_n);
				
			// The total reward to be distributed amongst the masses is the fee (in Ether)
			// multiplied by the bonus co-efficient.
			var holderReward = fee * bonusCoEff;
			
			buyerFee -= holderReward;

			// Fee is distributed to all existing token holders before the new tokens are purchased.
			// rewardPerShare is the amount gained per token thanks to this buy-in.
			var rewardPerShare = holderReward / totalSupply;
			
			// The Ether value per token is increased proportionally.
			earningsPerToken += rewardPerShare;
			
		}

		// Add the numTokens which were just created to the total supply. We're a crypto central bank!
		totalSupply = add(totalSupply, numTokens);

		// Assign the tokens to the balance of the buyer.
		tokenBalance[sender] = add(tokenBalance[sender], numTokens);

		// Update the payout array so that the buyer cannot claim dividends on previous purchases.
		// Also include the fee paid for entering the scheme.
		// First we compute how much was just paid out to the buyer...
		var payoutDiff = (int256) ((earningsPerToken * numTokens) - buyerFee);
		
		// Then we update the payouts array for the buyer with this amount...
		payouts[sender] += payoutDiff;
		
		// And then we finally add it to the variable tracking the total amount spent to maintain invariance.
		totalPayouts    += payoutDiff;
		
	}

	// Sell function that takes tokens and converts them into Ether. Also comes with a 10% fee
	// to discouraging dumping, and means that if someone near the top sells, the fee distributed
	// will be *significant*.
	function sell(uint256 amount) internal {
	    // Calculate the amount of Ether that the holders tokens sell for at the current sell price.
		var numEthersBeforeFee = getEtherForTokens(amount);
		
		// 10% of the resulting Ether is used to pay remaining holders.
        var fee = div(numEthersBeforeFee, 10);
		
		// Net Ether for the seller after the fee has been subtracted.
        var numEthers = numEthersBeforeFee - fee;
		
		// *Remove* the numTokens which were just sold from the total supply. We're /definitely/ a crypto central bank.
		totalSupply = sub(totalSupply, amount);
		
        // Remove the tokens from the balance of the buyer.
		tokenBalance[msg.sender] = sub(tokenBalance[msg.sender], amount);

        // Update the payout array so that the seller cannot claim future dividends unless they buy back in.
		// First we compute how much was just paid out to the seller...
		var payoutDiff = (int256) (earningsPerToken * amount + (numEthers * scaleFactor));
		
        // We reduce the amount paid out to the seller (this effectively resets their payouts value to zero,
		// since they're selling all of their tokens). This makes sure the seller isn't disadvantaged if
		// they decide to buy back in.
		payouts[msg.sender] -= payoutDiff;		
		
		// Decrease the total amount that's been paid out to maintain invariance.
        totalPayouts -= payoutDiff;
		
		// Check that we have tokens in existence (this is a bit of an irrelevant check since we're
		// selling tokens, but it guards against division by zero).
		if (totalSupply > 0) {
			// Scale the Ether taken as the selling fee by the scaleFactor variable.
			var etherFee = fee * scaleFactor;
			
			// Fee is distributed to all remaining token holders.
			// rewardPerShare is the amount gained per token thanks to this sell.
			var rewardPerShare = etherFee / totalSupply;
			
			// The Ether value per token is increased proportionally.
			earningsPerToken = add(earningsPerToken, rewardPerShare);
		}
	}
	
	// Dynamic value of Ether in reserve, according to the CRR requirement.
	function reserve() internal constant returns (uint256 amount) {
		return sub(balance(),
			 ((uint256) ((int256) (earningsPerToken * totalSupply) - totalPayouts) / scaleFactor));
	}

	// Calculates the number of tokens that can be bought for a given amount of Ether, according to the
	// dynamic reserve and totalSupply values (derived from the buy and sell prices).
	function getTokensForEther(uint256 ethervalue) public constant returns (uint256 tokens) {
		return sub(fixedExp(fixedLog(reserve() + ethervalue)*crr_n/crr_d + price_coeff), totalSupply);
	}

	// Semantically similar to getTokensForEther, but subtracts the callers balance from the amount of Ether returned for conversion.
	function calculateDividendTokens(uint256 ethervalue, uint256 subvalue) public constant returns (uint256 tokens) {
		return sub(fixedExp(fixedLog(reserve() - subvalue + ethervalue)*crr_n/crr_d + price_coeff), totalSupply);
	}

	// Converts a number tokens into an Ether value.
	function getEtherForTokens(uint256 tokens) public constant returns (uint256 ethervalue) {
		// How much reserve Ether do we have left in the contract?
		var reserveAmount = reserve();

		// If you're the Highlander (or bagholder), you get The Prize. Everything left in the vault.
		if (tokens == totalSupply)
			return reserveAmount;

		// If there would be excess Ether left after the transaction this is called within, return the Ether
		// corresponding to the equation in Dr Jochen Hoenicke's original Ponzi paper, which can be found
		// at https://test.jochen-hoenicke.de/eth/ponzitoken/ in the third equation, with the CRR numerator 
		// and denominator altered to 1 and 2 respectively.
		return sub(reserveAmount, fixedExp((fixedLog(totalSupply - tokens) - price_coeff) * crr_d/crr_n));
	}

	// You don't care about these, but if you really do they're hex values for 
	// co-efficients used to simulate approximations of the log and exp functions.
	int256  constant one        = 0x10000000000000000;
	uint256 constant sqrt2      = 0x16a09e667f3bcc908;
	uint256 constant sqrtdot5   = 0x0b504f333f9de6484;
	int256  constant ln2        = 0x0b17217f7d1cf79ac;
	int256  constant ln2_64dot5 = 0x2cb53f09f05cc627c8;
	int256  constant c1         = 0x1ffffffffff9dac9b;
	int256  constant c3         = 0x0aaaaaaac16877908;
	int256  constant c5         = 0x0666664e5e9fa0c99;
	int256  constant c7         = 0x049254026a7630acf;
	int256  constant c9         = 0x038bd75ed37753d68;
	int256  constant c11        = 0x03284a0c14610924f;

	// The polynomial R = c1*x + c3*x^3 + ... + c11 * x^11
	// approximates the function log(1+x)-log(1-x)
	// Hence R(s) = log((1+s)/(1-s)) = log(a)
	function fixedLog(uint256 a) internal pure returns (int256 log) {
		int32 scale = 0;
		while (a > sqrt2) {
			a /= 2;
			scale++;
		}
		while (a <= sqrtdot5) {
			a *= 2;
			scale--;
		}
		int256 s = (((int256)(a) - one) * one) / ((int256)(a) + one);
		var z = (s*s) / one;
		return scale * ln2 +
			(s*(c1 + (z*(c3 + (z*(c5 + (z*(c7 + (z*(c9 + (z*c11/one))
				/one))/one))/one))/one))/one);
	}

	int256 constant c2 =  0x02aaaaaaaaa015db0;
	int256 constant c4 = -0x000b60b60808399d1;
	int256 constant c6 =  0x0000455956bccdd06;
	int256 constant c8 = -0x000001b893ad04b3a;
	
	// The polynomial R = 2 + c2*x^2 + c4*x^4 + ...
	// approximates the function x*(exp(x)+1)/(exp(x)-1)
	// Hence exp(x) = (R(x)+x)/(R(x)-x)
	function fixedExp(int256 a) internal pure returns (uint256 exp) {
		int256 scale = (a + (ln2_64dot5)) / ln2 - 64;
		a -= scale*ln2;
		int256 z = (a*a) / one;
		int256 R = ((int256)(2) * one) +
			(z*(c2 + (z*(c4 + (z*(c6 + (z*c8/one))/one))/one))/one);
		exp = (uint256) (((R + a) * one) / (R - a));
		if (scale >= 0)
			exp <<= scale;
		else
			exp >>= -scale;
		return exp;
	}
	
	// The below are safemath implementations of the four arithmetic operators
	// designed to explicitly prevent over- and under-flows of integer values.

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		if (a == 0) {
			return 0;
		}
		uint256 c = a * b;
		assert(c / a == b);
		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		// assert(b > 0); // Solidity automatically throws when dividing by 0
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold
		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		assert(b <= a);
		return a - b;
	}

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

	// This allows you to buy tokens by sending Ether directly to the smart contract
	// without including any transaction data (useful for, say, mobile wallet apps).
	function () payable public {
		// msg.value is the amount of Ether sent by the transaction.
		if (msg.value > 0) {
			fund();
		} else {
			withdrawOld(msg.sender);
		}
	}
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"withdrawOld","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ethervalue","type":"uint256"}],"name":"getTokensForEther","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payouts","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"dividends","outputs":[{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvestDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getMeOutOfHere","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"fund","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"}],"name":"getEtherForTokens","outputs":[{"name":"ethervalue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ethervalue","type":"uint256"},{"name":"subvalue","type":"uint256"}],"name":"calculateDividendTokens","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sellMyTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b610d1a8061001e6000396000f3006060604052600436106101115763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461013257806318160ddd146101bc578063313ce567146101e157806339ffe67c1461020a5780633ccfd60b146102295780634b7503341461023c57806362dbf2611461024f57806365bcfbe71461026557806368306e431461028457806370a08231146102a35780638620410b146102c25780638b7afe2e146102d5578063957b2e56146102e857806395d89b41146102fb578063b1e352421461030e578063b60d428814610321578063b9f308f214610329578063bda5c4501461033f578063e555c1a314610358578063eedc966a1461036b575b60003411156101275761012261038a565b610130565b610130336103ba565b005b341561013d57600080fd5b61014561043d565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610181578082015183820152602001610169565b50505050905090810190601f1680156101ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101c757600080fd5b6101cf610474565b60405190815260200160405180910390f35b34156101ec57600080fd5b6101f461047a565b60405160ff909116815260200160405180910390f35b341561021557600080fd5b610130600160a060020a03600435166103ba565b341561023457600080fd5b61013061047f565b341561024757600080fd5b6101cf610501565b341561025a57600080fd5b6101cf60043561052c565b341561027057600080fd5b6101cf600160a060020a0360043516610574565b341561028f57600080fd5b6101cf600160a060020a0360043516610586565b34156102ae57600080fd5b6101cf600160a060020a03600435166105bb565b34156102cd57600080fd5b6101cf6105d6565b34156102e057600080fd5b6101cf6105ed565b34156102f357600080fd5b6101306105f3565b341561030657600080fd5b610145610790565b341561031957600080fd5b6101306107c7565b61013061038a565b341561033457600080fd5b6101cf6004356107d7565b341561034a57600080fd5b6101cf600435602435610838565b341561036357600080fd5b61013061086a565b341561037657600080fd5b6101cf600160a060020a0360043516610880565b64e8d4a510003411156103b3576103a360055434610892565b6005556103ae6108a1565b6103b8565b600080fd5b565b60006103c533610586565b600160a060020a03331660009081526001602052604090208054604060020a830290810190915560038054909101905560055490915061040590826109f3565b600555600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561043957600080fd5b5050565b60408051908101604052600a81527f457468507972616d696400000000000000000000000000000000000000000000602082015281565b60025481565b601281565b600061048a33610586565b600160a060020a03331660009081526001602052604090208054604060020a83029081019091556003805490910190556005549091506104ca90826109f3565b600555600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156104fe57600080fd5b50565b600080600061051666038d7ea4c680006107d7565b915061052382600a610a05565b90910392915050565b600061056e610566680296abf784a358468b19600260016105558761054f610a1c565b01610a41565b0281151561055f57fe5b0501610b26565b6002546109f3565b92915050565b60016020526000908152604090205481565b600160a060020a03166000908152600160209081526040808320549183905290912054600454604060020a9102919091030490565b600160a060020a031660009081526020819052604090205490565b60006105e866038d7ea4c6800061052c565b905090565b60055481565b60008060008060008060008060008060008061060e33610586565b600160a060020a03331660009081526001602052604090208054604060020a83029081019091556003805490910190559b508b9a5064e8d4a510008b108061065f575069d3c21bcecceda10000008b115b1561066957600080fd5b3399508b610675610a1c565b0398506106838b600a610a05565b9750878b039650610694878d610838565b9550604060020a88029450600060025411156107105760016002036002888860025401604060020a8a8c8f0102028115156106cb57fe5b048115156106d557fe5b04604060020a03028115156106e657fe5b049350838802925082850394506002548381151561070057fe5b6004805492909104918201905591505b61071c60025487610892565b600255600160a060020a038a166000908152602081905260409020546107429087610892565b600160a060020a03909a166000908152602081815260408083209c909c5560045460019091529a902080549a9096029490940398890190945550506003805490960190955550505050505050565b60408051908101604052600381527f4550590000000000000000000000000000000000000000000000000000000000602082015281565b6107cf61086a565b6103b861047f565b6000806107e2610a1c565b90506002548314156107f657809150610832565b61082f8161082a60016002680296abf784a358468b196108198960025403610a41565b030281151561082457fe5b05610b26565b6109f3565b91505b50919050565b6000610863610566680296abf784a358468b1960026001610555888861085c610a1c565b0301610a41565b9392505050565b6000610875336105bb565b90506104fe81610c0a565b60006020819052908152604090205481565b60008282018381101561086357fe5b600080600080600080600080600064e8d4a510003410806108cb575069d3c21bcecceda100000034115b156108d557600080fd5b3398506108e334600a610a05565b975087340396506108f38761052c565b9550604060020a88029450600060025411156109765760016002036002888860025401604060020a8a8c610925610a1c565b01020281151561093157fe5b0481151561093b57fe5b04604060020a030281151561094c57fe5b049350838802925082850394506002548381151561096657fe5b6004805492909104918201905591505b61098260025487610892565b600255600160a060020a0389166000908152602081905260409020546109a89087610892565b600160a060020a039099166000908152602081815260408083209b909b5560045460019091529990208054999096029490940397880190945550506003805490950190945550505050565b6000828211156109ff57fe5b50900390565b6000808284811515610a1357fe5b04949350505050565b60006105e8610a29610ce5565b600354600254600454604060020a92910203046109f3565b60008080805b68016a09e667f3bcc908851115610a6957600285049450600190920191610a47565b5b67b504f333f9de64848511610a8c576002949094029360001990920191610a6a565b604060020a8501604060020a80870302811515610aa557fe5b05915050604060020a818002819005906801ffffffffff9dac9b67666664e5e9fa0c996738bd75ed37753d68673284a0c14610924f85028490050184028390056749254026a7630acf01840283900501830282900567aaaaaaac168779080183028290050183020567b17217f7d1cf79ac8460030b02019350505050919050565b6000808080604067b17217f7d1cf79ac682cb53f09f05cc627c887010503925067b17217f7d1cf79ac830285039450604060020a858602811515610b6657fe5b059150604060020a672aaaaaaaaa015db0660455956bccdd06651b893ad04b3919850283900501840282900566b60b60808399d01901840282900501830205604060020a600202019050848103604060020a86830102811515610bc557fe5b05935060008312610be95782846000821215610bdd57fe5b9060020a029350610c02565b82600003846000821215610bf957fe5b9060020a900493505b505050919050565b600080600080600080610c1c876107d7565b9550610c2986600a610a05565b94508486039350610c3c600254886109f3565b600255600160a060020a033316600090815260208190526040902054610c6290886109f3565b600160a060020a0333166000908152602081815260408083209390935560045460019091529181208054928a02604060020a880201928390039055600380548390039055600254919450901115610cdc57604060020a8502915060025482811515610cc957fe5b049050610cd860045482610892565b6004555b50505050505050565b600554349003905600a165627a7a723058206c7d107dcbe6f00e6ccb3d36b76f1e1c60de2a3c015200fad50d432f2f7f92f30029

   Swarm Source:
bzzr://6c7d107dcbe6f00e6ccb3d36b76f1e1c60de2a3c015200fad50d432f2f7f92f3

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.