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

ETHcapital org

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

Баланс

0.1281 ETH.

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

0%

Ввод

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

Выводы

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

Условия

В день
-
В час
-

Инвесторов

6

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

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

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

-

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (55)
Выводы (61)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
7 ноя. 2018 г. 17:17 6660590 0x237cfef84a938a577ae85037346f1c989f83e5af8eb1f4b45f244640ec125688
Транзакция с ошибкой
0x2422d3403d6767219f804167c3b7d65c0d55f8bf 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
7 ноя. 2018 г. 16:57 6660499 0x3fae52ed8061dba4d2a0b47c6f0d5e55ff161dce0beaae5a8d9d12edf4c167e5
Транзакция с ошибкой
0x14eb26801f7b452275f2f6b18385dd04982fec92 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
7 ноя. 2018 г. 16:57 6660497 0x5a0e52d1b710a6f022a4e431e95a0922b954395e3396444bff3fb8c4df56e1c4
Транзакция с ошибкой
0x5ef22b04c15594f3f25116322531e945fe9aaa01 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
7 ноя. 2018 г. 16:51 6660469 0x40e63b75d65f8cdec28bd1ed2696e70d4cd1418e708fd63e2857d1881f4b8e5a
Транзакция с ошибкой
0x5ef22b04c15594f3f25116322531e945fe9aaa01 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
7 ноя. 2018 г. 16:50 6660463 0x4c1d0238380dbb29cba5f8ccb0ed0367be50d72f49e5982c2250617e0a2578a3
Транзакция с ошибкой
0x14eb26801f7b452275f2f6b18385dd04982fec92 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
31 окт. 2018 г. 05:55 6615061 0xb85c2a7567cf89a030b1c6c3b147885e3ef09c7793f800517d1916d2e24d0772 0x2f4e909609834f98d310184431bc40aabda30502 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
31 окт. 2018 г. 05:45 6615022 0xbc1f5dc13a3a1126b74ccc6582b3ae1fc457ad6168f7de1505403881202450b6 0x2f4e909609834f98d310184431bc40aabda30502 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
31 окт. 2018 г. 05:44 6615019 0xfccea463709352717efa73fc71a83b9da3dc676309177da7f3f73ac732ec2b95 0x2f4e909609834f98d310184431bc40aabda30502 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
16 окт. 2018 г. 03:58 6522850 0x6540c5b5f230001f6b4926f61961e282db801a5662cb62b5a8f4224ea0ddc82e 0x14eb26801f7b452275f2f6b18385dd04982fec92 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.025 Ether
15 окт. 2018 г. 03:44 6516680 0xe29f769ca9548d011ab42bee8bcba979d4dc23088e6257159bf9d1731e36481c 0x14eb26801f7b452275f2f6b18385dd04982fec92 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.095 Ether
15 окт. 2018 г. 03:42 6516665 0xf5cc97669432b65e83d42a9c76cb56d2afb0ebc7bce5bdd90f803c42f198616d 0xfcfd50ce30968c587b47920f147420cc85384e82 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.029 Ether
15 окт. 2018 г. 03:40 6516659 0x457f86948643ae6c2dd40bdd631a1753c5f2ff1a4e1e3712f7f43cd03c0e1ba8 0x8558cf546362659d56d774a5f53ab7e3f2db5925 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.09 Ether
15 окт. 2018 г. 03:39 6516655 0xe1a2e8b3de6d80ef6409c678d6a22f243fe8789a842db0afeae44743871ccb68 0x2422d3403d6767219f804167c3b7d65c0d55f8bf 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.0386 Ether
15 окт. 2018 г. 03:38 6516651 0x007425003bcfdb258cdc85d951c9274fa16aab278064f1f6384e7425b11a766b 0x5ef22b04c15594f3f25116322531e945fe9aaa01 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.11 Ether
15 окт. 2018 г. 03:38 6516650 0x4965303aefe98b2466209f21c881b8ea8f65a0b729237cb07fe95701a0633a8e 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.56 Ether
15 окт. 2018 г. 03:37 6516647 0x0493a397fa2b3b1cbe5f55fcf39364d07d3230d648b21bf3039057940aad8d36
Транзакция с ошибкой
0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x2f4e909609834f98d310184431bc40aabda30502 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
12 окт. 2018 г. 07:50 6499231 0x63758073eb57c83caac205cf2a6a09b1a5645927cc2453a0a5a8740f906cb072 0x14eb26801f7b452275f2f6b18385dd04982fec92 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.017 Ether
11 окт. 2018 г. 03:46 6492025 0x91d870bf34f109969547161431a8ca160f59ec6ab9dbcbc7db3c87a03b80bf2a 0x14eb26801f7b452275f2f6b18385dd04982fec92 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.027 Ether
9 окт. 2018 г. 04:32 6479948 0x9e94dfaa90092322524d55212fbcdf399bf4337c2a2d9a99f41a1fac8aeaada8 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.178 Ether
9 окт. 2018 г. 04:23 6479908 0x2ae830d8cee0f4579e3e3387a061c2bea15678b09986aeff8881fe3a5e71b048 0x5ef22b04c15594f3f25116322531e945fe9aaa01 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.044 Ether
8 окт. 2018 г. 08:48 6474802 0xbc580ffe967edd6c085fcbc6756a800e32f59a2193256eeeaf9b3fe37d32f53f 0x2f4e909609834f98d310184431bc40aabda30502 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
8 окт. 2018 г. 08:47 6474799 0xd01ce9d7edf9108b2e17054e54b9248de1a864d12345b788a342c68298148605 0x2f4e909609834f98d310184431bc40aabda30502 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0 Ether
8 окт. 2018 г. 08:34 6474756 0x50a4898a617923ba8aa0636ef09ec7451678351a78bff32712923c6f9727f05a 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.52 Ether
8 окт. 2018 г. 08:19 6474697 0x6b448b8003326f6af1f7124d592fae54d776b7023e128bdcd52e12f6315f8e7c 0xfcfd50ce30968c587b47920f147420cc85384e82 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0.02 Ether
Дата Блок parentTxHash От кого Кому Сумма
31 окт. 2018 г. 05:55 6615061 0xb85c2a7567cf89a030b1c6c3b147885e3ef09c7793f800517d1916d2e24d0772 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x5ef22b04c15594f3f25116322531e945fe9aaa01 0.359899518643471 Ether
31 окт. 2018 г. 05:55 6615061 0xb85c2a7567cf89a030b1c6c3b147885e3ef09c7793f800517d1916d2e24d0772 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 1.877040742824074 Ether
31 окт. 2018 г. 05:55 6615061 0xb85c2a7567cf89a030b1c6c3b147885e3ef09c7793f800517d1916d2e24d0772 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x14eb26801f7b452275f2f6b18385dd04982fec92 0.45646161339707386 Ether
31 окт. 2018 г. 05:55 6615061 0xb85c2a7567cf89a030b1c6c3b147885e3ef09c7793f800517d1916d2e24d0772 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2422d3403d6767219f804167c3b7d65c0d55f8bf 0.11209683819444445 Ether
31 окт. 2018 г. 05:45 6615022 0xbc1f5dc13a3a1126b74ccc6582b3ae1fc457ad6168f7de1505403881202450b6 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0.012136 Ether
31 окт. 2018 г. 05:44 6615019 0xfccea463709352717efa73fc71a83b9da3dc676309177da7f3f73ac732ec2b95 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x5ef22b04c15594f3f25116322531e945fe9aaa01 0.012136 Ether
16 окт. 2018 г. 03:58 6522850 0x6540c5b5f230001f6b4926f61961e282db801a5662cb62b5a8f4224ea0ddc82e 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.0045 Ether
15 окт. 2018 г. 03:44 6516680 0xe29f769ca9548d011ab42bee8bcba979d4dc23088e6257159bf9d1731e36481c 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.0171 Ether
15 окт. 2018 г. 03:42 6516665 0xf5cc97669432b65e83d42a9c76cb56d2afb0ebc7bce5bdd90f803c42f198616d 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.00522 Ether
15 окт. 2018 г. 03:40 6516659 0x457f86948643ae6c2dd40bdd631a1753c5f2ff1a4e1e3712f7f43cd03c0e1ba8 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.0162 Ether
15 окт. 2018 г. 03:39 6516655 0xe1a2e8b3de6d80ef6409c678d6a22f243fe8789a842db0afeae44743871ccb68 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.006948 Ether
15 окт. 2018 г. 03:38 6516651 0x007425003bcfdb258cdc85d951c9274fa16aab278064f1f6384e7425b11a766b 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.0198 Ether
15 окт. 2018 г. 03:38 6516650 0x4965303aefe98b2466209f21c881b8ea8f65a0b729237cb07fe95701a0633a8e 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.1008 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x5ef22b04c15594f3f25116322531e945fe9aaa01 0.11042687678244997 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0.5781302770833333 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x14eb26801f7b452275f2f6b18385dd04982fec92 0.07355136332466791 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2422d3403d6767219f804167c3b7d65c0d55f8bf 0.038188780162037035 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x8558cf546362659d56d774a5f53ab7e3f2db5925 0.0898293438599537 Ether
15 окт. 2018 г. 03:33 6516633 0x48ab524cfd248d52b4035d40dfa6577dc5267504219e828369c6e5e551ca9e25 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0xfcfd50ce30968c587b47920f147420cc85384e82 0.028566465277777776 Ether
12 окт. 2018 г. 07:50 6499231 0x63758073eb57c83caac205cf2a6a09b1a5645927cc2453a0a5a8740f906cb072 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.00306 Ether
11 окт. 2018 г. 03:46 6492025 0x91d870bf34f109969547161431a8ca160f59ec6ab9dbcbc7db3c87a03b80bf2a 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.00486 Ether
9 окт. 2018 г. 04:32 6479948 0x9e94dfaa90092322524d55212fbcdf399bf4337c2a2d9a99f41a1fac8aeaada8 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.03204 Ether
9 окт. 2018 г. 04:23 6479908 0x2ae830d8cee0f4579e3e3387a061c2bea15678b09986aeff8881fe3a5e71b048 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x2f4e909609834f98d310184431bc40aabda30502 0.00792 Ether
8 окт. 2018 г. 08:48 6474802 0xbc580ffe967edd6c085fcbc6756a800e32f59a2193256eeeaf9b3fe37d32f53f 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0xcafa20783d8a8caa3d1763d15ba6cce4a812fe0d 0.04437369101571274 Ether
8 окт. 2018 г. 08:47 6474799 0xd01ce9d7edf9108b2e17054e54b9248de1a864d12345b788a342c68298148605 0x4a7b59efa94626b5ce4842ced3303ca8afd789ac 0x5ef22b04c15594f3f25116322531e945fe9aaa01 0.04437369101571274 Ether
Средняя оценка аудиторов -
Contract Source Code </>
pragma solidity ^0.4.24;

