Реклама вашего контракта Кабинет инвестора
Меню
Появились вопросы или есть предложения?
Напишите нам в Telegram t.me/smartradar
SnailThrone

SnailThrone

Etherscan
0x261d650a521103428c6827a11fc0cbce96d74dbc
Следить за контрактом

Баланс

13.6284 ETH.

Динамика пополнений
от общего пополнения за день

0.011%

Ввод

За последний час
0 ETH.
Всего
50.181 ETH.

Выводы

За последний час
0 ETH.
Всего
36.5527 ETH.

Условия

В день
-
В час
-

Инвесторов

59

Повторные пополнения

За последний час
0 ETH.
Всего
33.2707 ETH.

Средняя оценка аудиторов

-

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (1901)
Выводы (158)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
25 ноя. 2018 г. 01:41 6766526 0x5b446410fac04248a28e136c03aadb381a4d41544183c18d71432ec252ce4f9f 0x7091d5758bcc57e3d69d9c4e0a126ce5ef17a012 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.2 Ether
25 ноя. 2018 г. 00:31 6766226 0x0689e6e321e7ee85370c0032e70d3b931f81647183e52a56c7fcf9fec84c67b7 0xb1990c317146f9a6b112d12d2564f0bbf8adc706 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.07 Ether
25 ноя. 2018 г. 00:18 6766185 0x6e0be491829b10bad99f2dfd957f468fc000c0ab55582ba07d2f85be294b4392 0xb1990c317146f9a6b112d12d2564f0bbf8adc706 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.1 Ether
25 ноя. 2018 г. 00:02 6766109 0xe81c481786e85a8fbca3220ded5c49d66ceb3fae01739a1c3b4ee39bfc452869 0x30385a99e66469a8c0bf172896758dd4595704a9 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.1 Ether
24 ноя. 2018 г. 23:32 6765969 0xf0c9d3707a0e3077ce67b34f2da7ab036c940250c212610f650b6a1dc86460c7 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:32 6765967 0x787e5fd4e938d168c34d8569a4dceeecea039dfc20dab6aaef26d22524303edc 0xe84fd91cbba2fcddc22d96965158ae676dd61d28 0x261d650a521103428c6827a11fc0cbce96d74dbc 1 Ether
24 ноя. 2018 г. 23:31 6765965 0xa3b00ed0e3ab598f8f74ce2b8d7565ec7b08c05c164ef2afe8d7ec589f4f3260 0x23b2bcae8dec395afd931f49ea8387937e515ca1 0x261d650a521103428c6827a11fc0cbce96d74dbc 1 Ether
24 ноя. 2018 г. 23:30 6765962 0x323882c4e246d448acea4975132c2fd592a813ff856ba8ff2a1ab358700e1759 0xaa5dd1ac6e16e5f34c88bb7b3d67938d22ebe9a9 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:29 6765959 0x0bc3e107b3ed9f477c2ca55087fd251121a3bfb70072ba4361bf8dd66df12966 0xaa5dd1ac6e16e5f34c88bb7b3d67938d22ebe9a9 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.2 Ether
24 ноя. 2018 г. 23:28 6765957 0xf1b37aa292721b40836f79eb93d2febf5d2f9d5f10302973081d9c1424808121 0x78feff3e50afff2316be5cae1b49cc00c0570353 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:26 6765946 0x31bffea48d29f630f7a7de99479ae43efbff563019756e6a3e98451c617cf3c4 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:24 6765944 0x4959bceb93292130ccf70a6e325fb88d850c1e3997c38152db28bd1ee5156567 0x23b2bcae8dec395afd931f49ea8387937e515ca1 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:21 6765930 0xeeea83d8a19be8e158ca6a84d2a6d5d880af7b8a9825326c5bb49d6198d1e8c7 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:20 6765927 0xee4d8f39ccc2fc095689a77cbf4a68906b32dc2600b69bc6f1a47a1061af7523 0x23b2bcae8dec395afd931f49ea8387937e515ca1 0x261d650a521103428c6827a11fc0cbce96d74dbc 2 Ether
24 ноя. 2018 г. 23:19 6765922 0xe8689f6f4aeba60e32f565f6abea8864a188e1d0b51d0900ca9c375e7e374234 0xe84fd91cbba2fcddc22d96965158ae676dd61d28 0x261d650a521103428c6827a11fc0cbce96d74dbc 2 Ether
24 ноя. 2018 г. 23:19 6765922 0x0abe0c7644de7054123077106c7d85b6fa86a748e27ae4f40ad49aac839dbea9 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:18 6765918 0xbb94f737632c2c1dbc85754238f709d651521aeb5af85d2819e4877f14821fc9 0x23b2bcae8dec395afd931f49ea8387937e515ca1 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:13 6765893 0x9e795441d79fbf0d738ae749ac8055b700ae1973b3483bbce8e7794d8abe0fd2 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:12 6765891 0x498bd7e9c49e9e7eaa02790ae6e89b6ba5f26e5a3ad02709302d4cb7ea4a3f7e 0x37878b61525441ac2ece66b4a6e0d9f67f22a9d8 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.005 Ether
24 ноя. 2018 г. 23:11 6765890 0x9d473490c86f682398dc7049207992a8b365df32908658bcdf9af7de9c029b06 0xe84fd91cbba2fcddc22d96965158ae676dd61d28 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:11 6765890 0x4567028cfd5817dd11aa21107dafe6d5667ef8c1fa89e520b930284ae445b905 0x23b2bcae8dec395afd931f49ea8387937e515ca1 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.8 Ether
24 ноя. 2018 г. 23:09 6765880 0xb1419adb91d9085643c1774265a935be3f07d2181bcefb4e5b685819f50368d1 0xe84fd91cbba2fcddc22d96965158ae676dd61d28 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:09 6765873 0xe69c721c22f1da6d992244b70c97ae1e17349aaba01053abe70c2b334fad6ecf 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
24 ноя. 2018 г. 23:08 6765870 0x41e7d5f18034de62c4405afdb06a564adace483df043cd72d1617d00ac4e6351 0xe84fd91cbba2fcddc22d96965158ae676dd61d28 0x261d650a521103428c6827a11fc0cbce96d74dbc 0.8 Ether
24 ноя. 2018 г. 23:07 6765867 0x2ecd9fc3d6c3207c64a6533d77112825339dca05caf3401529defebe5bb4efb4 0x23b2bcae8dec395afd931f49ea8387937e515ca1 0x261d650a521103428c6827a11fc0cbce96d74dbc 0 Ether
Дата Блок parentTxHash От кого Кому Сумма
Вчера 02:56 7389564 0x307735f06234e86e8a7a40c9be384308a31ff2a9883719b33066a9a1d5603930 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1b8e15229f052b42c1bdff4a7d131fa600447972 0.004045812997293819 Ether
17 мар. 10:41 7385212 0x214d60e3e7ae8c39e4b12f3de186b9ff09c610b963fcc70dadfc4213c3f1b419 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1b8e15229f052b42c1bdff4a7d131fa600447972 0.00800315563960015 Ether
16 мар. 23:37 7382258 0xc988a361d1f02956904183f7b32f8522a9f130c7616e05d55ec481e3b558ccf3 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.001304074997344814 Ether
14 мар. 13:40 7366659 0x936fda3b68cd4c805a22a8d7158fefe00bf90d3791b1b41da444c5dedc88c139 0x261d650a521103428c6827a11fc0cbce96d74dbc 0xb1990c317146f9a6b112d12d2564f0bbf8adc706 0.062213683727193096 Ether
13 мар. 04:55 7357917 0x3565bb4051522c8bec957f4c5e97d4c2a0f14bd71641df0d51ca6f9d981fb02b 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.007338626944612681 Ether
12 мар. 19:55 7355475 0x289a3d52c0bdd7b195346f667809d68dec5d41cd13ba9f2494a9c4238d4d1e36 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1b8e15229f052b42c1bdff4a7d131fa600447972 0.008497081254520731 Ether
11 мар. 03:36 7344718 0xa8a24c52d7df43f1ba512046ac98e1f5ef38ae2fee90b0fa67f6a8734020b3e9 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1b8e15229f052b42c1bdff4a7d131fa600447972 0.016323587751176188 Ether
10 мар. 21:30 7343070 0x1544bd318c42063ee66c232889d732fa7d3530552c56051f5dd55826079fbd73 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.003198414241822854 Ether
9 мар. 07:30 7332834 0x353d54654953f4f93dd3e43d67ffea8c1c02c6aa825f61b2a3607f664312d936 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1b8e15229f052b42c1bdff4a7d131fa600447972 0.02431888199516882 Ether
9 мар. 06:35 7332586 0x440a52085071a53c8a1728ad471e1a7c5ff3a79dfc143af3a9d1ddfe331310be 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x52ecc67bcaff974728160eacb70eed1945d1c94f 0.006351115145796871 Ether
8 мар. 06:42 7326284 0x42711918ca41749dfb036a5ea7ed815810b4c586eba1b2c764d3911db380daf4 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1b8e15229f052b42c1bdff4a7d131fa600447972 0.020573328580197215 Ether
7 мар. 04:38 7319293 0xe8450b0f48ac442875b21ce748d267f5ccd74fbfeb9d9b95021eb49d15bbb734 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.001722883346313096 Ether
4 мар. 21:47 7304616 0x23424226ff3762ffd11c76dd174eabeeca686422f721e780bfbdb313b2390e6d 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.000814480391429097 Ether
2 мар. 11:36 7289165 0x2181087b6441a8a127e03e4886a693da6efb9479f7f742d70fc51c6d43140286 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.002054255828323955 Ether
1 мар. 04:23 7281154 0x68d3836ad8b337cfa6fb874f08c06e5c2d2cb76322d8ca0e5bfc1846a7b372d0 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.00326979165664791 Ether
28 фев. 03:45 7276631 0x5d2e2b97a83d43489209aa77a8a8dc9e8999b013250b8c7aded858557665c6fd 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.001433946399871984 Ether
27 фев. 23:05 7275796 0xedcc7d937027e480c041cecf05caea5eead7fff201d785864ba029abaceb77a8 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x7692a4436f8252f34258c2bfa846ec5e840d5e55 0.027785243387480393 Ether
24 фев. 23:36 7263118 0x9cc02ff9258ca7f705ecb5945440637e3d123951a82b944ff261567d1388330e 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1c180f637927384465a3c43e03d2dce18a892fda 0.0219324827067324 Ether
24 фев. 23:15 7263046 0x808dcb4e6cfe00d484d6b1e46a1df9e92cfffb3f658b3e8f63e890740260b81f 0x261d650a521103428c6827a11fc0cbce96d74dbc 0xfbf13497056f33300ad82511c6a1349dd3d2ae26 0.8517840940847491 Ether
24 фев. 04:39 7259737 0x7dfda0440bee2a1bb1e9d52d702fa5b43e74301970ab8d44fb0f5ce7b724aa93 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.000541552827017008 Ether
23 фев. 13:35 7257027 0x07cbc502bf458f452f31cac48218c99ef9d130394519f1f4cfa67a283c882809 0x261d650a521103428c6827a11fc0cbce96d74dbc 0xd00fcd747059d19d759c16a70e068cac4f065906 0.47513832473105805 Ether
21 фев. 09:43 7247797 0x3e475ebe880c1cc6c5549d63b9f093f1bc9e13049d9d38c2aa622d7f8a47c528 0x261d650a521103428c6827a11fc0cbce96d74dbc 0xa7e67f2ef812c3c6427aa62a6af77580181f4b3c 0.2640317054470642 Ether
21 фев. 05:21 7247001 0x927dd0625cf6bfa6cf31dbed981024dea36ce640c11ec5e548473fcd1b52d062 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x1c180f637927384465a3c43e03d2dce18a892fda 0.030750242789800836 Ether
17 фев. 09:42 7230846 0x7c5e4b7ebd115316d4741d1d3bd12ec78417fe10e622974bc2cc4a36d84c973b 0x261d650a521103428c6827a11fc0cbce96d74dbc 0x5a777dd5052aabd0d48833081b5f57ff80989fde 0.001873073412653226 Ether
14 фев. 07:39 7218009 0x0159fb7ae85ce928d5bc74b032823f80ac4857aceae35381bc31b3c829d3079d 0x261d650a521103428c6827a11fc0cbce96d74dbc 0xa7e67f2ef812c3c6427aa62a6af77580181f4b3c 0.001810931941077193 Ether
Средняя оценка аудиторов -
Contract Source Code </>
pragma solidity ^0.4.24;

