Sponsored Link:   SHARPAY.io • Share button with blockchain profit • ICOBench TOP Project • 30% Bonus • Buy Now!
Contract Overview
Balance: 0.365338918943406208 Ether
Ether Value: $219.44 (@ $600.64/ETH)
Transactions: 177 txns
Token Contract: EthPyramid (EPY)
 Latest 25 txns from a total Of 177 transactions
View All

TxHash Age From To Value [TxFee]
0x43e0eab983213a6abf2da67827a5026828f634bf6bf6d0e36698cbf7329176671 hr 49 mins ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.00062627
0xb23b91d888e771e8cf4c9523a9f4bef90d65cc39f840f2711d1380b97f6768fa1 day 9 mins ago0x2503425d6f84c32795384e3ee8186d05fdd13ec4  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.01 Ether0.000624771
0x81ce3fc468fb4d536402e7a07b36628bea16164e516f6d23f060890b4e6b36fa1 day 5 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.04 Ether0.000651783
0x437011bdd34ee99b8b0b22419f0249305da17b608e8b5222c471ef9be72c403d1 day 6 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000563643
0xf5a8912df809d79e2496671eb22f66dd76fe07fa3e723abca09f879877a681671 day 21 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000813215
0xdf7e5a7b96dbf360980ac8904c2ec207e1658fea992f82ab1027e5a1072980951 day 21 hrs ago0x543239e7407bf2755099d8d892260eb1ec288008  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.00075066
0xe2b0bad91ebfed0e67f159f47c19cc2613a58f44e5af0f464171fed905d02f317 days 21 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000597051
0x0de29ec417ea0d9997a4fb76c72342683644267907bc6b0aaf7e48e3f98e195f13 days 9 mins ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000183708
0x1ab93bfcb38c9d1e6aff9c8f26eeeccbf165940016b9a9ab444e3e0906b21a0a13 days 11 hrs ago0x1ed45acba1c716c8fbe88aa35d27842fb612e20a  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000187665
0xbbe466eae74fb5cc8f276ae92fe1df8294748ec49a28c29874dfefde9ee194b113 days 23 hrs ago0x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd42  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000367416
0xd656d9b66e82f91ccc517aea4bac084bfbb65fbc51fa832a040fd3acff1fb9e113 days 23 hrs ago0x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd42  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000343377
0x5639ba64b435b80cd1817f63e60b911a478d16302a9a6fbd03645c02c287004114 days 11 hrs ago0x7ff4b024e9418cffd16497069d81251319350cbb  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.012 Ether0.000222327
0x26680f54e748b1288bcc31a34776f95d81e5b2506f0672f24618eda05f443d1316 days 16 mins ago0x543239e7407bf2755099d8d892260eb1ec288008  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.01 Ether0.000445545
0x3c1e1839f1506437e7bbfaddd864d86da2a5bb780083b0e29aae7c1e95f5b0fa16 days 13 hrs ago0x7ff4b024e9418cffd16497069d81251319350cbb  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000312775
0x7e4d343bbf3c9122b3bcc769bf8ba706d7e5f47c08f72e7e6871dea6339b669f17 days 22 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.004975 Ether0.000177327
0xda02e59280a34e3f9cb9dc916c6061a60260f9aa774867583245d6f7f9c672d718 days 15 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000091854
0x0d663fb4981da409114a3bd6696b3b0228ff0f1a3b032219908885d4d860b07818 days 16 hrs ago0x263b604509d6a825719859ee458b2d91fb7d330d  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.1 Ether0.000267327
0x6a5f56bb247186c7c12d4e731486fb6363692d5fb2a341f9f41588bd99aac23a18 days 20 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000130738
0x1e84483953f535e7be21b70215e892a8ff9c7a8f22685915aab5260de26870f218 days 20 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.01 Ether0.000118218
0x3f275599b37f3179e186383e9b4116fcc87f01a291ca84de1478047e50ef498420 days 11 hrs ago0x1ed45acba1c716c8fbe88aa35d27842fb612e20a  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.01 Ether0.0001871289
0xf0107960aa2f70019d89591b4ef9e4cf3c0af93ccc5a109ad425e6a26b1b44a322 days 19 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000137781
0x368868e8e2aca06d46686227c700c505b103f3f29dc8bd22da411b1d2ed9220423 days 16 hrs ago0xb9cc1875eec851548cb7eca33ecc643fce9d44e3  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.00012511
0xd2bdbc4c30b2aa1d0d9f8f35f767f383a16024e0e07998d1fd46168d01ebcf8926 days 13 hrs ago0x7ff4b024e9418cffd16497069d81251319350cbb  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.0002680129
0x9f5a4cd7e4c354115ffc265411d8df11c3465622f8cc3c36f103b023621afc8b27 days 5 hrs ago0x05cfb777df05b06bb3e479aa8210c8c956c4458c  IN   0xea788fc8313c3c84810489cd7724f3251da624a30.035 Ether0.000267327
0xd80b66b8722b71fcc83ee084e62913541b854511f5319693899a21dc6cb6236e28 days 36 mins ago0x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd42  IN   0xea788fc8313c3c84810489cd7724f3251da624a30 Ether0.000183708
[ 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
0x43e0eab983213a6abf2da67827a5026828f634bf6bf6d0e36698cbf73291766756794461 hr 49 mins ago0xea788fc8313c3c84810489cd7724f3251da624a30x341c48c0e833e179cca6c605b823e9a4911a3d000.026339757302697692 Ether
0x437011bdd34ee99b8b0b22419f0249305da17b608e8b5222c471ef9be72c403d56726801 day 6 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.345275946681028633 Ether
0xf5a8912df809d79e2496671eb22f66dd76fe07fa3e723abca09f879877a6816756691431 day 21 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x3d2084d65cd56583aaf306e38db432a399b34b630.047205140105979673 Ether
0xdf7e5a7b96dbf360980ac8904c2ec207e1658fea992f82ab1027e5a10729809556691071 day 21 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x543239e7407bf2755099d8d892260eb1ec2880080.006540757770998233 Ether
0xe2b0bad91ebfed0e67f159f47c19cc2613a58f44e5af0f464171fed905d02f3156354387 days 21 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.016089420202850463 Ether
0x0de29ec417ea0d9997a4fb76c72342683644267907bc6b0aaf7e48e3f98e195f560634113 days 9 mins ago0xea788fc8313c3c84810489cd7724f3251da624a30xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.017522871457565047 Ether
0x1ab93bfcb38c9d1e6aff9c8f26eeeccbf165940016b9a9ab444e3e0906b21a0a560374313 days 11 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x1ed45acba1c716c8fbe88aa35d27842fb612e20a0.007007565593820042 Ether
0xbbe466eae74fb5cc8f276ae92fe1df8294748ec49a28c29874dfefde9ee194b1560078013 days 23 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd420.383514359685234561 Ether
0x3c1e1839f1506437e7bbfaddd864d86da2a5bb780083b0e29aae7c1e95f5b0fa558606516 days 13 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x7ff4b024e9418cffd16497069d81251319350cbb0.006486621253664951 Ether
0xda02e59280a34e3f9cb9dc916c6061a60260f9aa774867583245d6f7f9c672d7557388718 days 15 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.009547749739470126 Ether
0xf0107960aa2f70019d89591b4ef9e4cf3c0af93ccc5a109ad425e6a26b1b44a3554998122 days 19 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x341c48c0e833e179cca6c605b823e9a4911a3d000.009245005452490228 Ether
0x368868e8e2aca06d46686227c700c505b103f3f29dc8bd22da411b1d2ed92204554515923 days 16 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xb9cc1875eec851548cb7eca33ecc643fce9d44e30.035656090683975201 Ether
0xd80b66b8722b71fcc83ee084e62913541b854511f5319693899a21dc6cb6236e552032828 days 36 mins ago0xea788fc8313c3c84810489cd7724f3251da624a30x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd420.003894180545889262 Ether
0x0e14117fa9d1476e1439f5603d081a60664c7cc93ebfcb71b33a91f5b0961b12550273731 days 1 hr ago0xea788fc8313c3c84810489cd7724f3251da624a30xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.009055070080868911 Ether
0x82f5089779545e20bc54e4ea0372db59bdeda262f5576341c15c22c9cc46fe2a550027331 days 11 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xb9cc1875eec851548cb7eca33ecc643fce9d44e30.002008325825279126 Ether
0xc1591d5e9a17128048b3f7ca8e25adcb8ef6679b1ffb2861d3002c128c01d084549750431 days 23 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd420.012904584680469708 Ether
0xed8950c1ca5cfd75e055bb0030136ef7a476da6d230907fa7422e8a34b8edc54549642432 days 3 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.142167179893592095 Ether
0xf494d0e01d25290ab0a46c5a09b51de39ad33ed335531c0f2cb613cebe3c303f548910333 days 10 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x415e94a5246ac4d3f16a833f51ff9066f215a4210.001017287171523418 Ether
0x9f9b1159bed921c96170d5c025c1e1e943a0d63b0e08bda316c28d5baefebd79548888933 days 11 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.009687521102843969 Ether
0x2d58245318011bcb01c2c0e54fa9110f95f53df084b31ec00c338dcac8748a46548881433 days 11 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.006378819063582094 Ether
0x13d2b223c59e738c273ac5d244c650646de3f472637c3555155abad305e18cb5548858233 days 12 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.011112839713562411 Ether
0x1dd979136b94d16dac0907077608de65bc6623226e0e9b162d9691f2113eab21548848133 days 12 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30x823da78946bbc9b249d11e0d4ade10adf1ec928b0.081256360265412167 Ether
0x86c85d11c89489033ae95ca5d0214162c0e569aa137392d534a6d3f03cb2ed73548259034 days 12 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.015264218092945305 Ether
0x23bfd6f33313c0fbcfcb5d4aff079aebf093081692a0af6b1336df91e0c8a355548161634 days 16 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xd5bb3208cc4c338854b31eb8a4d7da14a46177420.358853098531748782 Ether
0xe57ddd567f6f369a13bac3a2e979d4faf0f515f1462edd3dd29fbf92eb0b574a548071234 days 20 hrs ago0xea788fc8313c3c84810489cd7724f3251da624a30xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.007195382828886417 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.