contract Lottery {
    using SafeMath for uint;
    using SafeMath for uint8;

    uint private lotteryBalance;
    uint private ticketsCount;

    address[] internal ticketsAddresses;
    mapping(address => uint) internal tickets;

    uint constant private DEPOSIT_MULTIPLY = 100 finney; // 0.1 eth
    uint8 constant internal ITERATION_LIMIT = 150;
    uint8 private generatorOffset = 0;
    uint private randomNumber = 0;

    Utils.winner private lastWinner;

    function addLotteryParticipant(address addr, uint depositAmount) internal {
        if (depositAmount >= DEPOSIT_MULTIPLY) {
            uint investorTicketCount = depositAmount.div(DEPOSIT_MULTIPLY);
            ticketsCount = ticketsCount.add(investorTicketCount);
            ticketsAddresses.push(addr);
            tickets[addr] = tickets[addr].add(investorTicketCount);
        }
    }

    function getLotteryBalance() public view returns(uint) {

        return lotteryBalance;
    }

    function increaseLotteryBalance(uint value) internal {

        lotteryBalance = lotteryBalance.add(value);
    }

    function resetLotteryBalance() internal {

        ticketsCount = 0;
        lotteryBalance = 0;
    }

    function setLastWinner(address addr, uint balance, uint prize, uint date) internal {
        lastWinner.addr = addr;
        lastWinner.balance = balance;
        lastWinner.prize = prize;
        lastWinner.date = date;
    }

    function getLastWinner() public view returns(address, uint, uint, uint) {
        return (lastWinner.addr, lastWinner.balance, lastWinner.prize, lastWinner.date);
    }

    function getRandomLotteryTicket() internal returns(address) {
        address addr;
        if (randomNumber != 0)
            randomNumber = random(ticketsCount);
        uint edge = 0;
        for (uint8 key = generatorOffset; key < ticketsAddresses.length && key < ITERATION_LIMIT; key++) {
            addr = ticketsAddresses[key];
            edge = edge.add(tickets[addr]);
            if (randomNumber <= edge) {
                randomNumber = 0;
                generatorOffset = 0;
                return addr;
            }
        }
        generatorOffset = key;
        return 0;
    }

    function random(uint max) private view returns (uint) {
        return uint(keccak256(abi.encodePacked(block.timestamp, block.difficulty))) % max + 1;
    }
}

