Sponsored Link:   Alt.Estate - ERC20 for Real Estate. Live Prototype in Japan, USA, EU.Buy ALT tokens. Endorsed by partners of PWC, Knight Frank.
Contract Overview
Balance: 0.949621396102793097 Ether
Ether Value: $569.42 (@ $599.63/ETH)
Transactions: 113 txns
Token Contract: EthPyramid (EPY)
 Latest 25 txns from a total Of 113 transactions
View All

TxHash Age From To Value [TxFee]
0x36acd1c1fbe9998c94dacff4aafdb7eaa1218e25fc8b6f95a9a3e8d5eeea632e1 hr 33 mins ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.00062555
0x37ca92aaaa22d361f0be4cc9420f3332b29280c6974c7d3d46edbf06a541e7ee17 days 21 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.0063 Ether0.000236724
0x0eb0a3028854f65d49ebab20988499349a5b35f6a017fe1013b1d3f368eb362122 days 18 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000137781
0x2889cc733e4902b71dbe40c065fbf3a57c909034fda8d86deaefa8c514389df832 days 2 hrs ago0xab8c5c034f1cd123c62413a88ef3ada2d90f68c5  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.00012511
0x4b4df2c5915db528cd3f610d0659254e5a32046b84006c4e2c0e1d2178dbe68a32 days 15 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000062555
0xd03624760c3e42b0aced74113ea1cdd1fb7f49474bb659c5efe75a6b6cd4727138 days 2 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000045927
0xc32e3327873a4693279d3bef94e794b2c8a68296c7f1270116128a2d4faf407e38 days 2 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000637836
0xc0d97e565694c237472f07722fbe2a930b705c771f0bc9659f178cae1a58639e38 days 2 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000637836
0x73210b9c4eb1fd8de87c44f56980285fd99a8dc2c029c979882787825cf66e5d38 days 2 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000038153
0x19a4254d741c4fedf15bb3a5450b1c95bef4a080e0b34a6412addeecd9b7169f39 days 13 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.006004 Ether0.000059181
0xc979c46ccb5808d6eaa7cdf75adaa90d76cf2af21ddefcaad6b5c39e8330b69139 days 22 hrs ago0xbe23a099ee09f34e75095c7b1ff62b678a313a5a  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.005983 Ether0.0001872801
0x14467e0674ee1e7512c64602cd45f55fd0b0207c6613621ba7971a0d2e468a1140 days 7 hrs ago0x1bff0f6a253ea6a5e18a0d4f25bfe32fe92f9b5d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.005961 Ether0.000089181
0x5b5125d21ad3850fb7beb70851b203c783c71eb9fbec6daa3c0d5e69f07f040a47 days 5 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000065441
0xbd9547a45e5bbee2e14a9cb3c6ede3b2f4472df9de9aeb7883eac6d381a8393147 days 17 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000045927
0x09945cb424c54706521dd94639982d166146b147547191e9711ccf569748620948 days 21 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.0000523528
0x89005c3da2f1b01bb2179db2913b1f72dcd6c4f5ed63cc376d9ee273dc9b859149 days 1 hr ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.5 Ether0.000089181
0x85581df3bd2596409b1f7bb823f1329d4e267394ef8b9058d4cf1d0dc1b3abc450 days 20 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.0037 Ether0.0000267759
0xb620e282cd5c03cc1ceeb9c0cfb1a7d2975fff72d9d7ea66730e343f482222b152 days 9 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.01 Ether0.0000816783
0x83e34078422038214d958730ead319f14d4f6dd9f70df0fd2fb5a1e824d663b155 days 31 mins ago0x3e5386fc13c123da53523f6b11417e83433c4fca  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000125254
0xd159c74e3aa4f5ff5dec5ef191907fecc8b550e9af622bd92e1d7b858c3d089b56 days 15 hrs ago0x9afda2dd29775559f42833302feb357b0cf33f97  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000125254
0x66dd57030cf6c78760775e764a54c23447ca30221591805c81eb5af57bfda4b267 days 16 hrs ago0x9afda2dd29775559f42833302feb357b0cf33f97  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.02 Ether0.000089253
0x74cbf09cff9a87b11ff133ee76c396e5dcce100c018a39ad040d2ec90ef331b372 days 10 hrs ago0xf2898375a42deda8a52147ae7bbf58d6c84c3b76  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000062627
0xfe47bd3f1c0a1839cc02a4f6b751a5581c623e6d3df1cc7a9f5b21012961190683 days 17 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000062627
0x347a2348d150dadf59a1190be5510caa455dec7478acd6abbdaf0a3679afa6b688 days 19 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0 Ether0.000091854
0xdb375155c2dbcdb3b1ce7ddbf34f925ad427aee81a5f82b1e949f37d783da56493 days 19 hrs ago0x894bcd33b13c2c521913b634d92efa01d7b32970  IN   0x3854962ad8861f44fc617171ddb91eb5c3f1782a0.015 Ether0.000178506
[ 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
0x36acd1c1fbe9998c94dacff4aafdb7eaa1218e25fc8b6f95a9a3e8d5eeea632e56795041 hr 33 mins ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x341c48c0e833e179cca6c605b823e9a4911a3d000.034894353845781655 Ether
0x0eb0a3028854f65d49ebab20988499349a5b35f6a017fe1013b1d3f368eb3621555038222 days 18 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x341c48c0e833e179cca6c605b823e9a4911a3d000.00380332921615407 Ether
0x2889cc733e4902b71dbe40c065fbf3a57c909034fda8d86deaefa8c514389df8549673032 days 2 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.027050449953222267 Ether
0x4b4df2c5915db528cd3f610d0659254e5a32046b84006c4e2c0e1d2178dbe68a549354032 days 15 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.072516617465819813 Ether
0xd03624760c3e42b0aced74113ea1cdd1fb7f49474bb659c5efe75a6b6cd47271546191838 days 2 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xbe23a099ee09f34e75095c7b1ff62b678a313a5a0.0097137265413919 Ether
0xbd9547a45e5bbee2e14a9cb3c6ede3b2f4472df9de9aeb7883eac6d381a83931540485847 days 17 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x415e94a5246ac4d3f16a833f51ff9066f215a4210.000327370789874031 Ether
0x83e34078422038214d958730ead319f14d4f6dd9f70df0fd2fb5a1e824d663b1536070355 days 31 mins ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x3e5386fc13c123da53523f6b11417e83433c4fca0.002154294516182259 Ether
0xd159c74e3aa4f5ff5dec5ef191907fecc8b550e9af622bd92e1d7b858c3d089b535098456 days 15 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x9afda2dd29775559f42833302feb357b0cf33f970.016231446940578701 Ether
0x74cbf09cff9a87b11ff133ee76c396e5dcce100c018a39ad040d2ec90ef331b3525703272 days 10 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xf2898375a42deda8a52147ae7bbf58d6c84c3b760.002995856232832636 Ether
0xfe47bd3f1c0a1839cc02a4f6b751a5581c623e6d3df1cc7a9f5b210129611906519040583 days 17 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.007554552280443105 Ether
0x347a2348d150dadf59a1190be5510caa455dec7478acd6abbdaf0a3679afa6b6516048988 days 19 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.000407321110953174 Ether
0xa1b15f748c04dda2426847f493dec8609c94251678b285590e3c3b0800d6c6e65077112102 days 22 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x522273122b20212fe255875a4737b6f50cc720060.046534558540538741 Ether
0x297ad2cbfcf3e8d0c427ac4d6b006a0377b8d82674f0bdb96575ed4080f336355074331103 days 9 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x097254e687e480b914ef83fa9d5089ed83fa33190.012101952548306201 Ether
0x01fd4231772684a2fbe15b39eadd9987940515dcaa5ae22b008db25f37e8d45b5072124103 days 18 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x415e94a5246ac4d3f16a833f51ff9066f215a4210.000241194860534278 Ether
0x6754d74f613b1affeaf54b1bcaf01e316f7fbf0ae546232bbcd272bd6691be3e5068626104 days 8 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x5e79ec5eb679cea45be3392381f4637fe1eb6e620.000807152568013314 Ether
0x1a90c8cb55c1799137925ec6e00dbde37847b7f3ef6b9f68d5deeb81689a2a125062619105 days 8 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x522273122b20212fe255875a4737b6f50cc720060.010911733481298711 Ether
0x2ff2ce077af0c058358de92a39c6244a2e37624030ec8657da80f8f834be1f7b5060439105 days 17 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x32f695533cf79987c48316496c66ec3150619ba60.003256659338505259 Ether
0xf79efd9a6d6390e8536ece2fadb3c4ce878c43b5a787988af27a7c2b35b623985036599109 days 17 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x7b2116380f3bf546d4df4c0d775eae5f83e6ab330.033112945476635497 Ether
0x8e94e23955187bb70ae68f831b963dd347e6ab406e404a6fd3e69340e8e723515034519110 days 2 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xd0e70797d431f5f0a78879bcd912ab6a9c17fe5d0.060132810262694362 Ether
0x51efff51faea0de12c00c386fb740ab778c14209706b9366d63a18b105ded3605028401111 days 2 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x83b1e4a0c173974b45845653240f712ec76342c50.040185778904666105 Ether
0xd3be99588d81c789014a906a2ffa26a3657695220bfd65a2cc1607239e0930e15027829111 days 4 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x7ffd78ee006a397873a57556835511b67075ca4f0.224835341103388926 Ether
0x3d210159eea55728201731e6df18d322319dc6ec646850ec63818e4362ba1e9d5027266111 days 6 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x7ffd78ee006a397873a57556835511b67075ca4f0.024531005906958438 Ether
0x4e33f241d6bbcb89065d7cbf3f00c1cd7c8121b9802c9ddf84e539733e0e7e905025275111 days 15 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xfc5480d57c7dbff406bc8ad7044bdae7a8fedecb0.008004699595617766 Ether
0xb5155ef12316faf8fae7b95cb08688cec0c1c6b974cb65640bd5d10d2e0380745024949111 days 16 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0xc23c7c00ecdb453a105d9a69978669d90bd3cc0d0.963676881462094329 Ether
0xd7c0e4b476dd8f08ddcf3601b7efbf56d99bb0e63d6d134ad627b7ea095871205024685111 days 17 hrs ago0x3854962ad8861f44fc617171ddb91eb5c3f1782a0x7ffd78ee006a397873a57556835511b67075ca4f0.007144853771155409 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.