/* SNAILTHRONE

// SnailFarm + Pyramid + Fomo

// Buy and sell snails, pyramid tokens, directly from the contract
// Snail holders receive proportional dividends from buys and hatches
// Token price correlates with snail max supply

// Snails produce eggs, at a rate of 8% per day
// Up to a maximum equal to the amount of snails the player owns
// Players can hatch these eggs to turn them into more tokens
// Hatching comes at half the cost of buying tokens
// Players can also sacrifice their eggs to the FrogKing for an ETH reward

// On buy, incoming ETH is distributed as such:
// 50% saved for the SnailPot (token price on sale)
// 20% in divs
// 20% go to the FrogPot
// 2% is given to the current Pharaoh
// 2% goes to the SnailGod pot
// 6% goes to the referral. lacking ref, it goes to the SnailGod pot

// On hatch, incoming ETH is distributed as follows:
// 40% in divs
// 40% go to the FrogPot
// 4% is given to the current Pharaoh
// 16% goes to the SnailGod pot

// SNAILPOT 
// Snails can be sold to the SnailPot for ether 
// Price per snail is 50% of the current buy price 
// No more than 10% of the SnailPot can be drained in one sale 

// FROGPOT
// Feeding eggs to the frogking grants a reward 
// Ether earned = frogpot * eggs fed / total snails

// SNAILGOD
// The ultimate reward of the game, on a 24 hours timer
// Sacrifice a minimum of 40 snails to become the Pharaoh
// While the Pharaoh sits on the throne, he receives 2% ETH of every buy
// A successful sacrifice will bump the timer back up by 8 minutes
// and set the minimum snail requirement to 40 + this sacrifice
// This number lowers back down to 40 over time
// Once the timer hits 0, whoever holds the Pharaoh title ascends to godhood
// The SnailGod can instantly claim 50% of the SnailGod pot
// Timer resets at 24 hours, minimum sacrifice resets at 40 snails 
// and the previous Pharaoh takes the throne until a contender sacrifices enough snails

// REFERRALS
// Unlocked by owning at least 300 snails
// Every buy through a referral link gives 6% to the referred address
// Addresses aren't bound to their referral link
// Referrals don't profit from hatching eggs

*/