contract Stellar {
    using SafeMath for uint;

    uint private stellarInvestorBalance;

    struct stellar {
        address addr;
        uint balance;
    }

    stellar private stellarInvestor;

    Utils.winner private lastStellar;

    event NewStellar(address addr, uint balance);

    function checkForNewStellar(address addr, uint balance) internal {
        if (balance > stellarInvestor.balance) {
            stellarInvestor = stellar(addr, balance);
            emit NewStellar(addr, balance);
        }
    }

    function getStellarInvestor() public view returns(address, uint) {

        return (stellarInvestor.addr, stellarInvestor.balance);
    }

    function getStellarBalance() public view returns(uint) {

        return stellarInvestorBalance;
    }

    function increaseStellarBalance(uint value) internal {

        stellarInvestorBalance = stellarInvestorBalance.add(value);
    }

    function resetStellarBalance() internal {
        stellarInvestorBalance = 0;
    }

    function resetStellarInvestor() internal {
        stellarInvestor.addr = 0;
        stellarInvestor.balance = 0;
    }

    function setLastStellar(address addr, uint balance, uint prize, uint date) internal {
        lastStellar.addr = addr;
        lastStellar.balance = balance;
        lastStellar.prize = prize;
        lastStellar.date = date;
    }

    function getLastStellar() public view returns(address, uint, uint, uint) {
        return (lastStellar.addr, lastStellar.balance, lastStellar.prize, lastStellar.date);
    }
}

