Sponsored Link:   Revain - How to find moon tokens to invest? See what crypto experts are saying. Read reviews!
Contract Overview
Balance: 3.939989056860581583 Ether
Ether Value: $2,265.18 (@ $574.92/ETH)
Transactions: 883 txns
Token Contract: EthPyramid (EPY)
 Latest 25 txns from a total Of 883 transactions (+1 PendingTxn)
View All

TxHash Age From To Value [TxFee]
0xba821ff56a4526344faeceeeb36ee0fdcd1d79de12c93d0f1b1f356bc99cc0cc(pending)0xb27a8bed005f23c9714a5c95abcd0c59b9dc32da  IN  0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether(pending)
0x17b8ddeab4edd575aa4ebbf584424f03f814b7b2a57a09abc99e5eeaa7693a647 hrs 39 mins ago0x1db4408590fcda32928030e5ef2e8f2b04388b44  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.0001010394
0xd2925318c997093026b14d1a146d9acf70a1a65e40e46594591a41d3bd76c07715 hrs 31 mins ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000312415
0x07d112f7ec969ff7d8e0f015b505cc01ae5606630fed0b1a94e5870d675b3a0123 hrs 24 mins ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.00062483
0x5d078023878b5d0935b6de8c272e3089131f009ad18436772dc3074118fe681e2 days 5 hrs ago0x5490c3445bb92545a841009d0f4a64cb99cb6400  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000437381
0x0d0b669e76572dac81bc299bd78e6ffc97615153e1ed8f6111ceb4a9c96eeb542 days 12 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000321489
0xf5ad70f260b7e6626e9173c3de5ea54c86f8d33f2b2694d687a8af0921d14bbd2 days 13 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000499864
0x887407ec5890f3baecabebf8ecc1389c3893803c9356e483a4e1ccca278b4d3e2 days 17 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.00045927
0x52ba57d0276ef2de8dcc84c7944c6dc21044e612df248bb5c7423aee954478962 days 19 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000749796
0xa7a617d3ea10094e5a1c3df89c68e55f18b438a4629b78d610a9c2abfea778072 days 19 hrs ago0x543239e7407bf2755099d8d892260eb1ec288008  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000749796
0x06c83904118827428b6bfdd1ff8c6f5f0e469c4066987046952f0c7465b2e0ff2 days 19 hrs ago0x8586107f0338099ec5fb86b680929965e92368a9  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000686521
0xb2135dd1ec4d60e0b4ab1e362437f5c1ee5d339c518d7b7e040ec5bd4bb30af82 days 19 hrs ago0x868234b7ce5793279c7b5258410acd894c95f41f  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000686521
0xaa94ea72786f1ac3fba011bd8cc70257e971f81f22e3b4b0148749ae08f41f512 days 20 hrs ago0x248849d202b46f7ac94d2483be62d6f4e8f7da6f  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.00065906016
0x0f7f0d71a2f8857fdd6d64f4c9a8ab75b7fb4845e521037a5bd71846e73953d42 days 23 hrs ago0x123085670e817602041e58febb243abe01a9a825  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000686521
0x09d8847ad128c7476a4b1df70beb489a29aee782e248dd8d3e52b660786268283 days 7 hrs ago0x1db4408590fcda32928030e5ef2e8f2b04388b44  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.00045927
0x6d035c3131fcd334a805d670015b19a9e6b972e249f45dd78729e4d37c5803835 days 5 hrs ago0x739521d1a43d4a7e1c6b8a3d5c39906455ed3a45  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460.001 Ether0.000800037
0xd811c543de4cea2983f7fc59ba18c03d7c929975a8a1a733579addfec18d7e0d5 days 8 hrs ago0xb9cc1875eec851548cb7eca33ecc643fce9d44e3  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000380769511
0xe82d09ac768326912e51196751cb75799eb27e12a92d6d7a086af1dfa50e2e208 days 18 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000597051
0x884e1ae66a5d049405e73ba354bed589d237b8c5c82d8c9653d85e1331969c7312 days 15 hrs ago0x4679d1a53a06d5853d8043855705be6e5df2717c  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000436877
0x7c3e52b8882ee534ad248e28a5ac02a4686cc1d999ae11fae9b015b0daa2489413 days 19 hrs ago0x632324a5b5b1879360d5aa994fa27ea2bc161743  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000312055
0x9deeff78b7aaa98ce7731f2cd6bc584e72a5fd80a37ddfc42bee746ead6b3c8013 days 22 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000156908
0xf9c494a495ad4ca5793a0f619f1a21cc79ac8a0831e0c1f0bc280fc00aef122f13 days 22 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000183708
0x5e3d5658918f374f47a31596bb06e9ed8e6d834df2cbcfd1b67dedfab7485a5c14 days 8 hrs ago0x9a0cf297c8143d8e08296f5257ba81081b1a2e5b  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000187233
0xa39f4a6cd6359aa8546769cc1221d241011a422ba039829e8d46d72831d01d4414 days 9 hrs ago0x1ed45acba1c716c8fbe88aa35d27842fb612e20a  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000187233
0x573e4b456de8d1094c325692e357543d4c4969bba68b04a16c9712ae2428cb8114 days 10 hrs ago0x05384a688f405db8b5b687fd3abf1ed62dba0327  IN   0xf39729a98d936199c8260af86018ebf21ed8f8460 Ether0.000130306
[ 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
0x17b8ddeab4edd575aa4ebbf584424f03f814b7b2a57a09abc99e5eeaa7693a6456832677 hrs 39 mins ago0xf39729a98d936199c8260af86018ebf21ed8f8460x1db4408590fcda32928030e5ef2e8f2b04388b440.019583915588975114 Ether
0xd2925318c997093026b14d1a146d9acf70a1a65e40e46594591a41d3bd76c077568142815 hrs 31 mins ago0xf39729a98d936199c8260af86018ebf21ed8f8460x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.414056571615701938 Ether
0x07d112f7ec969ff7d8e0f015b505cc01ae5606630fed0b1a94e5870d675b3a01567952423 hrs 24 mins ago0xf39729a98d936199c8260af86018ebf21ed8f8460x341c48c0e833e179cca6c605b823e9a4911a3d000.061894089741197316 Ether
0x5d078023878b5d0935b6de8c272e3089131f009ad18436772dc3074118fe681e56724332 days 5 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x5490c3445bb92545a841009d0f4a64cb99cb64000.311273505829431885 Ether
0x0d0b669e76572dac81bc299bd78e6ffc97615153e1ed8f6111ceb4a9c96eeb5456708062 days 12 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.062206735926039075 Ether
0xf5ad70f260b7e6626e9173c3de5ea54c86f8d33f2b2694d687a8af0921d14bbd56705532 days 13 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.491797756749748175 Ether
0x887407ec5890f3baecabebf8ecc1389c3893803c9356e483a4e1ccca278b4d3e56695572 days 17 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.023953558069278578 Ether
0x52ba57d0276ef2de8dcc84c7944c6dc21044e612df248bb5c7423aee9544789656691212 days 19 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x3d2084d65cd56583aaf306e38db432a399b34b631.902465948476159801 Ether
0xa7a617d3ea10094e5a1c3df89c68e55f18b438a4629b78d610a9c2abfea7780756691042 days 19 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x543239e7407bf2755099d8d892260eb1ec2880080.400766949660673156 Ether
0x06c83904118827428b6bfdd1ff8c6f5f0e469c4066987046952f0c7465b2e0ff56690862 days 19 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x8586107f0338099ec5fb86b680929965e92368a90.09979148417125349 Ether
0xb2135dd1ec4d60e0b4ab1e362437f5c1ee5d339c518d7b7e040ec5bd4bb30af856690352 days 19 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x868234b7ce5793279c7b5258410acd894c95f41f0.451069290278511463 Ether
0xaa94ea72786f1ac3fba011bd8cc70257e971f81f22e3b4b0148749ae08f41f5156690012 days 20 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x248849d202b46f7ac94d2483be62d6f4e8f7da6f0.461472670974552158 Ether
0x0f7f0d71a2f8857fdd6d64f4c9a8ab75b7fb4845e521037a5bd71846e73953d456681972 days 23 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x123085670e817602041e58febb243abe01a9a8250.194926304176625349 Ether
0x09d8847ad128c7476a4b1df70beb489a29aee782e248dd8d3e52b6607862682856664153 days 7 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x1db4408590fcda32928030e5ef2e8f2b04388b440.009973934381478569 Ether
0xd811c543de4cea2983f7fc59ba18c03d7c929975a8a1a733579addfec18d7e0d56549245 days 8 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460xb9cc1875eec851548cb7eca33ecc643fce9d44e30.265889432397185606 Ether
0xe82d09ac768326912e51196751cb75799eb27e12a92d6d7a086af1dfa50e2e2056354478 days 18 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.008873370029615968 Ether
0x884e1ae66a5d049405e73ba354bed589d237b8c5c82d8c9653d85e1331969c73561360612 days 15 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x4679d1a53a06d5853d8043855705be6e5df2717c0.002328144147561159 Ether
0x7c3e52b8882ee534ad248e28a5ac02a4686cc1d999ae11fae9b015b0daa24894560702913 days 19 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x632324a5b5b1879360d5aa994fa27ea2bc1617430.087587554044575181 Ether
0xf9c494a495ad4ca5793a0f619f1a21cc79ac8a0831e0c1f0bc280fc00aef122f560634413 days 22 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.013677817365955827 Ether
0x5e3d5658918f374f47a31596bb06e9ed8e6d834df2cbcfd1b67dedfab7485a5c560387114 days 8 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x9a0cf297c8143d8e08296f5257ba81081b1a2e5b0.081133695556054276 Ether
0xa39f4a6cd6359aa8546769cc1221d241011a422ba039829e8d46d72831d01d44560373114 days 9 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x1ed45acba1c716c8fbe88aa35d27842fb612e20a0.171778469032274127 Ether
0x8d9b512b98b483e494558f6e63710790c1ec8299d5daed4440e5c8db4f333548560079814 days 21 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x28eb0ce7f78dfae3f98a1d6b59872b78f642966f1.077542037305882058 Ether
0xd89967d7625cfcde0b38479235999105b353146721eaed5a433f91739948b009559187216 days 10 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.008417114221004346 Ether
0x3475b4a6d00b752378d8e2f63ee3465bb9f695cdc68677494fcbe180591f01f7557875118 days 17 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460xabd00ce9821641cf53f01c3c9c75a04694f41b080.004154622849592725 Ether
0x07f1034e91a44949414106d0185901bdeb045f62fce67658557f288c94ff8484557406719 days 13 hrs ago0xf39729a98d936199c8260af86018ebf21ed8f8460x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.010127447546965129 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.