contract SnailThrone {
    using SafeMath for uint;
    
    /* Events */
    
    event WithdrewEarnings (address indexed player, uint ethreward);
    event ClaimedDivs (address indexed player, uint ethreward);
    event BoughtSnail (address indexed player, uint ethspent, uint snail);
    event SoldSnail (address indexed player, uint ethreward, uint snail);
    event HatchedSnail (address indexed player, uint ethspent, uint snail);
    event FedFrogking (address indexed player, uint ethreward, uint egg);
    event Ascended (address indexed player, uint ethreward, uint indexed round);
    event BecamePharaoh (address indexed player, uint indexed round);
    event NewDivs (uint ethreward);
    
    /* Constants */
    
    uint256 public GOD_TIMER_START      = 86400; //seconds, or 24 hours
	uint256 public PHARAOH_REQ_START    = 40; //number of snails to become pharaoh
    uint256 public GOD_TIMER_INTERVAL   = 12; //seconds to remove one snail from req
	uint256 public GOD_TIMER_BOOST		= 480; //seconds added to timer with new pharaoh
    uint256 public TIME_TO_HATCH_1SNAIL = 1080000; //8% daily
    uint256 public TOKEN_PRICE_FLOOR    = 0.00002 ether; //4 zeroes
    uint256 public TOKEN_PRICE_MULT     = 0.00000000001 ether; //10 zeroes
    uint256 public TOKEN_MAX_BUY        = 4 ether; //max allowed eth in one buy transaction
    uint256 public SNAIL_REQ_REF        = 300; //number of snails for ref link to be active
	
    /* Variables */
    
    //Becomes true one time to start the game
    bool public gameStarted             = false;
    
    //Used to ensure a proper game start
    address public gameOwner;
    
    //SnailGod round, amount, timer
    uint256 public godRound             = 0;
    uint256 public godPot               = 0;
    uint256 public godTimer             = 0;
    
    //Current Pharaoh
    address public pharaoh;
    
    //Last time throne was claimed or pharaohReq was computed
    uint256 public lastClaim;
    
    //Snails required to become the Pharaoh
    uint256 public pharaohReq           = PHARAOH_REQ_START;
    
    //Total number of snail tokens
    uint256 public maxSnail             = 0;
    
    //Egg sell fund
    uint256 public frogPot              = 0;
    
    //Token sell fund
    uint256 public snailPot             = 0;
    
    //Current divs per snail
    uint256 public divsPerSnail         = 0;
    	
    /* Mappings */
    
    mapping (address => uint256) public hatcherySnail;
    mapping (address => uint256) public lastHatch;
    mapping (address => uint256) public playerEarnings;
    mapping (address => uint256) public claimedDivs;
	
    /* Functions */
    
    // ACTIONS
    
    // Constructor
    // Sets msg.sender as gameOwner to start the game properly
    
    constructor() public {
        gameOwner = msg.sender;
    }

    // StartGame
    // Initialize godTimer
    // Set pharaoh and lastPharaoh as gameOwner
    // Buy tokens for value of message
    
    function StartGame() public payable {
        require(gameStarted == false);
        require(msg.sender == gameOwner);
        
        godTimer = now + GOD_TIMER_START;
        godRound = 1;
        gameStarted = true;
        pharaoh = gameOwner;
        lastClaim = now;
        BuySnail(msg.sender);
    }
    
    // WithdrawEarnings
    // Sends all player ETH earnings to his wallet
    
    function WithdrawEarnings() public {
        require(playerEarnings[msg.sender] > 0);
        
        uint256 _amount = playerEarnings[msg.sender];
        playerEarnings[msg.sender] = 0;
        msg.sender.transfer(_amount);
        
        emit WithdrewEarnings(msg.sender, _amount);
    }
    
    // ClaimDivs
    // Sends player dividends to his playerEarnings
    // Adjusts claimable dividends
    
    function ClaimDivs() public {
        
        uint256 _playerDivs = ComputeMyDivs();
        
        if(_playerDivs > 0) {
            //Add new divs to claimed divs
            claimedDivs[msg.sender] = claimedDivs[msg.sender].add(_playerDivs);
            
            //Send divs to playerEarnings
            playerEarnings[msg.sender] = playerEarnings[msg.sender].add(_playerDivs);
            
            emit ClaimedDivs(msg.sender, _playerDivs);
        }
    }
    
    // BuySnail 
    
    function BuySnail(address _ref) public payable {
        require(gameStarted == true, "game hasn't started yet");
        require(tx.origin == msg.sender, "contracts not allowed");
        require(msg.value <= TOKEN_MAX_BUY, "maximum buy = 4 ETH");
        
        //Calculate price and resulting snails
        uint256 _snailsBought = ComputeBuy(msg.value);
        
        //Adjust player claimed divs
        claimedDivs[msg.sender] = claimedDivs[msg.sender].add(_snailsBought.mul(divsPerSnail));
        
        //Change maxSnail before new div calculation
        maxSnail = maxSnail.add(_snailsBought);
        
        //Divide incoming ETH
        PotSplit(msg.value, _ref, true);
        
        //Set last hatch to current timestamp
        lastHatch[msg.sender] = now;
        
        //Add player snails
        hatcherySnail[msg.sender] = hatcherySnail[msg.sender].add(_snailsBought);
        
        emit BoughtSnail(msg.sender, msg.value, _snailsBought);
    }
    
    // SellSnail
    
    function SellSnail(uint256 _tokensSold) public {
        require(gameStarted == true, "game hasn't started yet");
        require(hatcherySnail[msg.sender] >= _tokensSold, "not enough snails to sell");
        
        //Call ClaimDivs so ETH isn't blackholed
        ClaimDivs();

        //Check token price, sell price is half of current buy price
        uint256 _tokenSellPrice = ComputeTokenPrice();
        _tokenSellPrice = _tokenSellPrice.div(2);
        
        //Check maximum ETH that can be obtained = 10% of SnailPot
        uint256 _maxEth = snailPot.div(10);
        
        //Check maximum amount of tokens that can be sold
        uint256 _maxTokens = _maxEth.div(_tokenSellPrice);
        
        //Check if player tried to sell too many tokens
        if(_tokensSold > _maxTokens) {
            _tokensSold = _maxTokens;
        }
        
        //Calculate sell reward, tokens * price per token
        uint256 _sellReward = _tokensSold.mul(_tokenSellPrice);
        
        //Remove reserve ETH 
        snailPot = snailPot.sub(_sellReward);
        
        //Remove tokens
        hatcherySnail[msg.sender] = hatcherySnail[msg.sender].sub(_tokensSold);
        maxSnail = maxSnail.sub(_tokensSold);
        
        //Adjust player claimed divs
        claimedDivs[msg.sender] = claimedDivs[msg.sender].sub(divsPerSnail.mul(_tokensSold));
        
        //Give ETH to player 
        playerEarnings[msg.sender] = playerEarnings[msg.sender].add(_sellReward);
        
        emit SoldSnail(msg.sender, _sellReward, _tokensSold);
    }
    
    // HatchEgg
    // Turns player eggs into snails
    // Costs half the ETH of a normal buy
    
    function HatchEgg() public payable {
        require(gameStarted == true, "game hasn't started yet");
        require(msg.value > 0, "need ETH to hatch eggs");
        
        //Check how many eggs the ether sent can pay for
        uint256 _tokenPrice = ComputeTokenPrice().div(2);
        uint256 _maxHatch = msg.value.div(_tokenPrice);
        
        //Check number of eggs to hatch
        uint256 _newSnail = ComputeMyEggs(msg.sender);
        
        //Multiply by token price
        uint256 _snailPrice = _tokenPrice.mul(_newSnail);
        
        //Refund any extra ether
        uint256 _ethUsed = msg.value;
                
        if (msg.value > _snailPrice) {
            uint256 _refund = msg.value.sub(_snailPrice);
            playerEarnings[msg.sender] = playerEarnings[msg.sender].add(_refund);
            _ethUsed = _snailPrice;
        }
        
        //Adjust new snail amount if not enough ether 
        if (msg.value < _snailPrice) {
            _newSnail = _maxHatch;
        }
        
        //Adjust player divs
        claimedDivs[msg.sender] = claimedDivs[msg.sender].add(_newSnail.mul(divsPerSnail));
        
        //Change maxSnail before div calculation
        maxSnail = maxSnail.add(_newSnail);
        
        //Divide incoming ETH 
        PotSplit(_ethUsed, msg.sender, false);
        
        //Add new snails
        lastHatch[msg.sender] = now;
        hatcherySnail[msg.sender] = hatcherySnail[msg.sender].add(_newSnail);
        
        emit HatchedSnail(msg.sender, _ethUsed, _newSnail);
    }
    
    // PotSplit
    // Called on buy and hatch
    
    function PotSplit(uint256 _msgValue, address _ref, bool _buy) private {
        
        //On token buy, 50% of the ether goes to snailpot
        //On hatch, no ether goes to the snailpot
        uint256 _eth = _msgValue;
        
        if (_buy == true) {
            _eth = _msgValue.div(2);
            snailPot = snailPot.add(_eth);
        }
        
        //20% distributed as divs (40% on hatch)
        divsPerSnail = divsPerSnail.add(_eth.mul(2).div(5).div(maxSnail));
        
        //20% to FrogPot (40% on hatch)
        frogPot = frogPot.add(_eth.mul(2).div(5));
        
        //2% to Pharaoh (4% on hatch)
        playerEarnings[pharaoh] = playerEarnings[pharaoh].add(_eth.mul(2).div(50));
        
        //2% to SnailGod pot (4% on hatch)
        godPot = godPot.add(_eth.mul(2).div(50));
        
        //Check for referrals (300 snails required)
        //Give 6% to referrer if there is one
        //Else give 6% to SnailGod pot
        //Always give 12% to SnailGod pot on hatch
        if (_ref != msg.sender && hatcherySnail[_ref] >= SNAIL_REQ_REF) {
            playerEarnings[_ref] = playerEarnings[_ref].add(_eth.mul(6).div(50));
        } else {
            godPot = godPot.add(_eth.mul(6).div(50));
        }
    }
    
    // FeedEgg
    // Sacrifices the player's eggs to the FrogPot
    // Gives ETH in return
    
    function FeedEgg() public {
        require(gameStarted == true, "game hasn't started yet");
        
        //Check number of eggs to hatch
        uint256 _eggsUsed = ComputeMyEggs(msg.sender);
        
        //Remove eggs
        lastHatch[msg.sender] = now;
        
        //Calculate ETH earned
        uint256 _reward = _eggsUsed.mul(frogPot).div(maxSnail);
        frogPot = frogPot.sub(_reward);
        playerEarnings[msg.sender] = playerEarnings[msg.sender].add(_reward);
        
        emit FedFrogking(msg.sender, _reward, _eggsUsed);
    }
    
    // AscendGod
    // Distributes SnailGod pot to winner, restarts timer 
    
    function AscendGod() public {
		require(gameStarted == true, "game hasn't started yet");
        require(now >= godTimer, "pharaoh hasn't ascended yet");
        
        //Reset timer and start new round 
        godTimer = now + GOD_TIMER_START;
        pharaohReq = PHARAOH_REQ_START;
        godRound = godRound.add(1);
        
        //Calculate and give reward
        uint256 _godReward = godPot.div(2);
        godPot = godPot.sub(_godReward);
        playerEarnings[pharaoh] = playerEarnings[pharaoh].add(_godReward);
        
        emit Ascended(pharaoh, _godReward, godRound);
        
        //msg.sender becomes pharaoh 
        pharaoh = msg.sender;
    }

    // BecomePharaoh
    // Sacrifices snails to become the Pharaoh
    
    function BecomePharaoh(uint256 _snails) public {
        require(gameStarted == true, "game hasn't started yet");
        require(hatcherySnail[msg.sender] >= _snails, "not enough snails in hatchery");
        
        //Run end round function if round is over
        if(now >= godTimer) {
            AscendGod();
        }
        
        //Call ClaimDivs so ETH isn't blackholed
        ClaimDivs();
        
        //Check number of snails to remove from pharaohReq
        uint256 _snailsToRemove = ComputePharaohReq();
        
        //Save claim time to lower number of snails later
        lastClaim = now;
        
        //Adjust pharaohReq
        if(pharaohReq < _snailsToRemove){
            pharaohReq = PHARAOH_REQ_START;
        } else {
            pharaohReq = pharaohReq.sub(_snailsToRemove);
            if(pharaohReq < PHARAOH_REQ_START){
                pharaohReq = PHARAOH_REQ_START;
            }
        }
        
        //Make sure player fits requirement
        if(_snails >= pharaohReq) {
            
        //Remove snails
            maxSnail = maxSnail.sub(_snails);
            hatcherySnail[msg.sender] = hatcherySnail[msg.sender].sub(_snails);
            
        //Adjust msg.sender claimed dividends
            claimedDivs[msg.sender] = claimedDivs[msg.sender].sub(_snails.mul(divsPerSnail));
        
        //Add 8 minutes to timer
            godTimer = godTimer.add(GOD_TIMER_BOOST);
            
        //pharaohReq becomes the amount of snails sacrificed + 40
            pharaohReq = _snails.add(PHARAOH_REQ_START);

        //msg.sender becomes new Pharaoh
            pharaoh = msg.sender;
            
            emit BecamePharaoh(msg.sender, godRound);
        }
    }
    
    // fallback function
    // Distributes sent ETH as dividends
    
    function() public payable {
        divsPerSnail = divsPerSnail.add(msg.value.div(maxSnail));
        
        emit NewDivs(msg.value);
    }
    
    // VIEW
    
    // ComputePharaohReq
    // Returns number of snails to remove from pharaohReq
    // Snail requirement lowers by 1 every 12 seconds

    function ComputePharaohReq() public view returns(uint256) {
        uint256 _timeLeft = now.sub(lastClaim);
        uint256 _req = _timeLeft.div(GOD_TIMER_INTERVAL);
        return _req;
    }

    // ComputeTokenPrice
    // Returns ETH required to buy one snail
    // 1 snail = (T_P_FLOOR + (T_P_MULT * total amount of snails)) eth
    
    function ComputeTokenPrice() public view returns(uint256) {
        return TOKEN_PRICE_FLOOR.add(TOKEN_PRICE_MULT.mul(maxSnail));
    }
    
    // ComputeBuy
    // Returns snails bought for a given amount of ETH 
    
    function ComputeBuy(uint256 _ether) public view returns(uint256) {
        uint256 _tokenPrice = ComputeTokenPrice();
        return _ether.div(_tokenPrice);
    }
    
    // ComputeMyEggs
    // Returns eggs produced since last hatch or sacrifice
	// Egg amount can never be above current snail count
    
    function ComputeMyEggs(address adr) public view returns(uint256) {
        uint256 _eggs = now.sub(lastHatch[adr]);
        _eggs = _eggs.mul(hatcherySnail[adr]).div(TIME_TO_HATCH_1SNAIL);
        if (_eggs > hatcherySnail[adr]) {
            _eggs = hatcherySnail[adr];
        }
        return _eggs;
    }
    
    // ComputeMyDivs
    // Returns unclaimed divs for the player
    
    function ComputeMyDivs() public view returns(uint256) {
        //Calculate share of player
        uint256 _playerShare = divsPerSnail.mul(hatcherySnail[msg.sender]);
		
        //Subtract already claimed divs
    	_playerShare = _playerShare.sub(claimedDivs[msg.sender]);
        return _playerShare;
    }
    
    // GetMySnails
    // Returns player snails
    
    function GetMySnails() public view returns(uint256) {
        return hatcherySnail[msg.sender];
    }
    
    // GetMyEarnings
    // Returns player earnings
    
    function GetMyEarnings() public view returns(uint256) {
        return playerEarnings[msg.sender];
    }
    
    // GetContractBalance
    // Returns ETH in contract
    
    function GetContractBalance() public view returns (uint256) {
        return address(this).balance;
    }
    
}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  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;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  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;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