contract Star is Lottery, Stellar {

    using Math for Math.percent;
    using SafeMath for uint;

    uint constant private MIN_DEPOSIT = 10 finney; // 0.01 eth
    uint constant private PAYOUT_INTERVAL = 23 hours;
    uint constant private WITHDRAW_INTERVAL = 12 hours;
    uint constant private PAYOUT_TRANSACTION_LIMIT = 100;

    Math.percent private DAILY_PERCENT =  Math.percent(35, 10); // Math.percent(35, 10) = 35 / 10 = 3.5%
    Math.percent private FEE_PERCENT = Math.percent(18, 1);
    Math.percent private LOTTERY_PERCENT = Math.percent(1, 1);
    Math.percent private STELLAR_INVESTOR_PERCENT = Math.percent(1, 1);

    address internal owner;

    uint8 cycle;

    address[] internal addresses;

    uint internal investorCount;
    uint internal lastPayoutDate;
    uint internal lastDepositDate;

    bool public isCycleFinish = false;

    struct investor {
        uint id;
        uint balance;
        uint depositCount;
        uint lastDepositDate;
    }

    mapping(address => investor) internal investors;

    event Invest(address addr, uint amount);
    event InvestorPayout(address addr, uint amount, uint date);
    event Payout(uint amount, uint transactionCount, uint date);
    event Withdraw(address addr, uint amount);
    event NextCycle(uint8 cycle, uint now, uint);

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    constructor() public {
        owner = msg.sender;
        addresses.length = 1;
    }

    function() payable public {
        require(isCycleFinish == false, "Cycle completed. The new cycle will start within 24 hours.");

        if (msg.value == 0) {
            withdraw(msg.sender);
            return;
        }

        deposit(msg.sender, msg.value);
    }

    function restartCycle() public onlyOwner returns(bool) {
        if (isCycleFinish == true) {
            newCycle();
            return false;
        }
        return true;
    }

    function payout(uint startPosition) public onlyOwner {

        require(isCycleFinish == false, "Cycle completed. The new cycle will start within 24 hours.");

        uint transactionCount;
        uint investorsPayout;
        uint dividendsAmount;

        if (startPosition == 0)
            startPosition = 1;

        for (uint key = startPosition; key <= investorCount && transactionCount < PAYOUT_TRANSACTION_LIMIT; key++) {
            address addr = addresses[key];
            if (investors[addr].lastDepositDate + PAYOUT_INTERVAL > now) {
                continue;
            }

            dividendsAmount = getInvestorDividends(addr);

            if (address(this).balance < dividendsAmount) {
                isCycleFinish = true;
                return;
            }

            addr.transfer(dividendsAmount);
            emit InvestorPayout(addr, dividendsAmount, now);
            investors[addr].lastDepositDate = now;

            investorsPayout = investorsPayout.add(dividendsAmount);

            transactionCount++;
        }

        lastPayoutDate = now;
        emit Payout(investorsPayout, transactionCount, lastPayoutDate);
    }

    function deposit(address addr, uint amount) internal {
        require(amount >= MIN_DEPOSIT, "Too small amount, minimum 0.01 eth");

        investor storage user = investors[addr];

        if (user.id == 0) {
            user.id = addresses.length;
            addresses.push(addr);
            investorCount ++;
        }

        uint depositFee = FEE_PERCENT.getPercentFrom(amount);

        increaseLotteryBalance(LOTTERY_PERCENT.getPercentFrom(amount));
        increaseStellarBalance(STELLAR_INVESTOR_PERCENT.getPercentFrom(amount));

        addLotteryParticipant(addr, amount);

        user.balance = user.balance.add(amount);
        user.depositCount ++;
        user.lastDepositDate = now;
        lastDepositDate = now;

        checkForNewStellar(addr, user.balance);

        emit Invest(msg.sender, msg.value);

        owner.transfer(depositFee);
    }

    function withdraw(address addr) internal {
        require(isCycleFinish == false, "Cycle completed. The new cycle will start within 24 hours.");

        investor storage user = investors[addr];
        require(user.id > 0, "Account not found");

        require(now.sub(user.lastDepositDate).div(WITHDRAW_INTERVAL) > 0, "The latest payment was earlier than 12 hours");

        uint dividendsAmount = getInvestorDividends(addr);

        if (address(this).balance < dividendsAmount) {
            isCycleFinish = true;
            return;
        }

        addr.transfer(dividendsAmount);
        user.lastDepositDate = now;

        emit Withdraw(addr, dividendsAmount);
    }

    function runLottery() public onlyOwner returns(bool) {
        return processLotteryReward();
    }

    function processLotteryReward() private returns(bool) {
        if (getLotteryBalance() > 0) {
            address winnerAddress = getRandomLotteryTicket();
            if (winnerAddress == 0)
                return false;
            winnerAddress.transfer(getLotteryBalance());
            setLastWinner(winnerAddress, investors[winnerAddress].balance, getLotteryBalance(), now);
            resetLotteryBalance();
            return true;
        }

        return false;
    }

    function giveStellarReward() public onlyOwner {
        processStellarReward();
    }

    function processStellarReward() private {
        uint balance = getStellarBalance();
        if (balance > 0) {
            (address addr, uint investorBalance) = getStellarInvestor();
            addr.transfer(balance);
            setLastStellar(addr, investors[addr].balance, getStellarBalance(), now);
            resetStellarBalance();
        }
    }

    function getInvestorCount() public view returns (uint) {

        return investorCount;
    }

    function getBalance() public view returns (uint) {

        return address(this).balance;
    }

    function getLastPayoutDate() public view returns (uint) {

        return lastPayoutDate;
    }

    function getLastDepositDate() public view returns (uint) {

        return lastDepositDate;
    }

    function getInvestorDividends(address addr) public view returns(uint) {
        uint amountPerDay = DAILY_PERCENT.getPercentFrom(investors[addr].balance);
        uint timeLapse = now.sub(investors[addr].lastDepositDate);

        return amountPerDay.mul(timeLapse).div(1 days);
    }

    function getInvestorBalance(address addr) public view returns(uint) {

        return investors[addr].balance;
    }

    function getInvestorInfo(address addr) public onlyOwner view returns(uint, uint, uint, uint) {

        return (
            investors[addr].id,
            investors[addr].balance,
            investors[addr].depositCount,
            investors[addr].lastDepositDate
        );
    }

    function newCycle() private {
        address addr;
        uint8 iteration;
        uint i;

        for (i = addresses.length - 1; i > 0; i--) {
            addr = addresses[i];
            addresses.length -= 1;
            delete investors[addr];
            iteration++;
            if (iteration >= ITERATION_LIMIT) {
                return;
            }
        }

        for (i = ticketsAddresses.length - 1; i > 0; i--) {
            addr = ticketsAddresses[i];
            ticketsAddresses.length -= 1;
            delete tickets[addr];
            iteration++;
            if (iteration >= ITERATION_LIMIT) {
                return;
            }
        }

        emit NextCycle(cycle, now, getBalance());

        cycle++;
        investorCount = 0;
        lastPayoutDate = now;
        lastDepositDate = now;
        isCycleFinish = false;

        resetLotteryBalance();
        resetStellarBalance();
        resetStellarInvestor();
    }

}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0); // Solidity only automatically asserts 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 Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two numbers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

library Math {

    struct percent {
        uint percent;
        uint base;
    }

    function getPercentFrom(percent storage p, uint value) internal view returns (uint) {
        return value * p.percent / p.base / 100;
    }

}

library Utils {

    struct winner {
        address addr;
        uint balance;
        uint prize;
        uint date;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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