Sponsored Link:   Revain - How to find moon tokens to invest? See what crypto experts are saying. Read reviews!
Contract Overview
Balance: 6.329968822961662269 Ether
Ether Value: $3,638.97 (@ $574.88/ETH)
Transactions: 887 txns
Token Contract: EthPyramid (EPY)
 Latest 25 txns from a total Of 887 transactions
View All

TxHash Age From To Value [TxFee]
0x16060ec6beadb640ee09e64262b7b68f8fda1a2034f08f163bc4f909944782279 hrs 21 mins ago0x01dfa0f011a8240af525723e984a385e538095e7  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000106162
0x2af518760d635b0174dcec6336509e8f20e5824a3d4c0653dea3d6f05e169d7115 hrs 32 mins ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000312415
0x7f99d8a55b194b7bd1cb3730476e012646bef656829828b28c8925547ffb2be623 hrs 21 mins ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.00062483
0x555f66de491b6dab898c4883aa1d94deec03ff05e3cb320b53e30dc6c21d97d92 days 2 hrs ago0xc951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.0003465371
0xa574fd21f60153b2ce947ff18e22694c69736215abffbe3dc04a43772ba82e912 days 12 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000321489
0x0c12a5bb0d865c784f12b4abc3840b8cf60c1d382bc507c091a70b96edb94da32 days 13 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000499864
0x3e56730f74d120a03ea923b10c32f5978e1c7b85762a96d9bc6865cd915eb0bc2 days 19 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000749796
0xef54b994c743f197e3310024787b7184095f90e0b87991e44f1a51b18d88218c2 days 19 hrs ago0x543239e7407bf2755099d8d892260eb1ec288008  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000812279
0x7aa187951888be0b0759fb1ae3198a398fcfb7bdf3d79d434ff2a85941c832da2 days 19 hrs ago0x8586107f0338099ec5fb86b680929965e92368a9  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000687313
0x2ef4f2387a00b1f7f6b20f2b6ff71d9fd1bb15c7831d09c4f6c8bbaaf4ef1f6e2 days 19 hrs ago0x868234b7ce5793279c7b5258410acd894c95f41f  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000687313
0xbcff6e3b20431e6c967b410d410388e6ad4b0430b339b1597da5d584553735b65 days 8 hrs ago0xb9cc1875eec851548cb7eca33ecc643fce9d44e3  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.00031928813
0xbc3393ed68057187936a1cdc3e0690fa62ac36a754163e6e1dd656f1a7648f1a5 days 12 hrs ago0x1f6fa14d9707bc52196a95ae82a80487fa099821  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000312415
0x7c37e7137bcfb6ec10fd4f83244071486aec7092e0680f5314d71b18750557fd7 days 13 hrs ago0xdfea4be32b1f777d82a6389a0d4f399569c46202  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000413343
0xb8e97f83dfcd3166d5b11312be5b86656126322ef2ed64abcd3224e8348644ce7 days 22 hrs ago0x54f987c0a786031357427211046d9e7ef61f3891  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000619864
0xee4f9b7c1c27a9330ea5e70575a6d8baaa20e256d26c7d5c39961388c167cf5f7 days 22 hrs ago0x54f987c0a786031357427211046d9e7ef61f3891  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.0003465371
0xa08556e7972e008ea2c6274ea436d5e823c609402f7848b5e70dbc75454bb27e9 days 17 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.00045927
0x181e2f5b317410ce96a8493f698b9695183e37233f4479c4db57a3b26b49b7e212 days 5 hrs ago0xb0567ce23179fe16506f16b1d0cab57873091589  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000318486
0x3363903985c573ab692a0b882d35645f82be3edf467020dfc86a440e18cf8cf413 days 19 hrs ago0x5f9c9d793a4ad46eced959c0e47b706a33d06f8b  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.0003811463
0x1e81b60736bde532f77057fea36342e148ffbf78f5f229f7231288bea2d212ea13 days 22 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000183708
0xf12b3c3460d0c929cb3c7eb285fa75f5b6f64c0c621ce9bf22a1fafe0bbdaf5814 days 8 hrs ago0x9a0cf297c8143d8e08296f5257ba81081b1a2e5b  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000187449
0xd639807c1ce3432695f0d4582e52ac81335bb58145aa4e1d9dc578a70c56318514 days 9 hrs ago0x1ed45acba1c716c8fbe88aa35d27842fb612e20a  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000187449
0x11d28cfdc3a0d23988d8a9ce8acb40563a62ac052306cebcbfcca8208a84a65e14 days 10 hrs ago0x05384a688f405db8b5b687fd3abf1ed62dba0327  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.00013045
0xc52e44b14f8aa25f356c5e361d43be97ccd9643b86ee3c992c4f11a169cadeec14 days 21 hrs ago0x28eb0ce7f78dfae3f98a1d6b59872b78f642966f  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.0004811191
0xd08f3a12681be60b70c2009935a0add9c41a7f794af6dd5e152974ce6102bf2b15 days 5 hrs ago0x12b2398405f49dec00d7ceef9c0925e6fc96c51f  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0.05 Ether0.0004715145
0x6643c085d2b130a934fc86ae6867c6390aa5588d3decba64574303adc2b7ba9e15 days 6 hrs ago0xda7a5831092bbb0757cbfb3de67ecf00d4435e73  IN   0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0 Ether0.000249932
[ 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
0x2af518760d635b0174dcec6336509e8f20e5824a3d4c0653dea3d6f05e169d71568142415 hrs 32 mins ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.192475997139927574 Ether
0x7f99d8a55b194b7bd1cb3730476e012646bef656829828b28c8925547ffb2be6567953223 hrs 21 mins ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x341c48c0e833e179cca6c605b823e9a4911a3d000.183727204918143858 Ether
0xa574fd21f60153b2ce947ff18e22694c69736215abffbe3dc04a43772ba82e9156708182 days 12 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.049146294873378929 Ether
0x0c12a5bb0d865c784f12b4abc3840b8cf60c1d382bc507c091a70b96edb94da356705282 days 13 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.217908499554327547 Ether
0x3e56730f74d120a03ea923b10c32f5978e1c7b85762a96d9bc6865cd915eb0bc56691232 days 19 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x3d2084d65cd56583aaf306e38db432a399b34b630.986863840636842397 Ether
0xef54b994c743f197e3310024787b7184095f90e0b87991e44f1a51b18d88218c56691052 days 19 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x543239e7407bf2755099d8d892260eb1ec2880080.305748668355402441 Ether
0x7aa187951888be0b0759fb1ae3198a398fcfb7bdf3d79d434ff2a85941c832da56690872 days 19 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x8586107f0338099ec5fb86b680929965e92368a90.378214310643001202 Ether
0x2ef4f2387a00b1f7f6b20f2b6ff71d9fd1bb15c7831d09c4f6c8bbaaf4ef1f6e56690352 days 19 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x868234b7ce5793279c7b5258410acd894c95f41f0.30307037295094505 Ether
0xbcff6e3b20431e6c967b410d410388e6ad4b0430b339b1597da5d584553735b656549395 days 8 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xb9cc1875eec851548cb7eca33ecc643fce9d44e30.128653105445339991 Ether
0xbc3393ed68057187936a1cdc3e0690fa62ac36a754163e6e1dd656f1a7648f1a56540505 days 12 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x1f6fa14d9707bc52196a95ae82a80487fa0998210.007482484921148383 Ether
0x7c37e7137bcfb6ec10fd4f83244071486aec7092e0680f5314d71b18750557fd56423217 days 13 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xdfea4be32b1f777d82a6389a0d4f399569c462020.003062051026250954 Ether
0xb8e97f83dfcd3166d5b11312be5b86656126322ef2ed64abcd3224e8348644ce56403517 days 22 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x54f987c0a786031357427211046d9e7ef61f38910.060339594533866662 Ether
0xa08556e7972e008ea2c6274ea436d5e823c609402f7848b5e70dbc75454bb27e56300959 days 17 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.009854673327440207 Ether
0x3363903985c573ab692a0b882d35645f82be3edf467020dfc86a440e18cf8cf4560685613 days 19 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x5f9c9d793a4ad46eced959c0e47b706a33d06f8b0.048483623243581686 Ether
0x1e81b60736bde532f77057fea36342e148ffbf78f5f229f7231288bea2d212ea560633813 days 22 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.018920002508749158 Ether
0xf12b3c3460d0c929cb3c7eb285fa75f5b6f64c0c621ce9bf22a1fafe0bbdaf58560384314 days 8 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x9a0cf297c8143d8e08296f5257ba81081b1a2e5b0.094684905915166266 Ether
0xd639807c1ce3432695f0d4582e52ac81335bb58145aa4e1d9dc578a70c563185560374614 days 9 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x1ed45acba1c716c8fbe88aa35d27842fb612e20a0.027843841593666995 Ether
0xc52e44b14f8aa25f356c5e361d43be97ccd9643b86ee3c992c4f11a169cadeec560078714 days 21 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x28eb0ce7f78dfae3f98a1d6b59872b78f642966f0.940654110189768669 Ether
0x6643c085d2b130a934fc86ae6867c6390aa5588d3decba64574303adc2b7ba9e559848915 days 6 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xda7a5831092bbb0757cbfb3de67ecf00d4435e730.013602585879825566 Ether
0x2ce216329dccb14eb5f9b849ffe13c3f25860f562c97ba5df1abcddf1e7f82e2558499017 days 15 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x77dc6c6e24b7c358e37d4209de1a0d42cbeb4dbf0.017835851366841721 Ether
0xef7fdf9c24614d17fff84f9290a7f97097fc68b3c0a2c6c7ab1951f1d078e928558008818 days 12 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.005666356290627333 Ether
0xf26c19a66e232850457a6e98620af6c6ea7302caf3d6c335150ce157b6774b1b557749818 days 22 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x9a0cf297c8143d8e08296f5257ba81081b1a2e5b0.004648518917390998 Ether
0x27fe1a2662d74b1181a2879e3b5036f864c52ad9db2fa14e3a18c8b38acfdd33557698419 days 1 hr ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0xd95c9809b6e7f404488d52c8d82e6d095b37a1900.004091045308387237 Ether
0x618077895a5a23033cf378985bb29bc4ad8743760548781bf3c8b469af1984d8557362819 days 14 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x265084d861015b516c92fe96d08fb3c3d794e75f0.03875823083904376 Ether
0x6c2aa8bc37b986346afc0487eee711371636de09ff2cbc2ea7721753a6e32ada557284619 days 18 hrs ago0xc6b5756b2ac3c4c3176ca4b768ae2689ff8b9cee0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.005124716635347785 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.