Задача организации, в особенности же рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Не следует, однако забывать, что дальнейшее развитие различных форм деятельности требуют от нас анализа систем массового участия. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности влечет за собой процесс внедрения и модернизации модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт консультация с широким активом позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны консультация с широким активом позволяет оценить значение системы обучения кадров, соответствует насущным потребностям. Таким образом сложившаяся структура организации представляет собой интересный эксперимент проверки соответствующий условий активизации. Равным образом консультация с широким активом представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. С другой стороны начало повседневной работы по формированию позиции позволяет оценить значение новых предложений.

Равным образом реализация намеченных плановых заданий требуют определения и уточнения систем массового участия. Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. Равным образом постоянный количественный рост и сфера нашей активности влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации модели развития.

Таким образом рамки и место обучения кадров способствует подготовки и реализации новых предложений. Равным образом укрепление и развитие структуры в значительной степени обуславливает создание существенных финансовых и административных условий. Идейные соображения высшего порядка, а также сложившаяся структура организации представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Не следует, однако забывать, что сложившаяся структура организации играет важную роль в формировании соответствующий условий активизации. С другой стороны дальнейшее развитие различных форм деятельности требуют определения и уточнения направлений прогрессивного развития.

Повседневная практика показывает, что начало повседневной работы по формированию позиции представляет собой интересный эксперимент проверки систем массового участия. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание систем массового участия.

