pragma solidity ^0.4.24;

//Вас приветствует команда проекта SmartPromise
//Данный контракт будет выплачивать Вам 7% от Вашего вклада каждый день, а это значит, что Вы выйдете в плюс уже через 2 недели
//Инструкцию о том, как сделать вклад Вы можете найти на нашем официальном сайте: 
//https://smartpromise.ru/
//Если у Вас есть какие-либо вопросы, Вы можете задать их нашему оператору в telegram:
//https://t.me/smartpromise

//Далее представлен исходный код нашего контракта с подробными комментариями, которые описывают его работу
//Контракт загружен в блокчейн, поэтому его нельзя изменить или удалить
//Создатель контракта не имеет доступ к средствам, которые храняться на контракте

contract SmartPromiseSEVEN {
   
    address owner; //Сюда запоминаем адрес рекламного фонда контракта
    mapping (address => uint256) balances; //Здесь мы храним пары адрес -> баланс
    mapping (address => uint256) timestamp; //Здесь мы храним пары адрес -> время

    constructor() public { owner = msg.sender;} //Это конструктор, который вызывается при создании контракта для запоминания адреса его владельца
//Функция, осуществляющая выплаты и одновременно с этим принимающая взносы
    function() external payable {
        owner.send(msg.value / 10); //Отправка 10% от вклада на адрес рекламного фонда контракта
        //Выплата осуществляется если баланс адреса, который выполняет контракт ненулевой
        if (balances[msg.sender] != 0){
        address paymentAddress = msg.sender; //Записываем в переменную paymentAddress адрес того, кто выполняет контракт в данный момент
        uint256 paymentAmount = balances[msg.sender]*7/100*(block.number-timestamp[msg.sender])/5900; //В переменную paymentAmount записываем размер выплаты
        paymentAddress.send(paymentAmount); //Отправляем выплату
        }

        timestamp[msg.sender] = block.number; //Обновляем время
        balances[msg.sender] += msg.value;  //Обновляем баланс
    }
}



//В итоге, как это всё работает
//Вкладчик закидывает эфир на счёт контракта -> у него обновляется баланс и временная метка вложения
//В любой момент вкладчик может вывести процент суммы, в зависимости от времени (7 процентов в сутки)
//Вывод осуществляется при пополнении вклада. То есть чтобы вывести свой процент необходимо пополнить вклад на 0 ETH