Таким образом укрепление и развитие структуры представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Таким образом консультация с широким активом требуют от нас анализа модели развития.

Не следует, однако забывать, что рамки и место обучения кадров позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке соответствующий условий активизации. Товарищи! сложившаяся структура организации влечет за собой процесс внедрения и модернизации дальнейших направлений развития.
Информация о домене или любая информация о сайте
Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! новая модель организационной деятельности позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом реализация намеченных плановых заданий позволяет выполнять важные задания по разработке новых предложений. Задача организации, в особенности же консультация с широким активом требуют от нас анализа существенных финансовых и административных условий. Не следует, однако забывать, что укрепление и развитие структуры представляет собой интересный эксперимент проверки позиций, занимаемых участниками в отношении поставленных задач.

Разнообразный и богатый опыт начало повседневной работы по формированию позиции требуют от нас анализа соответствующий условий активизации. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности способствует подготовки и реализации форм развития. Задача организации, в особенности же сложившаяся структура организации обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития.

Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки систем массового участия. Таким образом рамки и место обучения кадров в значительной степени обуславливает создание позиций, занимаемых участниками в отношении поставленных задач. Товарищи! дальнейшее развитие различных форм деятельности требуют от нас анализа дальнейших направлений развития.

Задача организации, в особенности же сложившаяся структура организации играет важную роль в формировании направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Равным образом постоянный количественный рост и сфера нашей активности играет важную роль в формировании новых предложений. С другой стороны постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки направлений прогрессивного развития. Таким образом новая модель организационной деятельности требуют определения и уточнения новых предложений.

Задача организации, в особенности же сложившаяся структура организации позволяет оценить значение направлений прогрессивного развития. Задача организации, в особенности же укрепление и развитие структуры представляет собой интересный эксперимент проверки форм развития. Задача организации, в особенности же рамки и место обучения кадров в значительной степени обуславливает создание модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют определения и уточнения существенных финансовых и административных условий. Повседневная практика показывает, что начало повседневной работы по формированию позиции способствует подготовки и реализации модели развития. Повседневная практика показывает, что новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет оценить значение существенных финансовых и административных условий. Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании систем массового участия. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что постоянный количественный рост и сфера нашей активности позволяет выполнять важные задания по разработке соответствующий условий активизации. Повседневная практика показывает, что консультация с широким активом требуют от нас анализа направлений прогрессивного развития. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития.

С другой стороны рамки и место обучения кадров способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Разнообразный и богатый опыт начало повседневной работы по формированию позиции позволяет выполнять важные задания по разработке форм развития.

Идейные соображения высшего порядка, а также укрепление и развитие структуры представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также консультация с широким активом представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Идейные соображения высшего порядка, а также реализация намеченных плановых заданий представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Равным образом новая модель организационной деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Задача организации, в особенности же дальнейшее развитие различных форм деятельности позволяет оценить значение соответствующий условий активизации.

Задача организации, в особенности же рамки и место обучения кадров требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Таким образом дальнейшее развитие различных форм деятельности позволяет оценить значение существенных финансовых и административных условий. Повседневная практика показывает, что реализация намеченных плановых заданий позволяет оценить значение форм развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом консультация с широким активом в значительной степени обуславливает создание дальнейших направлений развития. Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития.

Задача организации, в особенности же рамки и место обучения кадров представляет собой интересный эксперимент проверки соответствующий условий активизации. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности способствует подготовки и реализации систем массового участия. С другой стороны начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития. Не следует, однако забывать, что реализация намеченных плановых заданий позволяет выполнять важные задания по разработке направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют от нас анализа дальнейших направлений развития.

Таким образом консультация с широким активом представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание форм развития.

Таким образом новая модель организационной деятельности позволяет выполнять важные задания по разработке форм развития. Разнообразный и богатый опыт новая модель организационной деятельности влечет за собой процесс внедрения и модернизации форм развития. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации существенных финансовых и административных условий. Не следует, однако забывать, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации направлений прогрессивного развития. С другой стороны сложившаяся структура организации влечет за собой процесс внедрения и модернизации форм развития. Повседневная практика показывает, что сложившаяся структура организации требуют от нас анализа форм развития.

Товарищи! рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Повседневная практика показывает, что рамки и место обучения кадров позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке форм развития. Таким образом постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание дальнейших направлений развития.